找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數(shù): 2065 | 評論數(shù): 1 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2020-6-4 21:30

正文摘要:

要求8adc路循環(huán)采樣,用protues作的仿真,之前不會用protues,跟著網(wǎng)上視頻學(xué)的,中間也遇到了一些問題,做完之后感覺也不是很難,現(xiàn)在把工程分享給大家(protues的pcb沒畫),有問題大家可以交流下,共同學(xué)習(xí)進(jìn)步 ...

回復(fù)

ID:487905 發(fā)表于 2020-6-5 09:50
程序#include "reg51.h" #include "stdio.h" sbit OE=P3^2;     //o 數(shù)據(jù)輸出允許信號,高電平有效 sbit START=P3^3;  //o 100ns正脈沖 轉(zhuǎn)換啟動(dòng)信號,轉(zhuǎn)換時(shí)為低 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 轉(zhuǎn)換結(jié)束信號。EOC=0,正在進(jìn)行轉(zhuǎn)換;EOC=1,轉(zhuǎn)換結(jié)束。 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正脈沖啟動(dòng)轉(zhuǎn)換         while(!EOC);                 if(EOC==1)         {                 OE=1;                 date=P0;                  //AD轉(zhuǎn)換的結(jié)果                 adc=date*50/255;           //數(shù)據(jù)轉(zhuǎn)化成實(shí)際電壓          }          }  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];//將要發(fā)送的數(shù)據(jù)放入到發(fā)送寄存器         while(!TI);                         //等待發(fā)送數(shù)據(jù)完成         TI=0;                                                 //清除發(fā)送完成標(biāo)志位 }

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

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

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