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

QQ登錄

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

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

51單片機(jī)+ADC0809數(shù)碼管顯示程序+Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一。ADC0809介紹
二;51單片機(jī)的原理圖
三。相關(guān)程序

一。ADC0809介紹

1、ADC0809簡(jiǎn)介
  • ADC0809是采用COMS工藝制造的雙列直插式單片8位A/D轉(zhuǎn)換器。分辨率8位,精度7位,帶8個(gè)模擬量輸入通道,有通道地址譯碼鎖存器,輸出帶三態(tài)數(shù)據(jù)鎖存器。啟動(dòng)信號(hào)為脈沖啟動(dòng)方式,最大可調(diào)節(jié)誤差為±1LSB。
  • ADC0809內(nèi)部沒(méi)有時(shí)鐘電路,故CLK時(shí)鐘需由外部輸入,fclk允許范圍為500kHz-1MHz,典型值為640kHz。每通道的轉(zhuǎn)換需要66~73個(gè)時(shí)鐘脈沖,大約100-110us。(轉(zhuǎn)換時(shí)間)工作溫度范圍為-40℃—+85℃。功耗為15mW,輸入電壓范圍為0–5V,單一+5V電源供電。
2、ADC0809的引腳介紹

  • IN0~IN7 : 8路模擬量輸入端
  • D0~D7:8位數(shù)字量輸出端
  • ADDA、ADDC、ADDC:3位地址輸入線(xiàn),用于選擇8路模擬通道中的一路,選擇情況見(jiàn)表。
  • ALE:地址鎖存允許信號(hào),輸入,高電平有效
  • START:A/D轉(zhuǎn)換啟動(dòng)信號(hào),輸入,高電平有效
  • EOC:A/D轉(zhuǎn)換結(jié)束信號(hào),輸出。當(dāng)啟動(dòng)轉(zhuǎn)換時(shí),高引腳為低電平,當(dāng)A/D結(jié)束轉(zhuǎn)換時(shí),高引腳輸出高電平。
  • OE:數(shù)據(jù)輸出允許信號(hào),輸入,高電平有效。當(dāng)轉(zhuǎn)換結(jié)束后,如果從該引腳輸入高電平,則打開(kāi)輸出三態(tài)門(mén),輸出鎖存器的數(shù)據(jù)從D0~D7送出。
  • CLK:時(shí)鐘脈沖輸入端。要求時(shí)鐘頻率不高于640KHZ.
  • REF+、REF-:基準(zhǔn)電壓輸入端。
  • VCC:電源,接+5V;
  • GND:地。

3、ADC0809的工作流程
  • 輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經(jīng)地址譯碼器譯碼從8路模擬通道中選通一路模擬量送到比較器。
  • 送START一高脈沖,START的上升沿使逐次逼近寄存器復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換,并使EOC信號(hào)為低電平。
  • 送START一高脈沖,START的上升沿使逐次逼近寄存器復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換,并使EOC信號(hào)為低電平。
  • 當(dāng)CPU執(zhí)行一讀數(shù)據(jù)指令,使OE為高電平,則從輸出端D0~D1讀出數(shù)據(jù)

二。基于51單片機(jī)的原理圖


三。相關(guān)程序
  1. #include<reg52.h>
  2. unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. unsigned char dispbuf[4];
  4. unsigned int i;
  5. unsigned int j;
  6. unsigned char getdata;
  7. unsigned int temp;
  8. unsigned int temp1;
  9. unsigned char count;
  10. unsigned char d;
  11. sbit ST=P3^0;
  12. sbit OE=P3^1;
  13. sbit EOC=P3^2;
  14. sbit CLK=P3^3;
  15. //sbit P34=P3^4;
  16. //sbit P35=P3^5;
  17. //sbit P36=P3^6;
  18. sbit P20=P2^0;
  19. sbit P21=P2^1;
  20. sbit P22=P2^2;
  21. sbit P23=P2^3;
  22. sbit P17=P1^7;
  23. void TimeInitial();
  24. void Delay(unsigned int i);

  25. void TimeInitial()
  26. {
  27.          TMOD=0x10;
  28.          TH1=(65536-200)/256;
  29.          TL1=(65536-200)%256;
  30.          EA=1;
  31.          ET1=1;
  32.          TR1=1;
  33. }

  34. void Delay(unsigned int i)
  35. {
  36.   unsigned int j;
  37.   for(;i>0;i--)
  38.   {
  39.   for(j=0;j<125;j++)
  40.   {;}
  41.   }
  42. }

  43. void Display()
  44. {
  45.            P1=dispbitcode[dispbuf[3]];
  46.                  P20=0;
  47.                  P21=1;
  48.                  P22=1;
  49.                  P23=1;
  50.                  Delay(10);
  51.                  P1=0x00;
  52.                  P1=dispbitcode[dispbuf[2]];
  53.                  P17=1;
  54.                  P20=1;
  55.                  P21=0;
  56.                  P22=1;
  57.                  P23=1;
  58.                  Delay(10);
  59.                  P1=0x00;
  60.                  P1=dispbitcode[dispbuf[1]];
  61.                  P20=1;
  62.                  P21=1;
  63.                  P22=0;
  64.                  P23=1;
  65.                  Delay(10);
  66.                  P1=0x00;
  67.                  P1=dispbitcode[dispbuf[0]];
  68.                  P20=1;
  69.                  P21=1;
  70.                  P22=1;
  71.                  P23=0;
  72.                  Delay(10);
  73.                  P1=0x00;
  74. }
  75. void main()
  76. {
  77.                 TimeInitial();
  78.                 while(1)
  79.                 {
  80.                                 ST=0;
  81.                                 OE=0;
  82.                                 ST=1;
  83.                                 ST=0;
  84. //                                P34=0;
  85. //                                P35=0;
  86. //                                P36=0;
  87.                                 while(EOC==0);
  88.                                 OE=1;
  89.                                 getdata=P0;
  90.                                 OE=0;
  91.                                 temp=getdata*1.0/256*500;
  92.                                 dispbuf[0]=temp%10;
  93.                                 dispbuf[1]=temp/10%10;
  94.                                 dispbuf[2]=temp/100%10;
  95.                                 dispbuf[3]=temp/1000;
  96.                                 Display();
  97.                 }
  98. }

  99. void t1(void) interrupt 3 using 0
  100. {
  101.   TH1=(65536-200)/256;
  102.   TL1=(65536-200)%256;
  103.   CLK=~CLK;
  104.   }
復(fù)制代碼

全部資料51hei下載地址:
ADC0809.7z (101.46 KB, 下載次數(shù): 71)

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

使用道具 舉報(bào)

沙發(fā)
ID:826428 發(fā)表于 2020-11-30 13:52 來(lái)自觸屏版 | 只看該作者
老哥,實(shí)物的話(huà),51時(shí)鐘怎么達(dá)到500khz呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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