找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+ADC0808多點電壓巡檢系統(tǒng)(程序+仿真)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1061648 發(fā)表于 2023-9-1 18:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1、名稱:多點電壓巡檢系統(tǒng)。
2、功能要求:巡回檢測8路輸入電壓值并顯示結(jié)果。
3、硬件要求:單片機芯片采用AT89C51,A/D轉(zhuǎn)換器采用ADC0808,顯示器使用LCD1602。
4、實訓(xùn)提交:在Keil uVision中完成程序設(shè)計并提交工程文件電子檔;在Proteus中完成電路設(shè)計并提交工程文件電子檔。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include "reg52.h"
  2. #define TIME0H 0x3C
  3. #define TIME0L 0xB0
  4. #define vdInitialize()        vWriteCMD(0x01);vWriteCMD(0x38);vWriteCMD(0x0C);
  5. #define OUTPORT P2
  6. #define LCDPORT P0               
  7. #define TIME0H 0x3C
  8. #define TIME0L 0xB0
  9. unsigned char uc_Clock=0;       
  10. unsigned char keyvalue=0;
  11. bit b_DATransform=0;
  12. sbit LCDRS =P3^0;                                                          
  13. sbit LCDRW =P3^1;                                                                 
  14. sbit LCDE =P3^2;                                               
  15. sbit START =P3^4;       
  16. sbit EOC =P3^3;

  17. void vDelay()
  18. {
  19.         unsigned int uiCount;
  20.         for(uiCount=0;uiCount<250;uiCount++);
  21. }
  22. void vWriteCMD(unsigned char ucCommand)                                          
  23. {
  24.         vDelay();
  25.         LCDE=1;       
  26.         LCDRS=0;
  27.         LCDRW=0;
  28.         LCDPORT=ucCommand;       
  29.         LCDE=0;               
  30. }
  31. void vWriteData(unsigned char ucData)                                          
  32. {
  33.         vDelay();
  34.         LCDE=1;       
  35.         LCDRS=1;
  36.         LCDRW=0;
  37.         LCDPORT=ucData;       
  38.         LCDE=0;       
  39. }
  40. void vShowOneChar(unsigned char ucChar)
  41. {
  42.                  vWriteData(ucChar);
  43. }
  44. void vShowChar(unsigned char ucaChar[])
  45. {
  46.         unsigned char ucCount;
  47.         for(ucCount=0;;ucCount++)
  48.                 {
  49.                 vShowOneChar(ucaChar[ucCount]);
  50.                 if(ucaChar[ucCount+1]=='\0')
  51.                         break;
  52.                 }
  53. }

  54. unsigned int uiADTransform()
  55. {
  56.         unsigned int uiResult;
  57.         START=1;       
  58.         START=0;
  59.         while(EOC==0);
  60.         uiResult=OUTPORT;
  61.         uiResult=(100*uiResult)/51;       
  62.         return uiResult;
  63. }

  64. void vShowData(unsigned int uiNumber)
  65. {
  66.         unsigned char ucaNumber[3],ucCount;
  67.         ucaNumber[0]=uiNumber/100;                                                       
  68.         ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;                                                       
  69.         ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
  70.         for(ucCount=0;ucCount<3;ucCount++)
  71.         {
  72.                 vShowOneChar(ucaNumber[ucCount]+48);               
  73.                 if(ucCount==0)
  74.                         vShowOneChar('.');
  75.         }
  76. }

  77. void main()
  78. {        unsigned char i;

  79.         TMOD=0x01;       
  80.         TH0=TIME0H;
  81.         TL0=TIME0L;
  82.         TR0=1;       
  83.         ET0=1;       
  84.         EA=1;
  85.         vdInitialize();
  86.         vWriteCMD(0x84);
  87.            vShowChar("CHANNEL:");
  88.         vWriteCMD(0xC9);
  89.         vShowChar("(V)");
  90.         while(1)
  91.                 {
  92.                         for(i=0;i<8;)
  93.                         {       
  94.                                 P1=i;
  95.                                
  96.                                 if(b_DATransform==1)
  97.                                 {        vWriteCMD(0x8c);
  98.                                            vShowOneChar(i+1+0x30);
  99.                                         i++;
  100.                                         b_DATransform=0;
  101.                                         vWriteCMD(0xC4);
  102.                                         vShowData(uiADTransform());
  103.                                 }
  104.                         }       
  105. ……………………

  106. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

程序仿真51hei附件下載:
多點電壓巡檢系統(tǒng).7z (58.52 KB, 下載次數(shù): 34)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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