找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1107|回复: 0
打印 上一主题 下一主题
收起左侧

单片机+ADC0808多点电压巡检系统(程序+仿真)

[复制链接]
跳转到指定楼层
楼主
1、名称:多点电压巡检系统。
2、功能要求:巡回检测8路输入电压值并显示结果。
3、硬件要求:单片机芯片采用AT89C51,A/D转换器采用ADC0808,显示器使用LCD1602。
4、实训提交:在Keil uVision中完成程序设计并提交工程文件电子档;在Proteus中完成电路设计并提交工程文件电子档。

仿真原理图如下(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黑下载附件…………
复制代码

程序仿真51hei附件下载:
多点电压巡检系统.7z (58.52 KB, 下载次数: 28)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表