|
采用單片機(jī)的I/O口PO口通過上拉電阻和交通燈相連接,P3.0、P3.1口接到數(shù)碼管控制位上,控制數(shù)碼管的顯示,程序放在STC89C52RC單片機(jī)的ROM中,在十字路口的四組紅、黃、綠交通燈中,由單片機(jī)的 P1.0-P1.2 、P1.5-P1.7、P2.0-P2.2、P2.5-P2.7控制,由于交通燈為發(fā)光二極管且陽極通過限流電阻和電源正極相連,因此I/0口輸出低電平時(shí),與之相連的指示燈會(huì)亮,并通過數(shù)碼管顯示時(shí)間倒計(jì)時(shí)。I/0口輸出高電平時(shí),相應(yīng)指示燈會(huì)滅。當(dāng)交通出現(xiàn)障礙需要恢復(fù)到初始狀態(tài)時(shí),按下復(fù)位鍵即可,此鍵由單片機(jī)的9腳RST鍵控制。
制作出來的實(shí)物圖如下:
1604058595971.jpg (2.93 MB, 下載次數(shù): 54)
下載附件
2020-10-30 20:02 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png (33.93 KB, 下載次數(shù): 57)
下載附件
2020-10-30 22:02 上傳
51hei.png (58.68 KB, 下載次數(shù): 57)
下載附件
2020-10-30 22:02 上傳
主函數(shù):
//主程序
void main()
{
TMOD=0X11; //定時(shí)器設(shè)置
TH1=0X3C;
TL1=0XB0;
TH0=0X3C; //定時(shí)器0置初值 0.05S
TL0=0XB0;
EA=1; //開總中斷
ET0=1; //定時(shí)器0中斷開啟
ET1=1; //定時(shí)器1中斷開啟
TR0=1; //啟動(dòng)定時(shí)0
TR1=0; //關(guān)閉定時(shí)1
EX0=1; //開外部中斷0
EX1=1; //開外部中斷1
P1=0X21; // 開始默認(rèn)狀態(tài),東西綠燈,南北黃燈
sec_nb=sec_dx+5; //默認(rèn)南北通行時(shí)間比東西多5秒
while(1) //主循環(huán)
{
key(); //調(diào)用按鍵掃描程序
display(); //調(diào)用顯示程序
}
}
//函數(shù)的定義部分
void key(void) //按鍵掃描子程序
{
if(k1!=1) //當(dāng)K1(禁止)鍵按下時(shí)
{
display(); //調(diào)用顯示,用于延時(shí)消抖
if(k1!=1) //如果確定按下
{
TR0=0; //關(guān)定時(shí)器
P1=0X00;
Red_dx=1;
Red_nb=1; //全部置紅燈
TR1=0;
sec_dx=00; //四個(gè)方向的時(shí)間都為00
sec_nb=00;
do
{
display(); //調(diào)用顯示,用于延時(shí)
}
while(k1!=1); //等待按鍵釋放
}
}
if(k2!=1) //當(dāng)K2(確認(rèn))鍵按下時(shí)
{
display(); //調(diào)用顯示,用于延時(shí)消抖
if(k2!=1) //如果確定按下
{
TR0=1; //啟動(dòng)定時(shí)器0
sec_nb=set_timenb; //從中斷回復(fù),仍顯示設(shè)置過的數(shù)值
sec_dx=set_timedx; //顯示設(shè)置過的時(shí)間
TR1=0; //關(guān)定時(shí)器1
if(set==0) //時(shí)間倒時(shí)到0時(shí)
{
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;
}
}
}
}
51hei.png (11.39 KB, 下載次數(shù): 62)
下載附件
2020-10-30 22:01 上傳
全部資料51hei下載地址:
交通燈.zip
(16.79 MB, 下載次數(shù): 129)
2020-10-30 20:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|