51单片机A/D转换
元器件原理图部分代码main.c工程文件元器件
原理图部分
ADC0808引脚作用
ADC0808初始化函数
根据时序图,首先是START信号,由低变高再变低,然后看EOC信号,由高到低,然后再到高时,OUTPUT ENABLE(OE)信号变高,然后读取输出信号,然后输出OUTPUT ENABLE(OE)变低关闭输出。
u8 ADC_Init(void){u8 ad_result=0;//首先是START信号,由低变高再变低START=0;START=1;START=0;//然后看EOC信号,由高到低while(EOC==0);//OUTPUT ENABLE(OE)信号变高,然后读取输出信号OE=1;ad_result=P1;OE=0;return ad_result;}
代码
main.c
代码如下:
#include <reg51.h>//头文件#define u8 unsigned char //宏定义#define u16 unsigned intsbit START=P2^5;sbit EOC=P2^6;sbit OE=P2^7;void SMG_output(void);void delay_ms(u16 ms);u8 ADC_Init(void);u8 tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //数码管码值u8 SMG[8]={10,10,10,10,10,10,10,10};//存储数码管要显示的码u8 ad=0;void main(void){while(1){ad=ADC_Init();SMG[0]=10; SMG[1]=ad/100;SMG[2]=ad%100/10;SMG[3]=ad%10;SMG_output();//数码管显示}}u8 ADC_Init(void){u8 ad_result=0;START=0;START=1;START=0;while(EOC==0);OE=1;ad_result=P1;OE=0;return ad_result;}//数码管显示函数void SMG_output(void){u8 i; //定义数码管控制位for(i=0;i<=4;i++) //八次循环{P2=1<<i; //第一次选第一根数码管,第二次第二根。。。。 1 0000 0001 0000 0010P0=tab[SMG[i]];//显示数码管数组对应的值 p0=tab[smg[0]]=tab[2]=2delay_ms(1); //延时1ms == 显示1ms}P2=0xff; //数码管消隐P0=0xff; //数码管消隐}//延时函数void delay_ms(u16 ms){u16 i,j;for(i=0;i<ms;i++)for(j=71;j>0;j--);}
工程文件
工程文件
如果觉得《Proteus8仿真:51单片机A/D转换(ADC0808)》对你有帮助,请点赞、收藏,并留下你的观点哦!