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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3770|回復: 0
收起左側

單片機Proteus仿真ADC0809數字電壓表程序設計

[復制鏈接]
ID:860283 發表于 2020-12-22 08:17 | 顯示全部樓層 |閱讀模式
源碼加電路圖
51hei.png 51hei.png

單片機源程序如下:
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管顯示0-9的電平碼
  5. uint volt,vtime; //電壓值測定值
  6. uchar addr;//測量地址位
  7. sbit LW1=P2^3; //對應第4個數碼管
  8. sbit LW2=P2^2; //對應第3個數碼管
  9. sbit LW3=P2^1; //對應第2個數碼管
  10. sbit LW4=P2^0; //對應第1個數碼管
  11. sbit LW5=P1^4;//指示當前顯示的是第幾個轉換值
  12. sbit CLK=P2^4; //時鐘信號
  13. sbit START=P2^5; //轉換啟動開關
  14. sbit EOC=P2^6;        //轉換結束標志
  15. sbit OE=P2^7;//定義ADC0809各腳
  16. /**********************************************************/
  17. //函數名:delay(uint x)
  18. //功能:延時程序 改變測量地址         
  19. //調用函數:
  20. //輸入參數:x
  21. //輸出參數:
  22. //說明:程序的延時時間為x乘以0.5ms 每5s改變測量地址位
  23. /**********************************************************/
  24. void delay(uint x)
  25. {
  26.         uchar y,z;
  27.         for(y=x;y>0;y--)
  28.                 for(z=250;z>0;z--);//該步運行時間約為0.5ms
  29.                 vtime++;
  30.                 if(vtime==1000)
  31.                 {
  32.                         vtime=0;
  33.                         addr++;
  34.                         if(addr==3)         //本例子一共有3個測量輸入值,輪流讀取這3個值并轉換顯示
  35.                                 addr=0;//以上語句實現測量地址位的改變               
  36.                 }        
  37. }
  38. /**********************************************************/
  39. //函數名:ADC()
  40. //功能:數模轉換程序
  41. //調用函數:
  42. //輸入參數:
  43. //輸出參數:
  44. //說明:將轉換好的測定值保存在變量volt中
  45. /**********************************************************/
  46. void ADC()
  47. {
  48.         EA=1;//開中斷

  49.         //確保進入正常AD轉換狀態?
  50.         START=0;
  51.         START=1;

  52.         START=0;//ad開始轉換               
  53.         while(EOC==0); //等待轉換結束
  54.         OE=1; //輸出數據標志為真
  55.         
  56.         EA=0;//關中斷
  57.         volt=P3;//獲取轉換值保存到volt中,(P3為轉換后數據)
  58.         volt=volt*196;//轉換值處理 (例子的滿量程為5V,轉換分辯率為8位即最大值是255,5/255=196mV,即1代表196mV)
  59.         
  60.         OE=0;//輸出轉換結束 (要在獲取轉換值之后)
  61. }
  62. /**********************************************************/
  63. //函數名:display()
  64. //功能:4位數碼管顯示
  65. //調用函數:delay(uint x)
  66. //輸入參數:
  67. //輸出參數:
  68. //說明:將處理后的電壓值顯示在4位數碼管上
  69. /**********************************************************/
  70. void display()
  71. {
  72.         P0=0xff;//消隱 (相當于全部滅燈,清除上次顯示效果)
  73.         LW1=0;
  74.         P0=~led[volt/10000]&0x7f;//帶小數點1伏顯示位
  75.         delay(2);
  76.         P0=0xff;
  77.         LW1=1;
  78.         LW2=0;
  79.         P0=~led[(volt/1000)%10];//100毫伏顯示位
  80.         delay(2);
  81.         P0=0xff;
  82.         LW2=1;
  83.         LW3=0;
  84.         P0=~led[(volt/100)%10];//10毫伏顯示位
  85.         delay(2);
  86.         P0=0xff;
  87.         LW3=1;
  88.         LW4=0;
  89.         P0=~led[(volt/10)%10];//1毫伏顯示位
  90.         delay(2);
  91.         P0=0xff;
  92.         LW4=1;
  93.         LW5=0;
  94.         P0=~led[addr+1];//顯示電壓測量位
  95.         delay(2);
  96.         LW5=1;//指示當前顯示的是第幾個轉換值                                                               
  97. }
  98. /**********************************************************/
  99. //主程序
  100. /**********************************************************/
  101. void main()
  102. {
  103.         EA=1;//開總中斷                  
  104.     TMOD=0x01;//設定定時計數工作方式
  105.         //為定時器初賦值
  106.         TH0=0XFF;
  107.     TL0=0XB4;

  108.         ET0=1;//開定時器0中斷
  109.         TR0=1;//開啟定時器0
  110.         while(1)
  111.         {
  112.                 P1=addr;//裝入測量地址
  113.                 LW5=1;
  114.                 ADC();//調用模數轉換程序
  115.                 display();//調用顯示程序
  116.         }
  117. }
  118. /**********************************************************/
  119. //函數名:timer() interrupt 1
  120. //功能:定時中斷0響應程序
  121. //調用函數:
  122. //輸入參數:
  123. //輸出參數:
  124. //說明:為ADC提供時鐘信號
  125. /**********************************************************/
  126. void timer() interrupt 1
  127. {
  128.         //初值重置
  129.         TH0=0XFF;
  130.     TL0=0XF0;
  131.         CLK=~CLK;//取反 產生時鐘信號
  132. }
復制代碼

仿真代碼51hei提供下載:
數字電壓表(ADC0809)-2.rar (47.83 KB, 下載次數: 70)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲综合无码一区二区 | 一区中文字幕 | 日韩一级黄色片 | 欧美日韩看片 | 亚洲精品视频三区 | www..99re| 一区二区三区四区国产精品 | 色综合久| 99热电影| 日韩av在线一区 | 啪啪免费| 国产成人高清视频 | 国产在线不卡 | 日韩中文在线视频 | 在线精品一区二区 | 九九热这里 | 国产日韩欧美在线观看 | 不卡一区二区三区四区 | 91最新视频 | 蜜桃av鲁一鲁一鲁一鲁 | 久久精品中文字幕 | 九色在线视频 | 黄色精品| 黄色片av | 日韩精品一区二区在线观看 | 干干干操操操 | 国产黄色免费网站 | 免费成人高清在线视频 | 欧美精品一区在线发布 | www久久国产 | av毛片| a在线观看 | 欧美日韩在线观看一区 | 国产性网| 精品国产18久久久久久二百 | 日韩播放 | 成年人网站在线观看视频 | 国产美女免费视频 | 蜜桃免费一区二区三区 | 99re视频在线 | 91免费在线 |