|
//主程序
void main()
{
TMOD=0X11; //定時器設置
TH1=0X3C;
TL1=0XB0;
TH0=0X3C; //定時器0置初值 0.05S
TL0=0XB0;
EA=1; //開總中斷
ET0=1; //定時器0中斷開啟
ET1=1; //定時器1中斷開啟
TR0=1; //啟動定時0
TR1=0; //關閉定時1
EX0=1; //開外部中斷0
EX1=1; //開外部中斷1
P2=0Xc3; // 開始默認狀態(tài),東西綠燈,南北黃燈
sec_nb=sec_dx+5; //默認南北通行時間比東西多5秒
while(1) //主循環(huán)
{
key(); //調用按鍵掃描程序
display(); //調用顯示程序
}
}
//函數(shù)的定義部分
void key(void) //按鍵掃描子程序
{
if(k1!=1) //當K1(禁止)鍵按下時
{
display(); //調用顯示,用于延時消抖
if(k1!=1) //如果確定按下
{
TR0=0; //關定時器
Red_dx=1;
Red_nb=1; //全部置紅燈
TR1=0;
sec_dx=00; //四個方向的時間都為00
sec_nb=00;
do
{
display(); //調用顯示,用于延時
}
while(k1!=1); //等待按鍵釋放
}
}
if(k2!=1) //當K2(確認)鍵按下時
{
display(); //調用顯示,用于延時消抖
if(k2!=1) //如果確定按下
{
TR0=1; //啟動定時器0
sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數(shù)值
sec_dx=set_timedx; //顯示設置過的時間
TR1=0; //關定時器1
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;
}
}
}
}
void display(void) //顯示子程序
{
buf[1]=sec_nb/10; //第1位 東西秒十位
buf[2]=sec_nb%10; //第2位 東西秒個位
buf[3]=sec_dx/10; //第3位 南北秒十位
buf[0]=sec_dx%10; //第4位 南北秒個位
P1=0xff; // 初始燈為滅的
P0=0x00; //滅顯示
P1=0xfe; //片選LED1
P0=table[buf[1]]; //送東西時間十位的數(shù)碼管編碼
delay(1); //延時
P1=0xff; //關顯示
P0=0x00; //滅顯示
P1=0xfd; //片選LED2
P0=table[buf[2]]; //送東西時間個位的數(shù)碼管編碼
delay(1); //延時
P1=0xff; //關顯示
P0=0x00; //關顯示
P1=0Xfb; //片選LED3
P0=table[buf[3]]; //送南北時間十位的數(shù)碼管編碼
delay(1); //延時
P1=0xff; //關顯示
P0=0x00; //關顯示
P1=0Xf7; //片選LED4
P0=table[buf[0]]; //送南北時間個位的數(shù)碼管編碼
delay(1); //延時
}
|
-
仿真.png
(96.76 KB, 下載次數(shù): 121)
下載附件
2020-9-27 10:54 上傳
-
-
交通信號燈.zip
2020-9-27 10:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
526.13 KB, 下載次數(shù): 73, 下載積分: 黑幣 -5
|