日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

單片機12V數(shù)控電源

出處:21ic 發(fā)布于:2018-07-06 11:41:53

這次做的數(shù)控電源設計思想沒什么新意,就是一個數(shù)模轉換(ADC0809)和一個模數(shù)轉換(DAC0832),再加上兩個單片機分別控制0809和0832,組成一個反饋網(wǎng)絡,來得到輸入的數(shù)字相對應的電壓,電壓范圍很小,只有0~12.75V.顯示部分采用四段共陰數(shù)碼管
  整塊板子做出來之后有10*7cm那么大,用洞洞板焊的.
  實測電路輸出+/-0.05V在12V范圍內(nèi).


   硬件設計:
  塊單片機P0口接數(shù)碼管代碼段的驅(qū)動,P2.4~P2.7接四位的位選線,P2.0~P2.3節(jié)四個獨立操作按鍵[模式][加][減][確定],P1口接ADC0809的八位數(shù)據(jù)輸出.P3.0~P3.3口接0809的控制線.P3.5~P3.7和第二塊單片機的P2.0,P2.1,P2.2相連,用來控制數(shù)模輸出增減.三根控制線作用分別為[輸出改變允許控制Control_1][增減信號Control_2][增減速度控制Control_speed]
  第二塊單片機除了前面的三根控制線,就只剩下和DAC0832的控制線了,看電路圖.

 

   用0832輸出控制LM317可調(diào)三端穩(wěn)壓器的輸出電壓:


  DAC0809所需時鐘脈沖由NE555產(chǎn)生


  系統(tǒng)電源:5V12VGND-12V
  程序清單:塊單片機:(接0809,四段數(shù)碼管,四個獨立按鍵)
  #include
  #defineucharunsignedchar
  inti=0,a=0;//定義循環(huán)算子
  ucharhold=5;//當前操作數(shù)[0-led1][1-led2][2-led3][3-led4][4-快速調(diào)節(jié)][5-無]
  ucharGet_data=0;//模數(shù)轉換得到的結果
  intGet_data2=0;//將Get_data*5用以方便轉化(做電壓表時用)//ucharled[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//陽極驅(qū)動不帶小數(shù)點
  ucharled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};//陰極驅(qū)動
  //ucharpoint[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00};//陽極驅(qū)動帶小數(shù)點
  ucharpoint[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xFF};
  ucharV_list[]={30,36,60,66,90,100,120,180,240};//電壓值列表
  ucharV_index=6;//預置電壓索引.ucharnum[4]={10,5,0,0};//顯示緩存
  ucharV_num=100;//顯示的電壓對應在0~255電之間的值,預置壓數(shù)5V
  uchartime=0;//控制模數(shù)轉換頻率變量
  uchartimes=0;//控制按鍵允許速度變量
  ucharscan_grant=1;//允許輸入
  ucharhide_flag=0;//隱藏標志[0隱藏][1顯示]和hold配合用于控制某一位數(shù)碼管的亮滅
  ucharhide_time=0;//用于控制數(shù)碼管閃爍快慢
  //ucharzhengshu,xiaoshu_1,xiaoshu_2;voiddelay(ints);
  voidkey_mode();
  voidkey_add();
  voidkey_sub();
  voidkey_confirm();
  voiddisplay();
  voidADC();
  voidconvert();//將get_data填入到num[]數(shù)組中
  voidscan_key();//鍵盤掃描函數(shù)
  voidcompare();//比較函數(shù)(Control_1Control_2)[00-正確][11-加][10減]//定義位選線
  sbitled_1=P2^7;
  sbitled_2=P2^6;
  sbitled_3=P2^5;
  sbitled_4=P2^4;
  sbitmode=P2^0;
  sbitadd=P2^1;
  sbitsub=P2^2;
  sbitconfirm=P2^3;
  //0809四根控制線
  sbitALE=P3^0;
  sbitSTART=P3^1;
  sbitOE=P3^2;
  sbitEOC=P3^3;
  //兩根控制線
  sbitControl_1=P3^6;//變化控制線[1變化][0不變]
  sbitControl_2=P3^7;//增減控制線[1增][0減]
  sbitControl_speed=P3^5;//控制變化速度
  sbitclose=P3^4;//當電壓穩(wěn)定時為0;voidmain()
  {
  //初始化
  led_1=0;
  led_2=0;
  led_3=0;
  led_4=0;
  //初始化定時器
  TMOD=0x01;//定時器0,方式1
  TH0=0x3c;
  TL0=0xb0;
  ET0=1;//允許定時器0中斷
  TR0=1;//啟動定時器0運行
  EA=1;//全部中斷允許
  Control_1=0;
  Control_2=0;
  while(1)
  {
  time++;
  if(time>=10)
  {
  time=0;
  //掃描鍵盤
  if(hold==5)
  {
  ADC();//模數(shù)轉換
  compare();//轉換結果比較,修改控制變量
  }
  else
  {
  Control_1=0;
  Control_2=0;
  }
  }
  if(scan_grant==0)
  {
  scan_key();
  convert();
  scan_grant=1;
  EA=1;
  }
  hide_time++;
  if(hide_time>=80)
  {
  hide_time=0;
  if(hide_flag==1)
  {hide_flag=0;}
  else
  {hide_flag=1;}
  }
  display();
  }
  }
  //延時函數(shù)
  voiddelay(ints)
  {
  for(i=0;i{}
  }
  //按鍵處理------------------------------------
  voidkey_mode()
  {
  delay(1000);
  if(mode==0)
  {
  hold++;
  if(hold>=6)
  {hold=1;}
  }
  }
  voidkey_add()//加函數(shù)
  {
  delay(1000);
  if(add==0)
  {
  if(hold==0)//當前操作數(shù)[0-led1即num[0]]
  {
  }
  if(hold==1)//當前操作數(shù)[1-led2即num[1]]
  {
  if(V_num<=235)
  {V_num=V_num+20;}//加1V
  }
  if(hold==2)//當前操作數(shù)[2-led3即num[2]]
  {
  if(V_num<=253)
  {V_num=V_num+2;}//加0.1V
  }
  if(hold==3)//當前操作數(shù)[3-led4即num[3]]
  {
  if(V_num<=254)
  {V_num++;}//加0.05V
  }
  if(hold==4)//當前操作數(shù)[4-快速調(diào)節(jié)即V_index]
  {
  if(V_index<=7)
  {V_index++;}
  V_num=V_list[V_index];
  }
  if(hold==5)//當前操作數(shù)[5-無]
  {
  }
  }
  }
  voidkey_sub()//減函數(shù)
  {
  delay(1000);
  if(sub==0)
  {
  if(hold==0)//當前操作數(shù)[0-led1即num[0]]
  {
  }
  if(hold==1)//當前操作數(shù)[1-led2即num[1]]
  {
  if(V_num>=20)
  {V_num=V_num-20;}//減1V
  }
  if(hold==2)//當前操作數(shù)[2-led3即num[2]]
  {
  if(V_num>=2)
  {V_num=V_num-2;}//減0.1V
  }
  if(hold==3)//當前操作數(shù)[3-led4即num[3]]
  {
  if(V_num>=1)
  {V_num--;}//減0.05V
  }
  if(hold==4)//當前操作數(shù)[4-快速調(diào)節(jié)即V_index]
  {
  if(V_index>=1)
  {V_index--;}
  V_num=V_list[V_index];
  }
  if(hold==5)//當前操作數(shù)[5-無]
  {
  }
  }
  }
  voidkey_confirm()
  {
  delay(1000);
  if(confirm==0)
  {
  hold=5;
  }
  }
  //-------------------------------------------------------------
  voiddisplay()
  {
  /*led_1=1;
  if(num[0]==0)//如果位是0的話就不顯示,led[10]是空
  {P0=led[10];}
  else
  {P0=led[num[0]];}delay(100);
  led_1=0;
  P0=0xFF;led_2=1;
  P0=point[num[1]];
  delay(100);
  led_2=0;
  P0=0xFF;led_3=1;
  P0=led[num[2]];
  delay(100);
  led_3=0;
  P0=0xFF;led_4=1;
  P0=led[num[3]];
  delay(100);
  led_4=0;
  P0=0xFF;*/
  if(hide_flag==1)
  {
  if(hold==4)
  {
  delay(400);
  return;
  }
  if(hold!=1)
  {
  led_1=1;
  if(num[0]==0)//如果位是0的話就不顯示,led[10]是空
  {P0=led[10];}
  else
  {P0=led[num[0]];}
  delay(100);
  led_1=0;
  P0=0xFF;
  led_2=1;
  P0=point[num[1]];
  delay(100);
  led_2=0;
  P0=0xFF;
  }
  if(hold!=2)
  {
  led_3=1;
  P0=led[num[2]];
  delay(100);
  led_3=0;
  P0=0xFF;
  }
  if(hold!=3)
  {
  led_4=1;
  P0=led[num[3]];
  delay(100);
  led_4=0;
  P0=0xFF;
  }
  }if(hide_flag==0)
  {
  led_1=1;
  if(num[0]==0)//如果位是0的話就不顯示,led[10]是空
  {P0=led[10];}
  else
  {P0=led[num[0]];}
  delay(100);
  led_1=0;
  P0=0xFF;
  led_2=1;
  P0=point[num[1]];
  delay(100);
  led_2=0;
  P0=0xFF;
  led_3=1;
  P0=led[num[2]];
  delay(100);
  led_3=0;
  P0=0xFF;
  led_4=1;
  P0=led[num[3]];
  delay(100);
  led_4=0;
  P0=0xFF;
  }
  }
  voidADC()
  {
  START=0;
  OE=0;
  START=1;
  delay(65);
  START=0;
  while(EOC==1)
  {}
  OE=1;
  delay(65);
  Get_data=P1;
  OE=0;
  //convert();
  }
  voidconvert()
  {
  //基準電壓要為12.8V
  /*Get_data2=Get_data*5;
  num[0]=Get_data2/1000;
  Get_data2=Get_data2%1000;
  num[1]=Get_data2/100;
  Get_data2=Get_data2%100;
  num[2]=Get_data2/10;
  Get_data2=Get_data2%10;
  num[3]=Get_data2;*/
  Get_data2=V_num*5;
  //Get_data2=Get_data*5;
  num[0]=Get_data2/1000;
  Get_data2=Get_data2%1000;
  num[1]=Get_data2/100;
  Get_data2=Get_data2%100;
  num[2]=Get_data2/10;
  Get_data2=Get_data2%10;
  num[3]=Get_data2;
  }
  voidscan_key()//鍵盤掃描后函數(shù)分配
  {
  if(mode==0)
  key_mode();
  if(add==0)
  key_add();
  if(sub==0)
  key_sub();
  if(confirm==0)
  key_confirm();
  }voidcompare()//比較函數(shù)(Control_1Control_2)[00-正確][11-加][10減]
  {
  Control_1=0;
  Control_2=0;if(V_num<(Get_data-1))
  {
  Control_1=1;
  Control_2=0;
  if((Get_data-V_num)>=10)
  {
  Control_speed=1;
  close=1;
  }
  else
  {
  Control_speed=0;
  close=0;
  }
  }
  if(V_num>(Get_data+1))
  {
  Control_1=1;
  Control_2=1;
  if((V_num-Get_data)>=10)
  {
  Control_speed=1;
  close=1;
  }
  else
  {
  Control_speed=0;
  close=0;
  }
  }
  }
  //中斷函數(shù):
  //定時器中斷T0用于消除按鍵等待
  //定時器中斷T1用于進入AD轉換函數(shù)
  //--------------------------------------------------------------------
  //-------------------------定時器中斷服務程序-------------------------
  //--------------------------定時器0工作方式1--------------------------
  //任務:
  //1:限定進入按鍵掃描程序的時間間隔,避免在短時間內(nèi)多次進入鍵盤掃描而造成誤操作
  //--------------------------------------------------------------------
  voidclear_key()interrupt1using1
  {
  times=times+1;
  if(times==7)//這個數(shù)字決定了按鍵上限速度.
  {
  times=0;
  scan_grant=0;//允許輸入
  EA=0;
  }
  TH0=0x3c;//計數(shù)器初值重載
  TL0=0xb0;
  }
  第二塊單片機(接0832)
  #include
  #defineucharunsignedchar
  inti;
  sbitCS12=P3^0;//控制線
  sbitWR12=P3^1;//控制線
  sbitled=P2^2;//控制led亮滅
  sbitControl_1=P2^1;//變化控制線1[1變化][0不變]
  sbitControl_2=P2^0;//加減控制線2[1增][0減]
  sbitControl_speed=P2^3;//變化速度控制
  ucharout=0;//輸出數(shù)據(jù)
  uchara=0;
  voiddelay(ints);
  voidmain()
  {
  P1=0;
  WR12=0;
  CS12=0;
  Control_1=1;
  Control_2=1;
  Control_speed=1;
  while(1)
  {
  for(a=0;a<=20;a++)
  {
  delay(1000);
  }
  //根據(jù)控制信號線決定加減.
  if(Control_1==1)
  {
  if(led==0)
  {led=1;}
  else
  {led=0;}
  if(Control_2==1)
  {
  if(out<=254)
  if(Control_speed==0)
  {out++;}
  if(Control_speed==1)
  {out=out+10;}
  }
  if(Control_2==0)
  {
  if(out>=1)
  if(Control_speed==0)
  {out--;}
  if(Control_speed==1)
  {out=out-10;}
  }
  //寫操作
  WR12=0;
  CS12=0;
  P1=out;
  delay(100);
  CS12=1;
  WR12=1;
  }
  if(Control_1==0)
  {
  led=1;
  }
  /*if(out>=255)
  {out=255;}
  if(out<=1)
  {out=0;}*/
  }
  }
  voiddelay(ints)
  {
  for(i=0;i{}
  }

關鍵詞:單片機12V數(shù)控電源單片機,數(shù)控電源

版權與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關法律責任。

本網(wǎng)轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。

如涉及作品內(nèi)容、版權等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術客服:

0571-85317607

網(wǎng)站技術支持

13606545031

客服在線時間周一至周五
9:00-17:30

關注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!