欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)驅(qū)動(dòng)ADC0809 A/D轉(zhuǎn)換器實(shí)現(xiàn)數(shù)字電壓表實(shí)例 [打印本頁]

作者: ziba108    時(shí)間: 2018-6-10 10:52
標(biāo)題: 51單片機(jī)驅(qū)動(dòng)ADC0809 A/D轉(zhuǎn)換器實(shí)現(xiàn)數(shù)字電壓表實(shí)例

ADC0809工作原理:
ADDA/ADDB/ADDC 輸入3位地址,并使ALE=1,將地址存入地址鎖存器中
ALE:地址鎖存允許信號(hào)接入端,高電平時(shí)允許改變CBA的值,低電平時(shí)鎖死,防止在A/D轉(zhuǎn)換過程中切換通道
地址經(jīng)譯碼選通8路模擬輸入IN0~IN7之一到比較器,輸入與被選通道關(guān)系

· START端上升沿將逐次逼近寄存器復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換
· EOC輸出信號(hào)變低電平,表示正在轉(zhuǎn)換;當(dāng)A/D轉(zhuǎn)換完成,EOC變?yōu)楦唠娖剑Y(jié)果數(shù)據(jù)已存入鎖存器。
·
· OE輸入高電平,輸出三態(tài)門打開,轉(zhuǎn)換結(jié)果的數(shù)字量輸出到數(shù)據(jù)總線上。
·
· OE=1時(shí),D0-D7引腳上為轉(zhuǎn)換后的數(shù)據(jù),當(dāng)OE=0時(shí),D0-D7為對(duì)外呈現(xiàn)高阻狀態(tài)
其他引腳:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps1AD1.tmp.jpg
IN0~IN7:8路模擬量輸入引腳
CLK:時(shí)鐘信號(hào)輸入端
V_(REF(+)):參考電壓正端
V_(REF(-)):參考電壓負(fù)端

實(shí)現(xiàn)思路:
A/D轉(zhuǎn)換
初始化時(shí)啟動(dòng)A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后OE自動(dòng)置位
檢查OE狀態(tài),為高電平時(shí)讀取數(shù)據(jù)口數(shù)據(jù)并轉(zhuǎn)換成對(duì)應(yīng)的電壓值
顯示結(jié)束后啟動(dòng)下一次A/D轉(zhuǎn)換數(shù)碼管顯示讀入數(shù)據(jù)并轉(zhuǎn)換成電壓值后,通過數(shù)碼管顯示,百位數(shù)值后顯示小數(shù)點(diǎn)。
序如下:
  1. #include <reg52.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;
  4. typedef unsigned long ulong;
  5. uchar code table[] =
  6. {
  7.            0xfc, 0x60, 0xda, 0xf2,
  8. 0x66, 0xb6, 0xbe, 0xe0,
  9. 0xfe, 0xf6, 0xee, 0x3e,
  10. 0x9c, 0x7a, 0x9e, 0x8e 8 };
  11. sbit start = P3 ^ 0; //控制start引腳
  12. sbit eoc = P3 ^ 1; //查詢eoc引腳情況
  13. sbit oe = P3 ^ 2; //輸出允許控制端
  14. sbit dot = P1 ^ 0; //數(shù)碼管小數(shù)點(diǎn)
  15. void Delay(uint m)   {
  16.      while(m--);
  17. }
  18. //主函數(shù)
  19. void main()  {
  20.      ulong temp, temp_data;
  21.      // uint temp;
  22.      start = 0;
  23.      oe = 0; //oe為高阻狀態(tài)
  24.      start = 1; //start下降沿開始轉(zhuǎn)換
  25.      start = 0;
  26.      while(1)
  27.      {
  28.          if (eoc == 1) //當(dāng)eoc為1時(shí)轉(zhuǎn)換結(jié)束
  29.          {
  30.              /*讀入狀態(tài)*/
  31.              oe = 1; //打開oe,數(shù)據(jù)讀入引腳
  32.              temp = P0;
  33.              /*讀入的數(shù)值轉(zhuǎn)換成模擬電壓對(duì)應(yīng)的電壓值,由于ADC0809將0-5V平分為255份,每一份為5/255v,
  34. 電壓=1.0v時(shí),temp=1.0*(5/255),為了方便顯示小數(shù),則擴(kuò)大一百倍,得到公式temp=temp*1.0/255*500
  35.              但是在此處存在個(gè)問題,temp轉(zhuǎn)換成為flout類型后運(yùn)算量過大,影響后數(shù)碼管顯示速度,在一定范圍內(nèi)數(shù)碼管顯示錯(cuò)誤  temp = temp * 1.0 / 255 * 500; → temp = temp * 500 / 255;
  36.              p.s. 修改后的temp要改成unsigned long, FF*500溢出int范圍
  37.              */
  38.              temp = temp * 500 / 255;
  39.              oe = 0; //oe呈高阻
  40.              /*數(shù)碼管顯示*/
  41.              temp_data = temp % 10;
  42.              P2 = 0xfe; //數(shù)碼管選擇最后一位
  43.              P1 = table[temp_data];
  44.              Delay(500);
  45.              temp_data = temp / 10 % 10;
  46.              P2 = 0xfd; //數(shù)碼管選擇十位
  47.              P1 = table[temp_data];
  48.              Delay(500);
  49.              temp_data = temp / 100 % 10;
  50.              P2 = 0xfb; //數(shù)碼管選擇百位
  51.              P1 = table[temp_data];
  52.              dot = 1; //顯示小數(shù)點(diǎn)
  53.              Delay(500);
  54.              /*啟動(dòng)下一次轉(zhuǎn)換*/
  55.              start = 1;
  56.              start = 0;
  57.          }
  58.      }
  59. }
復(fù)制代碼


完整的Word格式文檔51黑下載地址:
51單片機(jī)AD轉(zhuǎn)換器實(shí)現(xiàn)數(shù)字電壓表實(shí)例.docx (238.71 KB, 下載次數(shù): 102)



作者: feiji666    時(shí)間: 2018-6-10 20:58
必學(xué)的呀!
作者: 掃福11    時(shí)間: 2018-6-27 11:10
大佬會(huì)這個(gè)嗎,看一看附件[attach]127344[/attach]
作者: 我活著哎1    時(shí)間: 2018-6-29 10:33
我做了,有問題,運(yùn)行不出來結(jié)果
作者: zichuan    時(shí)間: 2018-10-4 23:05
為什么要1分多種數(shù)碼管哪兒才顯示電壓?
作者: the-instinct    時(shí)間: 2018-10-13 15:37
只要把轉(zhuǎn)換輸出換了就能將0808改成0809了吧
作者: linaa    時(shí)間: 2020-3-9 18:40
好像有點(diǎn)問題
作者: wangai0405    時(shí)間: 2020-7-10 21:11
怎么運(yùn)行結(jié)果不對(duì)啊




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1