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

QQ登錄

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

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

基于單片機(jī)+ADC0809芯片的電壓表Proteus仿真程序 注釋很詳細(xì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //*********************************************************************************
  2. //程序:AD0809LED.c
  3. //功能:AT89C51+ADC0809電壓測(cè)量顯示程序(Keil uVision5+Proteus 7.8仿真通過(guò))
  4. //*********************************************************************************
  5. #include<reg51.h>                                              /*包含頭文件reg51.h */
  6. #define uchar unsigned char                         /*宏定義后方便書(shū)寫(xiě)*/
  7. #define uint unsigned int                                /*宏定義后方便書(shū)寫(xiě)*/
  8. uchar code DigitSTARTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED碼表
  9. uchar DisplayBuffer[4];                                //顯示碼數(shù)據(jù)緩沖區(qū)
  10. uchar AD_Data;                                        //AD0809原始數(shù)據(jù)
  11. uint Temp;                                                   //處理后的數(shù)據(jù)
  12. sbit START=P3^0;                                 //定義P3.0引腳位名稱為START
  13. sbit OE=P3^1;                                         //定義P3.1引腳位名稱為OE
  14. sbit EOC=P3^2;                                        //定義P3.2引腳位名稱為EOC
  15. sbit CLK=P3^3;                                        //定義P3.3引腳位名稱為CLK
  16. sbit ADDA=P3^4;                                        //定義P3.4引腳位名稱為ADDA
  17. sbit ADDB=P3^5;                                        //定義P3.5引腳位名稱為ADDB
  18. sbit ADDC=P3^6;                                        //定義P3.6引腳位名稱為ADDC
  19. sbit LED0=P2^0;                                        //定義P2.0引腳位名稱為L(zhǎng)ED0,選擇LED的0位
  20. sbit LED1=P2^1;                                        //定義P2.1引腳位名稱為L(zhǎng)ED1,選擇LED的1位
  21. sbit LED2=P2^2;                                        //定義P2.2引腳位名稱為L(zhǎng)ED2,選擇LED的2位
  22. sbit LED3=P2^3;                                        //定義P2.3引腳位名稱為L(zhǎng)ED3,選擇LED的3位
  23. sbit LED_DP=P1^7;                                //定義P1.7引腳位名稱為L(zhǎng)ED_DP,選擇LED的DP位

  24. //*********************************************************************************
  25. //函數(shù)名:Delay
  26. //函數(shù)功能:軟件延時(shí)函數(shù)
  27. //形式參數(shù):uint i
  28. //*********************************************************************************
  29. void Delay(uint i)
  30. {  uint j;
  31.   for(;i>0;i--)
  32.    { for(j=0;j<50;j++)
  33.      ;
  34.    }
  35. }

  36. //*********************************************************************************
  37. //函數(shù)名:TimeInitial
  38. //函數(shù)功能:定時(shí)器初始化函數(shù) T0方式2,自動(dòng)重裝初值:10,定時(shí):10us,
  39. //信號(hào)周期T:20us 信號(hào)頻率f:f=1/T=1000000/20=50 000HZ=50KHZ
  40. //*********************************************************************************
  41. void TimeInitial()                 //定時(shí)器初始化
  42. { TMOD=0x02;                                          //定時(shí)器工作模式
  43. TH0=246;                                       //定時(shí)器初值高8位
  44. TL0=246;                                //定時(shí)器初值低8位
  45. EA=1;                                                     //開(kāi)總中斷
  46. ET0=1;                                                 //開(kāi)定時(shí)器中斷
  47. TR0=1;                                                 //啟動(dòng)定時(shí)器
  48. }

  49. //*********************************************************************************
  50. //函數(shù)名:Time0
  51. //函數(shù)功能:定時(shí)器0中斷服務(wù)子程序函數(shù)
  52. //*********************************************************************************
  53. void Time0(void) interrupt 1 using 0          //定時(shí)器中斷服務(wù)子程序
  54. {
  55.   CLK=~CLK;                                           //產(chǎn)生AD0809工作脈沖:50KHZ
  56.     }

  57. //*********************************************************************************
  58. //函數(shù)名:Display
  59. //函數(shù)功能:LED數(shù)碼管顯示函數(shù)
  60. //*********************************************************************************
  61. void Display()
  62. {
  63. P1=DigitSTARTable[DisplayBuffer[3]];        //取數(shù)據(jù)送P1端口顯示(十位)
  64. LED0=0;                                                   // LED0管子開(kāi)
  65. Delay(5);                                                 // 延時(shí)顯示
  66. LED0=1;                                                  // LED0管子關(guān)
  67. P1=DigitSTARTable[DisplayBuffer[2]];//取數(shù)據(jù)送P1端口顯示(個(gè)位)
  68. LED_DP=1;                                        // 小數(shù)點(diǎn)顯示
  69. LED1=0;                                           // LED1管子開(kāi)
  70. Delay(5);                                                 // 延時(shí)顯示
  71. LED1=1;                                                  // LED1管子關(guān)
  72. P1=DigitSTARTable[DisplayBuffer[1]];//取數(shù)據(jù)送P1端口顯示 (小數(shù)1位)
  73. LED2=0;                                                  // LED2管子開(kāi)
  74. Delay(5);                                                // 延時(shí)顯示
  75. LED2=1;                                                   // LED2管子關(guān)
  76. P1=DigitSTARTable[DisplayBuffer[0]];//取數(shù)據(jù)送P1端口顯示(小數(shù)2位)
  77. LED3=0;                                                // LED3管子開(kāi)
  78. Delay(5);                                                // 延時(shí)顯示
  79. LED3=1;                                                  // LED3管子關(guān)
  80. }

  81. //*********************************************************************************
  82. //函數(shù)名:main
  83. //函數(shù)功能:主函數(shù)
  84. //*********************************************************************************
  85. void main()
  86. {
  87. TimeInitial();                                         //啟動(dòng)定時(shí)器初化
  88. while(1)
  89. {
  90. ADDA=0;                                                //ADC0809通道選擇
  91. ADDB=0;
  92. ADDC=0;
  93. OE=0;                                                 //輸出關(guān)閉
  94. START=0;
  95. START=1;                                                 //START由低到高跳變(上跳沿),寄存器清零
  96. START=0;                                          //START由高到低跳變(下跳沿),啟動(dòng)AD轉(zhuǎn)換
  97. while(EOC==0)    ;        //等待轉(zhuǎn)換結(jié)束
  98. OE=1;                                                           //輸出允許
  99. AD_Data=P0;                                  //讀ADC0809原始數(shù)據(jù)
  100. OE=0;                                                          //輸出關(guān)閉
  101. Temp=(AD_Data*1.0/255*5)*100; //數(shù)據(jù)處理:輸出值=輸入值*5/255  參數(shù)5是基準(zhǔn)電壓5V
  102. DisplayBuffer[0]=Temp%10;                  //取處理后的數(shù)據(jù)個(gè)位,對(duì)應(yīng)顯示溫度值的小數(shù)2位
  103. DisplayBuffer[1]=Temp/10%10;         //取處理后的數(shù)據(jù)十位,對(duì)應(yīng)顯示溫度值的小數(shù)1位
  104. DisplayBuffer[2]=Temp/100%10;        //取處理后的數(shù)據(jù)百位,對(duì)應(yīng)顯示溫度值的個(gè)位
  105. DisplayBuffer[3]=Temp/1000;          //取處理后的數(shù)據(jù)千位,對(duì)應(yīng)顯示溫度值的十位
  106. Display();                                        //調(diào)用顯示函數(shù)
  107. }
  108. }
復(fù)制代碼

所有資料51hei提供下載:
ad0809.rar (135.06 KB, 下載次數(shù): 129)

這個(gè)是用LCD顯示的版本:
AD0809 LCD.rar (126.38 KB, 下載次數(shù): 91)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1011865 發(fā)表于 2022-4-1 15:35 | 只看該作者
樓主
ADC0809要不要編程?
回復(fù)

使用道具 舉報(bào)

板凳
ID:1026955 發(fā)表于 2022-5-16 11:40 | 只看該作者
記憶猶新 發(fā)表于 2022-4-1 15:35
樓主
ADC0809要不要編程?

不用啊啊
回復(fù)

使用道具 舉報(bào)

地板
ID:114240 發(fā)表于 2022-5-20 23:11 | 只看該作者
LCD壓縮包里程序和hex文件不匹配,只有單獨(dú)的hex文件能用,通過(guò)程序編譯之后生成的hex文件放進(jìn)沒(méi)顯示。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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