1、2010-06-08 17:18#include#define uchar unsigned charuchar seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/显示 0-9段码uchar count,time,state,tf;bit f=0;sbit reset=P34;/*延时函数*/void delay(uchar k) uchar i,j; for(i=0;ik;i+) for(j=0;j200;j+);/*主函数*/void main()TMOD=0x01; /设置为定时器模式 1TH0=0x3c; /晶振 6MHz,定
2、时时间 100msTL0=0xb0;IE=0x82; /开全局中断和定时中断time=16; /计时初值为 16scount=0; /秒计数值清 0tf=0; /0.5s计数值清 0state=0; /初始状态为 0while(1)if(reset=0) /复位,状态 0,关闭定时器,计时值为 16 state=0;TR0=0; time=16;else TR0=1; /启动定时器switch(state)case 0:P1=0xee;break; /状态 0:东西南北全红灯case 1:P1=0xeb;break; /状态 1:南北绿,东西红case 2:if(f=1) P1=0xeb;el
3、se P1=0xef; break; /状态 2:南北绿闪烁,东西红case 3:P1=0xed;break; /状态 3:南北黄,东西红case 4:P1=0xee;break; /状态 4:东西南北全红case 5:P1=0xbe;break; /状态 5:南北红,东西绿case 6:if(f=1) P1=0xbe;else P1=0xfe; break; /状态 6:南北红,东西绿闪烁case 7:P1=0xde;break; /状态 7:南北红,东西黄P2=0xfe; /显示个位P0=segtime%10; /取计时值个位送 P0口 delay(10); /延时P2=0xfd; /显示
4、十位P0=segtime/10; /取计时值十位送 P0口 delay(10); /延时/*定时中断函数*/void timer0() interrupt 1 TH0=0x3c; /定时重新赋初值TL0=0xb0;count+; /秒计数值加 1tf+; /0.5s计数值加 1if(tf=5) tf=0; f=f;if(count=10) /中断 10次即 1s=10100mscount=0; /秒计数次数清 0time-; /计时值减 1if(time=15) state+; /状态 1或 5if(time=5) state+; /状态 2或 6if(time=2) state+; /状态 3或 7if(time=0) time=16; /计时值减到 0则回初值 state+; /状态 0或 4if(state=8) state=0;