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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10988|回復: 7
打印 上一主題 下一主題
收起左側

51單片機驅動ADC0809 A/D轉換器實現數字電壓表實例

  [復制鏈接]
跳轉到指定樓層
樓主

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

· START端上升沿將逐次逼近寄存器復位,下降沿啟動A/D轉換
· EOC輸出信號變低電平,表示正在轉換;當A/D轉換完成,EOC變為高電平,結果數據已存入鎖存器。
·
· OE輸入高電平,輸出三態門打開,轉換結果的數字量輸出到數據總線上。
·
· OE=1時,D0-D7引腳上為轉換后的數據,當OE=0時,D0-D7為對外呈現高阻狀態
其他引腳:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps1AD1.tmp.jpg
IN0~IN7:8路模擬量輸入引腳
CLK:時鐘信號輸入端
V_(REF(+)):參考電壓正端
V_(REF(-)):參考電壓負端

實現思路:
A/D轉換
初始化時啟動A/D轉換,轉換結束后OE自動置位
檢查OE狀態,為高電平時讀取數據口數據并轉換成對應的電壓值
顯示結束后啟動下一次A/D轉換數碼管顯示讀入數據并轉換成電壓值后,通過數碼管顯示,百位數值后顯示小數點。
序如下:
  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; //數碼管小數點
  15. void Delay(uint m)   {
  16.      while(m--);
  17. }
  18. //主函數
  19. void main()  {
  20.      ulong temp, temp_data;
  21.      // uint temp;
  22.      start = 0;
  23.      oe = 0; //oe為高阻狀態
  24.      start = 1; //start下降沿開始轉換
  25.      start = 0;
  26.      while(1)
  27.      {
  28.          if (eoc == 1) //當eoc為1時轉換結束
  29.          {
  30.              /*讀入狀態*/
  31.              oe = 1; //打開oe,數據讀入引腳
  32.              temp = P0;
  33.              /*讀入的數值轉換成模擬電壓對應的電壓值,由于ADC0809將0-5V平分為255份,每一份為5/255v,
  34. 電壓=1.0v時,temp=1.0*(5/255),為了方便顯示小數,則擴大一百倍,得到公式temp=temp*1.0/255*500
  35.              但是在此處存在個問題,temp轉換成為flout類型后運算量過大,影響后數碼管顯示速度,在一定范圍內數碼管顯示錯誤  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.              /*數碼管顯示*/
  41.              temp_data = temp % 10;
  42.              P2 = 0xfe; //數碼管選擇最后一位
  43.              P1 = table[temp_data];
  44.              Delay(500);
  45.              temp_data = temp / 10 % 10;
  46.              P2 = 0xfd; //數碼管選擇十位
  47.              P1 = table[temp_data];
  48.              Delay(500);
  49.              temp_data = temp / 100 % 10;
  50.              P2 = 0xfb; //數碼管選擇百位
  51.              P1 = table[temp_data];
  52.              dot = 1; //顯示小數點
  53.              Delay(500);
  54.              /*啟動下一次轉換*/
  55.              start = 1;
  56.              start = 0;
  57.          }
  58.      }
  59. }
復制代碼


完整的Word格式文檔51黑下載地址:
51單片機AD轉換器實現數字電壓表實例.docx (238.71 KB, 下載次數: 102)


評分

參與人數 2黑幣 +54 收起 理由
掃福11 + 4 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:313328 發表于 2018-6-10 20:58 | 只看該作者
必學的呀!
回復

使用道具 舉報

板凳
ID:359165 發表于 2018-6-27 11:10 | 只看該作者
大佬會這個嗎,看一看附件
回復

使用道具 舉報

地板
ID:341813 發表于 2018-6-29 10:33 | 只看該作者
我做了,有問題,運行不出來結果
回復

使用道具 舉報

5#
ID:395167 發表于 2018-10-4 23:05 | 只看該作者
為什么要1分多種數碼管哪兒才顯示電壓?
回復

使用道具 舉報

6#
ID:408280 發表于 2018-10-13 15:37 | 只看該作者
只要把轉換輸出換了就能將0808改成0809了吧
回復

使用道具 舉報

7#
ID:538496 發表于 2020-3-9 18:40 | 只看該作者
好像有點問題
回復

使用道具 舉報

8#
ID:801226 發表于 2020-7-10 21:11 | 只看該作者
怎么運行結果不對啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表