熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-6-4 21:30
正文摘要:要求8adc路循環(huán)采樣,用protues作的仿真,之前不會用protues,跟著網(wǎng)上視頻學(xué)的,中間也遇到了一些問題,做完之后感覺也不是很難,現(xiàn)在把工程分享給大家(protues的pcb沒畫),有問題大家可以交流下,共同學(xué)習(xí)進(jìn)步 ... |
程序#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)志位 } |
Powered by 單片機(jī)教程網(wǎng)