1、8255与发光二极管连线图数码LED显示器电路1616LED点阵显示电路实验原理图三、实验程序流程图:主程序:四、实验结果分析通过程序仿真,可以检测设计的电路能基本满足设计要求。交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(099),用定时器定时进行倒计时,每秒钟减1。在16*16点阵中显示的人形“走”、“停”标志可自定义。五、心得体会我们通过作这个单片机实验,我们总结了一下点:1、 加深了对51单片机的理解,不仅仅是以前那样只能点亮发光二极管。2、 感受到了完成一件程序的乐趣,并且知道了实践精神。3、 理解了51单片机的强大和我们知识的肤浅。4、 学到了许多原来C语言中没
2、有的东西,如:控制按键的程序 While(P0_5=1) Time+; While(P0_5=1); 这样可以不加防按键抖动的延时程序,更精确时间。 5、进一步充分利用中断时刻都在运行,让时间在中断中显示,就不会出现进入死循环后而无法显示时间的情况,而且还可以快速的反映除时间的变化。六、程序清单#include 0;n-);uchar changeleft(uchar led) uchar temp; temp=0; temp|=(led0x08;0x04;0x02;0x01; return(temp);void led16_16display(uchar *table,uchar lengt
3、h) uchar i=length2,scan1=0x1,scan2=0x1; for(i=0;i16;i+) if(i8) ROW1=0; ROW2=0; COL1=scan1; COL2=0; ROW1=changeleft(table2*i); ROW2=table2*i+1; delayshort(); scan1=1; else COL1=0; COL2=scan2; scan2 if(temp=0) temp=0x20;void int_0()interrupt 0 delayshort(); if(P32=0) PA=0xB6; PB=0xd; PT0=1; PT1=1; int
4、flag=1; while(inttime=20) led16_16display(led2,32); inttime=1; intflag=0; PT0=0; PT1=0; PA=ewTabletongBu; PB=nsTabletongBu;void timer0()interrupt 1 TH0=()256; TL0=()%256; cnt+; if(cnt=5) cnt=0; if(intflag=1) inttime+; tempseg=10-inttime2; time+; if(timeallredend)&(time=ewredend) tongBu=1; tempseg=ew
5、starter+allredend2-(time+1)2;ewredend)&=snyellowend) if(change=0) tongBu=2; PA=ewTabletongBu; PB=nsTabletongBu; change=1; else tongBu=3; change=0; tempseg=ewstarter+allredend2+5-(time+1)2;snyellowend)&=snredend) tongBu=4; tempseg=ewstarter+allredend2+5+snstarter-(time+1)2;snredend)&=ewyellowend) ton
6、gBu=5; tongBu=6; tempseg=ewstarter+10+allredend2+snstarter-(time+1)2; else time=allredend+1;void key() uchar keynum; keynum=(P1|0XF8); switch(keynum) case 0x1: while(KEY1=0)led16_16display(led2,32); key1+; TR0=0; if(key1=3) key1=0; TR0=1; break; case 0x2: while(KEY2=0)led16_16display(led2,32); if(ke
7、y1=1) ewstarter+; if(ewstarter=100) ewstarter=0; if(key1=2) snstarter+; if(snstarter=100) snstarter=0; case 0x4: while(KEY3=0)led16_16display(led2,32); ewstarter-; if(ewstarter=-1) ewstarter=99; snstarter-; if(snstarter=-1) snstarter=99; default:break;void main() IE=0x8b; IT0=1; TMOD=0x11; CTL=0x80; tongBu=0; TR1=1; PA=ewTabletongBu; PB=nsTabletongBu; tempseg=allredend2-(time+1)2; TR0=1; while(1) key(); if(intflag=0) if(key1=0) if(timeallredend&time=snyellowend) led16_16display(led1,32);snyellowend&=ewyellowend) led16_16display(led2,32);