中国地质大学江城学院毕业设计(论文)
if(k3!=1) //当K3(确认)键按下时 {
display(); //调用显示,用于延时消抖 if(k3!=1) {
TR0=1; //启动定时器 Buzzer_Indicate=0;
sec_nb=set_timenb; //从中断回复,仍显示设置过的数值 sec_dx=set_timedx; //显示设置过的时间 if(set==0) //时间倒时到0时 {
P2=0X00; //东西绿灯,南北红灯 Green_dx=1; Red_nb=1;
sec_nb=sec_dx+5; //回到初值 } else {
P2=0x00; //南北绿灯,东西红灯 Green_nb=1; Red_dx=1;
sec_dx=sec_nb+5; } } }
if(k4!=1) //当K4(切换)键按下 {
display(); //调用显示,用于延时消抖 if(k4!=1) {
TR0=0;
set=!set; //取反set标志位,以切换调节方向dx_nb=set; do {
display(); }
while(k4!=1); } }
if(k5!=1) //当K5(禁止)键按下时 {
display(); //调用显示,用于延时消抖
26
中国地质大学江城学院毕业设计(论文)
if(k5!=1) {
TR0=0; //关定时器 P2=0x00; Red_dx=1;
Red_nb=1; //全部置红灯
sec_dx=00; //四个方向的时间都为00 sec_nb=00;
Buzzer_Indicate=1; do {
display(); }
while(k5!=1); } }
if(k6!=1) //当K6(夜间模式)按下 {
display(); //调用显示,用于延时消抖 if(k6!=1) {
TR0=0; //关定时器 P2=0x00; Yellow_dx=1;
Yellow_nb=1; //全部置黄灯
sec_dx=00; //四个方向的时间都为00 sec_nb=00;
Buzzer_Indicate=1; do {
display(); }
while(k6!=1); } } }
void display(void) //显示子程序 {
buf[1]=sec_nb/10; //第1位 东西秒十位 buf[2]=sec_nb; //第2位 东西秒个位 buf[3]=sec_dx/10; //第3位 南北秒十位 buf[0]=sec_dx; //第4位 南北秒个位 P1=0xff; // 初始灯为灭的 P0=0x00;
P1=0xfe; //片选LED1
27
中国地质大学江城学院毕业设计(论文)
P0=table[buf[1]]; //送东西时间十位的数码管编码 delay(1); //延时 P1=0xff; //关显示 P0=0x00;
P1=0xfd; //片选LED2 P0=table[buf[2]]; delay(1); P1=0xff; P0=0x00;
P1=0Xfb; //片选LED3 P0=table[buf[3]]; delay(1); P1=0xff; P0=0x00; P1=0Xf7;
P0=table[buf[0]]; //片选LED4 delay(1); }
void time0(void) interrupt 1 using 1 //定时中断子程序 {
TH0=0X3C; //重赋初值 TL0=0XB0;
TR0=1; //重新启动定时器 countt0++; //软件计数加1 if(countt0==10) {
if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪 {
Green_dx=0; Yellow_dx=0; Buzz=0; }
if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪 {
Green_nb=0; Yellow_nb=0; Buzz=0; } }
if(countt0==20) // 定时器中断次数=20时(即1秒时) { countt0=0; //清零计数器 sec_dx--; //东西时间减1
28
中国地质大学江城学院毕业设计(论文)
sec_nb--; //南北时间减1
if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪 {
Green_dx=0; Yellow_dx=1; Buzz=1; }
if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪 {
Green_nb=0; Yellow_nb=1; Buzz=1; }
if(sec_dx==0&&sec_nb==5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间 {
sec_dx=5; shanruo=1; }
if(sec_nb==0&&sec_dx==5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间 {
sec_nb=5; shanruo=1; }
if(dx_nb==0&&sec_nb==0) //当黄灯闪烁时间倒计时到0时, {
Buzz=1;
P2=0x00; //重置东西南背方向的红绿灯 Green_nb=1; Red_dx=1; dx_nb=!dx_nb; shanruo=0;
sec_nb=set_timenb; //重赋南北方向的起始值 sec_dx=set_timenb+5; //重赋东西方向的起始值 }
if(dx_nb==1&&sec_dx==0) //当黄灯闪烁时间到 {
P2=0X00; //重置东西南北的红绿灯状态 Green_dx=1; Red_nb=1; dx_nb=!dx_nb; shanruo=0;
sec_dx=set_timedx; //重赋东西方向的起始值 sec_nb=set_timedx+5; //重赋南北方向的起始值 }
29
中国地质大学江城学院毕业设计(论文)
} }
//外部中断0
void int0(void) interrupt 0 using 1 //只允许东西通行 {
TR0=0; //关定时器 P2=0x00;
Green_dx=1; //东西方向置绿灯 Red_nb=1; //南北方向为红灯 Buzzer_Indicate=0;
sec_dx=00; //四个方向的时间都为00 sec_nb=00; }
//外部中断1
void int1(void) interrupt 2 using 1 //只允许南北通行 {
TR0=0; //关定时器 P2=0x00;
Green_nb=1; //置南北方向为绿灯 Red_dx=1; //东西方向为红灯 Buzzer_Indicate=0;
sec_nb=00; //四个方向的时间都为00 sec_dx=00; }
void logo()//开机的Logo \{
for(n=0;n<50;n++) {
P0=0x40; P1=0xfe; delay(1); P1=0xfd; delay(1); P1=0Xfb; delay(1); P1=0Xf7; delay(1); P1 = 0xff; } }
void Buzzer()
30
中国地质大学江城学院毕业设计(论文)
{
if(Buzzer_Indicate==1) Buzz=!Buzz; else Buzz=1; }
void delay(int ms) //延时子程序 {
uint j,k;
for(j=0;j for(k=0;k<124;k++); //大约1毫秒的延时} 31