您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 程序ADC0809模拟检测电压数码管显示
#includereg52.h#defineucharunsignedchar#defineuintunsignedintuchartemp,dianya0,dianya1;ucharcodeLED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,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=(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(60);//延时,防止数码管重影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(!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=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仿真)
本文标题:程序ADC0809模拟检测电压数码管显示
链接地址:https://www.777doc.com/doc-4331462 .html