登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看1806|回0|收藏
楼主 ID:1061648 只看他
2023-9-1 18:27
1、名称:多点电压巡检系统。
2、功能要求:巡回检测8路输入电压值并显示结果。
3、硬件要求:单片机芯片采用AT89C51,A/D转换器采用ADC0808,显示器使用LCD1602。
4、实训提交:在Keil uVision中完成程序设计并提交工程文件电子档;在Proteus中完成电路设计并提交工程文件电子档。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
仿真图

单片机源程序如下:

代码:

  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黑下载附件…………

程序仿真51hei附件下载:
多点电压巡检系统.7z (58.52 KB)
(下载次数: 34, 2023-9-2 15:19 上传)

下载积分: 黑币 -5


51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版