|
這是我做的一個(gè)基于51單片機(jī)的紅綠燈系統(tǒng)自己手工焊接
內(nèi)附硬件圖
分別有兩個(gè)按鈕控制正道和側(cè)道交通燈的情況
一個(gè)按鈕處理突發(fā)情況的情況,即全部燈變?yōu)榧t燈
1正面.jpg (112.07 KB, 下載次數(shù): 63)
下載附件
2017-7-18 16:24 上傳
2背面.jpg (150.17 KB, 下載次數(shù): 82)
下載附件
2017-7-18 16:24 上傳
題目要求.jpg (43.27 KB, 下載次數(shù): 52)
下載附件
2017-7-18 16:24 上傳
0.png (44.1 KB, 下載次數(shù): 60)
下載附件
2017-7-18 16:24 上傳
單片機(jī)源程序如下:
- #include"reg52.h"
- //腳定義
- sbit Adaoyouche=P3^2; //將Adaoyouche定義為P3_2腳
- sbit Bdaoyouche=P3^3;
- sbit jinji=P3^4;
- //函數(shù)聲明
- void display(int miao); //顯示子函數(shù)聲明
- void time_init(); //定時(shí)器使能子函數(shù)聲明
- void delay(unsigned int t); //延時(shí)子函數(shù)聲明
- void dingshi(); //定時(shí)子函數(shù)聲明
- void deng(); //亮燈模式控制子函數(shù)聲明
- //變量定義
- int i=1,l=0,tt=0; //定義全局變量
- unsigned char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示數(shù)字0-9
-
- main()
- {
- time_init(); //定時(shí)器使能
- Adaoyouche=1;
- Bdaoyouche=1;
- jinji=1;
- while(1)
- {
- display(i); //顯示i
- if(Adaoyouche==0) //按鍵功能
- {
- l=0; //A車(chē)道綠燈模式
- i=1; //當(dāng)i=0,tt=0時(shí)進(jìn)入模式選擇
- tt=0;
- }
- if(Bdaoyouche==0)
- {
- l=2; //B車(chē)道綠燈模式
- i=1;
- tt=0;
- }
- if(jinji==0)
- {
- l=4; //緊急雙紅燈模式
- i=1;
- tt=0;
- }
- deng(); //亮燈模式控制
- delay(300); //短暫延時(shí)
- }
- }
- //定時(shí)器使能子函數(shù)
- void time_init()
- {
- tt=0;
- TMOD=0X01; //設(shè)置定時(shí)器1為模式一,即16位計(jì)算模式
- TH0=(65536-50000)/256; //給計(jì)數(shù)寄存器賦值,50毫秒時(shí)間
- TL0=(65536-50000)%256;
- EA=1; //開(kāi)啟總中斷
- ET0=1; //開(kāi)啟定時(shí)器0中斷
- TR0=1; //啟動(dòng)定時(shí)器
- }
- //中斷函數(shù),關(guān)鍵字"interrupt" , 這是C語(yǔ)言的中斷函數(shù)表示法,1表時(shí)定地器0
- void dingshi() interrupt 1
- {
- TH0=(65536-50000)/256; //重新給計(jì)數(shù)寄存器賦值,50毫秒時(shí)間
- TL0=(65536-50000)%256;
- tt--; // 每50毫秒tt就減1,tt從20減到0為1秒
- }
- //顯示子函數(shù)
- void display(int miao)
- {
- P0=0xff; //P0數(shù)據(jù)清0,數(shù)碼管為0亮1滅。
- P1=0xaa; //開(kāi)啟十位
- P0=table[miao/10];//顯示十位
- delay(500); //短暫延時(shí)
- P0=0xff;
- P1=0x55; //開(kāi)啟個(gè)位
- P0=table[miao%10];//顯示個(gè)位
-
- }
- //亮燈模式控制子函數(shù)
- void deng()
- {
- if(tt==0)// 每50毫秒tt就減1,tt從20減到0為1秒,當(dāng)tt=0時(shí)i就減1,i為倒數(shù)時(shí)間。
- {
- i=i-1;
- if(i==0)//當(dāng)i=0時(shí)判斷下一步要亮的燈
- {
- switch(l)
- {
- case 0: //l=0,A道綠燈50秒
- i=50;
- P2=0x78; //燈為0亮1滅。A道紅黃綠燈分別接了P2的4、3、2腳,B道紅黃綠燈分別接了P2的7、6、5腳。0x78為0111 1000
- break;
- case 1: //l=1,A道黃燈10秒
- i=10;
- P2=0x74;
- break;
- case 2: //l=2,B道黃燈25秒
- i=25;
- P2=0xcc;
- break;
- case 3: //l=3,B道黃燈5秒
- i=5;
- P2=0xac;
- break;
- case 4: //l=4,A,B兩道紅燈99秒
- i=99;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
紅綠燈.zip
(902.41 KB, 下載次數(shù): 10)
2017-7-18 11:55 上傳
點(diǎn)擊文件名下載附件
基于單片機(jī)的紅綠燈系統(tǒng) 下載積分: 黑幣 -5
|
|