欢迎来到天天文库
浏览记录
ID:12851034
大小:63.00 KB
页数:3页
时间:2018-07-19
《程序adc0809模拟检测电压数码管显示》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序/*---------------------------------------------------------------------------------名称:ADC0808模拟检测电压数码管显示编写:人言者007日期:2013.5.20说明:ADC0808的其中两路去检测电压,电压范围0~5V,电压用电阻器调节模拟出来。检测到模拟电压转化为数字量后转变为16进制在数码管中显示,每两位数码管显示一路电压的数字量,声明:显示的数不是实际电压,只是与电压呈现性关系。----------
2、------------------------------------------------------------------------*/#include#defineucharunsignedchar#defineuintunsignedintuchartemp,dianya0,dianya1;ucharcodeLED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x
3、79,0x71};//共阴数码管断码0~9~a~fuchardisbuff[4];//显示缓冲器(数组)sbitclk=P3^3;//芯sbitEOC=P3^2;//片sbitOE=P3^0;//引sbitstart=P3^1;//脚sbitadress_A=P3^4;//定//义voiddelay(uintz){while(z--);}voidtimer0init(){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-1)/256;//定时器0高八位赋值1us中断一次TL0=
4、(65536-1)%256;//定时器0低八位赋值EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0}voiddisplay(){//disbuff[0]=dianya%10;//个位//disbuff[1]=dianya/10%10;//十//disbuff[2]=dianya/100%10;//百//disbuff[3]=dianya/1000;//千P2=0xfe;//打开第一个数码管P0=LED[disbuff[3]];//给数码管送数据(段码)delay(6
5、0);//延时,防止数码管重影P2=0xfd;//以P0=LED[disbuff[2]];//下delay(60);//功P2=0xfb;//能P0=LED[disbuff[1]];//类delay(60);//同P2=0xf7;P0=LED[disbuff[0]];delay(60);}voidmain(){timer0init();//定时器0初始化while(1){adress_A=0;//打开通道0delay(10);//延时等待芯片反应start=1;//开始ADC转换//while(!
6、EOC);//等待转换完成标志(未知原因,此语句导致数码管不能显示)OE=1;//输出允许P1=0XFF;//输入前P1口需置1dianya0=P1;//AD转换完成,读取值OE=0;//关闭输出start=0;//关闭AD转换disbuff[0]=dianya0%16;//将二进制数据转换为16进制低位disbuff[1]=dianya0/16;//将二进制数据转换为16进制高位delay(10);//延时等待芯片反应adress_A=1;//打开通道1delay(10);start=1;OE=
7、1;//while(!EOC);P1=0XFF;dianya1=P1;OE=0;start=0;disbuff[2]=dianya1%16;disbuff[3]=dianya1/16;display();//显示}}voidtimer0()interrupt1{TH0=(65536-1)/256;//重装初值TL0=(65536-1)%256;clk=~clk;//模拟给ADC0808提供时钟}硬件图(protues仿真)
此文档下载收益归作者所有