找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3213|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于ADC0809的單路數(shù)碼管電壓表設(shè)計(jì)(帶Proteus仿真)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì),大部分都是跟著學(xué)霸的樣子照貓畫(huà)虎寫(xiě)出來(lái)的,做了些適當(dāng)?shù)母膭?dòng)
代碼和功能都比較簡(jiǎn)陋,代碼有注釋,適合單片機(jī)入門(mén)參考(仿真用的是proteus8.6版本,低版本的可能打不開(kāi))
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數(shù)碼管斷選碼,不顯示小數(shù)點(diǎn)
  5. unsigned char b[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //顯示小數(shù)點(diǎn)
  6. sbit  START=P2^4;
  7. sbit  OE=P2^6;
  8. sbit  EOC=P2^5;
  9. sbit  add_a=P2^2;
  10. sbit  add_b=P2^1;
  11. sbit  add_c=P2^0;
  12. sbit  led=P2^7;
  13. sbit  buzzer=P2^3;
  14. sbit  S_1=P0^0;                         
  15. sbit S_2=P0^1;
  16. sbit S_3=P0^2;
  17. sbit S_4=P0^3 ;
  18. void Delay1ms(unsigned int count)
  19. {
  20.         unsigned  int i,j;
  21.         for(i=0;i<count;i++)
  22.         for(j=0;j<120;j++);
  23. }



  24. void main(void)
  25. {
  26.         unsigned int addata=0,i;   
  27.                 unsigned char temp0=0,temp1=0,temp2=0;
  28.         while(1)
  29.   {              //采集第一路信號(hào)
  30.     add_a=0;
  31.     add_b=0;
  32.     add_c=0;   
  33.                           START=0;
  34.                 START=1;
  35.                                 Delay1ms(5);
  36.                                 START=0;
  37.                 while(EOC!=1);
  38.                 OE=1;
  39.                 addata=P1;
  40.                          OE=0;
  41.                                          if(addata>=0xcc)    //當(dāng)大于4.0v時(shí),則使用LED和蜂鳴器報(bào)警
  42.         {
  43.                 for(i=0;i<100;i++)
  44.                 {
  45.                         led=~led;
  46.                         buzzer=~buzzer;
  47.                 }
  48.                 led=1;   //控制發(fā)光二極管D2閃爍,發(fā)出光報(bào)警信號(hào)
  49.                 buzzer=1;     //控制蜂鳴器發(fā)聲,發(fā)出聲音報(bào)警信號(hào)
  50.         }
  51.         else     //否則取消報(bào)警
  52.         {
  53.                 led=0;     //控制發(fā)光二極管D2滅
  54.                 buzzer=0;  //控制蜂鳴器不發(fā)聲
  55.         }
  56.                  
  57.        
  58.         addata=addata*100/51; //  二進(jìn)制輸出數(shù)據(jù)最高是255,仿真電壓最高是5v,255/5=51,最小單位是51
  59.         temp0=addata%10;           // 取個(gè)位數(shù) 例如輸出數(shù)據(jù)為123,123/10=12.3,addata為整數(shù),不能等于12.3,只能取余數(shù)3
  60.         temp1=(addata/10)%10;  // 取十分位數(shù)       
  61.         temp2=(addata/100)%10; //取百分位數(shù)         

  62.                 for(i=0;i<=200;i++)
  63.                   {
  64.         
  65.         S_1 = 0;                 //第一個(gè)數(shù)碼管
  66.         S_2 = 1;
  67.         S_3 = 1;
  68.         S_4= 1;
  69.         P3=b[temp2];             //選取帶有小數(shù)點(diǎn)的段選碼
  70.         Delay1ms(10);               //延時(shí)
  71.         S_1 = 1;                //消隱
  72.                
  73.   //十分位
  74.         S_1 = 1;
  75.         S_2 = 0;                   //取第二個(gè)數(shù)碼管
  76.         S_3= 1;
  77.         S_4= 1;
  78.         P3=a[temp1];              //選取不帶有小數(shù)點(diǎn)的段選碼
  79.   Delay1ms(5);
  80.         S_2 = 1;                    //消隱
  81.        
  82.   //百分位
  83.         S_1 = 1;
  84.         S_2 = 1;
  85.         S_3= 0;                      //取第三個(gè)數(shù)碼管
  86.         S_4= 1;
  87.         P3=a[temp0];                //選取不帶有小數(shù)點(diǎn)的段選碼
  88. Delay1ms(5);  
  89.   S_3= 1;

  90.            }
  91. }}               
復(fù)制代碼

所有資料51hei提供下載:
ADC0809數(shù)碼管電壓表.zip (134.83 KB, 下載次數(shù): 46)
(仿真用的是proteus8.6版本,低版本的可能打不開(kāi))

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表