找回密码
 立即注册

QQ登录

只需一步,快速开始

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

protues AT89C51+ADC0808+串口+LCD1602 求程序

[复制链接]
跳转到指定楼层
楼主
要求8adc路循环采样,用protues作的仿真,之前不会用protues,跟着网上视频学的,中间也遇到了一些问题,做完之后感觉也不是很难,现在把工程分享给大家(protues的pcb没画),有问题大家可以交流下,共同学习进步

求大神分享个程序啊

8W7_W5R_26$F3Z@6`}~CJEP.png (85.37 KB, 下载次数: 35)

protues仿真图

protues仿真图

adc lcd.zip

98.03 KB, 下载次数: 41, 下载积分: 黑币 -5

protues工程

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

使用道具 举报

沙发
ID:487905 发表于 2020-6-5 09:50 | 只看该作者
程序#include "reg51.h" #include "stdio.h" sbit OE=P3^2;     //o 数据输出允许信号,高电平有效 sbit START=P3^3;  //o 100ns正脉冲 转换启动信号,转换时为低 sbit ALE=P2^0;    //o 地址锁存允许,高有效 sbit ADDA=P2^1;   //o 8位地址低位 sbit ADDB=P2^2;   //o 8位地址中位 sbit ADDC=P2^3;   //o 8位地址高位 sbit EOC=P2^5;    //i 转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。 sbit RS=P3^4; sbit RW=P3^5; sbit E=P3^6; //#define date P0 在后面直接赋值故不需要  unsigned char t[]={"0123456789. "}; //unsigned char str[]={"Hello world!"};   int date; float adc;  void Usart(char i);  void delay(unsigned int t) { unsigned int i=0,j=0; for(i=0;i<t;i++) { for(j=0;j<120;j++); } }  void writedat(unsigned char dat) { RS=1; RW=0; E=0; P1=dat; delay(5); E=1; E=0; }  void writecom(unsigned char com) { RS=0; RW=0; E=0; P1=com; delay(5); E=1; E=0; }  void initlcd() { writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x01); }   void delayms (i) {     unsigned char k;     while(i--)     {      for(k = 0; k < 114; k++);     } }  void UsartInit()  //串口通信初始化 {         TMOD = 0x20;         TH1 = 0xfd;         TL1 = 0xfd;         SM0 = 0;         SM1 = 1;         TR1 = 1;         EA = 1;         ES = 1;  }  void ADCout(int i) {         switch (i)         {                 case(0):{ADDC=0;ADDB=0;ADDA=0;ALE=1;};break;                 case(1):{ADDC=0;ADDB=0;ADDA=1;ALE=1;};break;                 case(2):{ADDC=0;ADDB=1;ADDA=0;ALE=1;};break;                 case(3):{ADDC=0;ADDB=1;ADDA=1;ALE=1;};break;                 case(4):{ADDC=1;ADDB=0;ADDA=0;ALE=1;};break;                 case(5):{ADDC=1;ADDB=0;ADDA=1;ALE=1;};break;                 case(6):{ADDC=1;ADDB=1;ADDA=0;ALE=1;};break;                 case(7):{ADDC=1;ADDB=1;ADDA=1;ALE=1;};break;         }          START=0;         delayms(1);         START=1;         delayms(1);         START=0;                     //START正脉冲启动转换         while(!EOC);                 if(EOC==1)         {                 OE=1;                 date=P0;                  //AD转换的结果                 adc=date*50/255;           //数据转化成实际电压          }          }  void main() {         int i=0;    int a,b;         UsartInit();         initlcd();         while(1)         {                             ADCout(i);                 i++;                 if(i==8)                 {                         i=0;                 }                 a = adc/10;                                  b = adc-a*10;                                   Usart(a);                 Usart(10);                                  Usart(b);                 Usart(11);                                  writecom(0x80);                 delay(5);                 writedat(0x54);                 writedat(0x3A);                 writedat(t[i]);                                  writecom(0x80+0x40);                 writedat(0x56);                 writedat(0x3A);                 writedat(t[a]);                 writedat(t[10]);                 writedat(t[b]);                 writedat(0x56);                  //display();                 delayms(1000);         }          }   void Usart(char i) {         SBUF=t[i];//将要发送的数据放入到发送寄存器         while(!TI);                         //等待发送数据完成         TI=0;                                                 //清除发送完成标志位 }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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