程序#include "reg51.h" #include "stdio.h" sbit OE=P3^2; //o 數(shù)據(jù)輸出允許信號,高電平有效 sbit START=P3^3; //o 100ns正脈沖 轉(zhuǎn)換啟動信號,轉(zhuǎn)換時為低 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,正在進行轉(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正脈沖啟動轉(zhuǎn)換 while(!EOC); if(EOC==1) { OE=1; date=P0; //AD轉(zhuǎn)換的結(jié)果 adc=date*50/255; //數(shù)據(jù)轉(zhuǎn)化成實際電壓 } } 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ā)送完成標志位 } |