久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機+ADC0809芯片的電壓表Proteus仿真程序 注釋很詳細

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


單片機源程序如下:
  1. //*********************************************************************************
  2. //程序:AD0809LED.c
  3. //功能:AT89C51+ADC0809電壓測量顯示程序(Keil uVision5+Proteus 7.8仿真通過)
  4. //*********************************************************************************
  5. #include<reg51.h>                                              /*包含頭文件reg51.h */
  6. #define uchar unsigned char                         /*宏定義后方便書寫*/
  7. #define uint unsigned int                                /*宏定義后方便書寫*/
  8. uchar code DigitSTARTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED碼表
  9. uchar DisplayBuffer[4];                                //顯示碼數據緩沖區
  10. uchar AD_Data;                                        //AD0809原始數據
  11. uint Temp;                                                   //處理后的數據
  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引腳位名稱為LED0,選擇LED的0位
  20. sbit LED1=P2^1;                                        //定義P2.1引腳位名稱為LED1,選擇LED的1位
  21. sbit LED2=P2^2;                                        //定義P2.2引腳位名稱為LED2,選擇LED的2位
  22. sbit LED3=P2^3;                                        //定義P2.3引腳位名稱為LED3,選擇LED的3位
  23. sbit LED_DP=P1^7;                                //定義P1.7引腳位名稱為LED_DP,選擇LED的DP位

  24. //*********************************************************************************
  25. //函數名:Delay
  26. //函數功能:軟件延時函數
  27. //形式參數: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. //函數名:TimeInitial
  38. //函數功能:定時器初始化函數 T0方式2,自動重裝初值:10,定時:10us,
  39. //信號周期T:20us 信號頻率f:f=1/T=1000000/20=50 000HZ=50KHZ
  40. //*********************************************************************************
  41. void TimeInitial()                 //定時器初始化
  42. { TMOD=0x02;                                          //定時器工作模式
  43. TH0=246;                                       //定時器初值高8位
  44. TL0=246;                                //定時器初值低8位
  45. EA=1;                                                     //開總中斷
  46. ET0=1;                                                 //開定時器中斷
  47. TR0=1;                                                 //啟動定時器
  48. }

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

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

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

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

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

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

不用啊啊
回復

使用道具 舉報

地板
ID:114240 發表于 2022-5-20 23:11 | 只看該作者
LCD壓縮包里程序和hex文件不匹配,只有單獨的hex文件能用,通過程序編譯之后生成的hex文件放進沒顯示!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区免费在线观看 | 亚洲一区二区三区免费观看 | 激情国产视频 | 一级二级三级在线观看 | 国产乱一区二区三区视频 | 一区二区三区四区在线视频 | 黄色永久免费 | 久草日韩| 中文字幕在线一区二区三区 | 精品精品视频 | 国产午夜精品久久久久免费视高清 | 99亚洲精品 | 午夜午夜精品一区二区三区文 | 久久91视频| 精品无码三级在线观看视频 | 日韩精品一二三区 | 一区二区三区 在线 | 久久av一区二区三区 | 国产激情精品一区二区三区 | 国产精品福利久久久 | 天天天操| 美女久久久久久久久 | www.日本在线 | 涩涩视频在线观看 | 国产在线观 | 成人免费视频 | 国产成人99久久亚洲综合精品 | 青草青草久热精品视频在线观看 | 欧美专区在线 | 欧美mv日韩mv国产网站91进入 | 国产精品久久久久久久久久久久冷 | 亚洲瑟瑟| 欧美精品一级 | 操夜夜 | 亚州av| 99精品视频在线观看免费播放 | 国产精品精品久久久 | 久久精品国产免费高清 | 欧美亚洲国产日韩 | 久久草在线视频 | 国产精品久久久久久久久婷婷 |