找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 1983 | 评论数: 1 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-6-4 21:30

正文摘要:

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

回复

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 单片机教程网

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