1、uchar data set_timedx=30;uchar data set_timenb=30;int n;uchar data b;/定时器中断次数sbit k1=P16;/定义5组开关sbit k2=P17;sbit k3=P27;sbit k4=P30;sbit k5=P31;sbit Yellow_nb=P25; /南北黄灯标志sbit Yellow_dx=P22; /东西黄灯标志sbit Green_nb=P24;sbit Green_dx=P21;sbit Red_nb=P26;sbit Red_dx=P23;sbit Buzz=P37;bit Buzzer_Indicate;
2、bit time=0;/灯状态循环标志bit set=1;/调时方向切换键标志uchar code table10= /共阴极字型码0x3f, /-00x06, /-1?0x5b, /-2?0x4f, /-30x66, /-4?0x6d, /-50x7d, /-60x07, /-7?0x7f, /-80x6f, /-9/0x00 /-NULL;/函数的声明部分void delay(int ms);/延时子程序void key();/按键扫描子程序void key_to1();/键处理子程序void key_to2();void key_to3();void display();/显示子程序vo
3、id logo(); /开机LOGOvoid Buzzer();/主程序void main() TMOD=0X01; TH0=0XD8; TL0=0XF0; EA=1; ET0=1; TR0=1; EX0=1; EX1=1; logo(); P2=0Xc3;/ 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; while(1) key(); /调用按键扫描程序 display(); /调用显示程序 Buzzer(); /函数的定义部分void key() /按键扫描子程序 if(k1!=1) delay(10); if(k1! while(k1! key_to1(); for
4、(n=0;n40;n+) display(); if(k2! if(k2! while(k2! key_to2(); if(k3!=1) TR0=1; /启动定时器 Buzzer_Indicate=0; sec_nb=set_timenb; /从中断回复,仍显示设置过的数值 sec_dx=set_timedx; if(time=0) P2=0X99;sec_nb=sec_dx+5; else P2=0xC3;sec_dx=sec_nb+5; if(k4! if(k4! while(k4!=1); set=!set; if(k5! if(k5! while(k5! key_to3();void
5、display() /显示子程序 buf1=sec_dx/10; /第1位 东西秒十位 buf2=sec_dx%10; /第2位 东西秒个位 buf3=sec_nb/10; /第3位 南北秒十位 buf0=sec_nb%10; /第4位 南北秒个位 P1=0xff; / 初始灯为灭的 P0=0x00; P1=0xfe; /片选LCD1 P0=tablebuf1; delay(1); P1=0xff; P1=0xfd; /片选LCD2 P0=tablebuf2; delay(1); P1=0xff; P1=0Xfb; /片选LCD3 P0=tablebuf3; P1=0Xf7; P0=table
6、buf0; /片选LCD4 void time0(void) interrupt 1 using 1 /定时中断子程序 b+; if(b=19) / 定时器中断次数 b=0; sec_dx-; sec_nb-; if(sec_nb=5&time=0) /东西黄灯闪 Green_nb=0 ;Yellow_nb=!Yellow_nb; if(sec_dxtime=1) /南北黄灯闪 Green_dx=0 ;Yellow_dx=!Yellow_dx; if(sec_dx=0&sec_nb=5) sec_dx=5; if(sec_nb=0&sec_dx=5) sec_nb=5; if(time=0&s
7、ec_nb=0) P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5; if(time=1&sec_dx=0) P2=0Xc3;sec_dx=set_timedx;sec_nb=set_timedx+5; void key_to1() /键盘处理子程序之+ TR0=0; /关定时器 if(set=0) set_timenb+; /南北加1S else set_timedx+; /东西加1S if(set_timenb=100) set_timenb=1; if( set_timedx=100) set_timedx=1; /加到10
8、0置1 sec_nb=set_timenb ; /设置的数值赋给东西南北 sec_dx=set_timedx;void key_to2() /键盘处理子程序之- if(set=0) set_timenb-; /南北减1S set_timedx-; /东西减1S if(set_timenb=0) set_timenb=99; if( set_timedx=0 ) set_timedx=99; /减到1重置99 sec_nb=set_timenb;void key_to3() /键盘处理之紧急车通行 P2=0Xc9; sec_dx=00; sec_nb=00; Buzzer_Indicate=1;
9、void int0(void) interrupt 0 using 1 /只允许东西通行 Buzzer_Indicate=0; sec_dx=00; sec_nb=00;void int1(void) interrupt 2 using 1 /只允许南北通行 P2=0X99;void logo()/开机的Logo - - - - for(n=0;50; P0=0x40; P1=0Xfb; P1=0Xf7; P1 = 0xff;void Buzzer() if(Buzzer_Indicate=1) Buzz=!Buzz; else Buzz=0;void delay(int ms) /延时子程序 uint j,k; for(j=0;jms;j+) for(k=0;k124;k+);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1