资源描述:
《单片机动态显示》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、显示键盘扫描一、显示程序设计二、键盘扫描程序的设计动态显示1.动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个I/O口完成字形码的输出(段码),另一I/0口完成各数码管的轮流点亮(位码)。2.在数码显示的时候,要对显示单元开辟6个显示缓冲区,采用一维数组。3.对于显示的字形码数据我们采用查表方法来完成,字形码放在一常数数组中。例:在用户板2上显示1234567SEG-MPX8-CA-BLUE共阳7SEG-MPX8-CC-BLUE共阴#includeconstunsigne
2、dcharseg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};delay();main(){unsignedcharcout,t,i,a[6]={1,2,3,4,5,6};//{8,9,12,5,1}while(1){cout=0x20;for(i=0;i<6;i++){t=a[i];P0=seg[t];P2=cout;delay();cout=cout>>1;P0=0xff;//灭显示}}}delay(){unsignedchari=250;while(i--);}思考:若要显示89C51
3、字样,如何修改程序?常数数组bb[6]在刚才程序中没有用到,如要用的话,该数组作何用,程序又该如何修改?将上述显示程序改成子函数,在主函数中调用。思考题(1)程序清单#includeconstunsignedcharseg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};constunsignedcharbb[6]={0x20,0x10,0x08,0x04,0x02,0x01};delay();main(){unsignedchart,i,a[5]={8,9,12,5,1};w
4、hile(1){for(i=0;i<5;i++){t=a[i];P0=seg[t];P2=bb[i];delay();P0=0xFF;//灭显示}}}delay(){unsignedchari=250;while(i--);}思考题(2)程序清单#includeconstunsignedcharseg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};delay();display();main(){while(1)display();}display(){unsignedcha
5、rt,i,cout,a[6]={1,2,3,4,5,6};Cout=0x20;for(i=0;i<6;i++){t=a[i];P0=seg[t];P2=cout;delay();cout=cout>>1;P0=0xff;}}delay(){unsignedchari=250;while(i--);}三+1秒定时显示1.设计要求利用定时器中断方式,编制C51程序使目标板上数码管每1s加1,直至59s,再从0开始加。2.设计方法:主函数完成T0、中断的初始化,并不断调用显示程序;中断服务函数完成秒的加1和显示缓冲区的刷新。Main()At0()例2-4#incl
6、udeconstunsignedcharseg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};unsignedcharcout=0,sec=0,time[2]={0};//全局变量,cout,中断次数,sec,秒单元变量,time[2]显示缓冲区Voiddisplay();//动态显示Voiddelay();//延时main(){TMOD=0X01;TH0=0X3C;TL0=0XB0;ET0=1;EA=1;TR0=1;while(1)display();}Voiddispla
7、y(){unsignedcharb=0x02,t,i;for(i=0;i<2;i++){t=time[i];P0=seg[t];P2=b;b=b>>1;delay();P0=0xff;}}Voiddelay(){unsignedchari=250;while(i--);}at0()interrupt1{TH0=0X3C;TL0=0XB0;cout++;if(cout==20){cout=0;sec++;if(sec==60)sec=0;time[0]=sec/10;time[1]=sec%10;}}思考题在用户板2上显示87654321实验将上述程序进行扩充
8、,改成在用户板上显示时分秒,即满60秒则分+1,满6