|
交通燈的全套資料包內(nèi)容:
1、用單片機(jī)stc89C52 設(shè)計一個交通燈系統(tǒng),并用數(shù)碼管顯示時間,LED指示通行。
2、用protel 99se設(shè)計電路圖,pcb圖等
3、數(shù)碼管用三極管驅(qū)動。
4、按鍵功能:黃燈常亮(深夜模式)、禁行、東西通行、南北通行、時間加、時間減、切換、確定。
0.jpg (43.57 KB, 下載次數(shù): 83)
下載附件
2018-1-27 02:14 上傳
0.jpg (62.74 KB, 下載次數(shù): 85)
下載附件
2018-1-27 02:14 上傳
0.jpg (33.73 KB, 下載次數(shù): 77)
下載附件
2018-1-27 02:15 上傳
0.jpg (107.42 KB, 下載次數(shù): 87)
下載附件
2018-1-27 02:15 上傳
0.jpg (135.98 KB, 下載次數(shù): 99)
下載附件
2018-1-27 02:15 上傳
仿真圖:
0.jpg (135.17 KB, 下載次數(shù): 87)
下載附件
2018-1-27 02:18 上傳
1、單片機(jī)是通用的無論51還是52、無論stc還是at都一樣,引腳功能都一樣,原理圖和程序也是一樣的。
2、原理圖中的. sch等格式是要用protel99se打開的,沒有軟件的不要緊,我已幫您轉(zhuǎn)換成word格式和pdf格式的了。
3、程序中的.c文件可以用記事本打開,就是程序了。其他的是寫程序是自動生成的,沒什么用的。
4、可以按照正面布局,盡量不要按照實物的背面焊接,很容易看錯,要按照原理圖焊接,不要按照仿真圖焊接,因為仿真只是模擬一個現(xiàn)象。
原理圖 打開方式:
DXP格式用 Altium designer Summer 軟件打開
protel99格式用 protel99SE 軟件打開
PDF格式用 PDF 軟件打開
Word格式用 Word 或用WPS 軟件打開
4種格式的原理圖都內(nèi)容是一樣的 只是打開方式不同
請注意,原理圖上有些接線的地方是用網(wǎng)絡(luò)標(biāo)號連接的,意思就是名字相同的兩個點就是連接在一起的相當(dāng)導(dǎo)線的作用,圖上所有的VCC要接在一起,所有的GND要接在一起。
請看原理圖焊接,不要看仿真圖焊接。
wrod格式里面的原理圖是復(fù)制出來的,有一點點變行變形,麻煩大家注意一下,盡量看其他三種格式的圖焊接,
如果文檔里面的原理圖和原理圖文件夾內(nèi)的圖不一樣的話,請大家以原理圖文件夾內(nèi)的為準(zhǔn),原理圖文件夾的圖是和實物配套的,可以自己截圖或復(fù)制,然后粘貼到文檔里面去。
單片機(jī)源程序如下:
- #include <reg52.h> //調(diào)用單片機(jī)頭文件
- #define uchar unsigned char //宏定義"uchar"代替"unsigned char"。
- #define uint unsigned int //宏定義"uint"用來定義無符號整型數(shù)。
- //數(shù)碼管段選定義 0 1 2 3 4 5 6 7 8 9
- uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- // A B C D E F 不顯示
- 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //斷碼
- uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
- uchar smg_i = 4; //顯示數(shù)碼管的個位數(shù)
- //數(shù)碼管位選定義
- sbit smg_we1 = P2^0; //數(shù)碼管位選定義
- sbit smg_we2 = P2^1;
- sbit smg_we3 = P3^6;
- sbit smg_we4 = P3^7;
- char dx_s = 0; //東西 南北 倒計時變量
- sbit dx_red = P2^4; //東西紅燈
- sbit dx_green = P2^3; //東西綠燈
- sbit dx_yellow = P2^2; //東西黃燈
- sbit nb_red = P2^7; //南北紅燈
- sbit nb_green = P2^6; //南北綠燈
- sbit nb_yellow = P2^5; //南北黃燈
- uchar flag_jtd_mode; //交通燈的模式 根據(jù)時間
- bit flag_1s = 0;
- bit flag_500ms;
- bit flag_dx_nb; //東西南北模式
- uchar flag_5m_value;
- uchar i;
- uchar flag_alarm; //模式
- uchar dx_time = 30,nb_time = 20; //東西、南北的時間
- uchar flag_jdgz ; //交通管制
- /***********************數(shù)碼位選函數(shù)*****************************/
- void smg_we_switch(uchar i)
- {
- switch(i)
- {
- case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
- case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
- case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
- case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
- }
- }
- /********************************************************************
- * 名稱 : delay_1ms()
- * 功能 : 延時1ms函數(shù)
- * 輸入 : q
- * 輸出 : 無
- ***********************************************************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- /********************************************************************
- * 名稱 : display()
- * 功能 : 數(shù)碼管顯示
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void display()
- {
- uchar i;
- for(i=0;i<smg_i;i++)
- {
- P0 = 0xff; //消隱
- smg_we_switch(i); //位選
- P0 = dis_smg[i]; //段選
- delay_1ms(3);
- }
- }
- /*********************定時器0、定時器1初始化******************/
- void time0_init()
- {
- EA = 1; //開總中斷
- TMOD = 0X11; //定時器0、定時器1工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- // ET1 = 1; //開定時器1中斷
- // TR1 = 1; //允許定時器1定時
- }
- /*********************交通燈處理函數(shù)*********************************/
- void jiaotongdeng_dis()
- {
- if(flag_1s == 1)
- {
- flag_1s = 0;
- if(dx_s == 0)
- {
- if(flag_dx_nb == 1)
- dx_s = nb_time; //南北時間
- else
- dx_s = dx_time; //東西時間
- flag_dx_nb = ~flag_dx_nb;
- }
- dx_s --;
- }
- dis_smg[0] = smg_du[dx_s % 10] ;
- dis_smg[1] = smg_du[dx_s / 10] ;
- dis_smg[2] = smg_du[dx_s % 10] ;
- dis_smg[3] = smg_du[dx_s / 10] ;
- /***********************南北時間*********************************/
- if(flag_dx_nb == 0)
- {
- if(dx_s > 5)
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- flag_5m_value = 0;
- }else if(dx_s <= 5) //當(dāng)小于5秒時 黃燈要閃了
- {
- dx_red = 1; //滅
- dx_green = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- if(flag_500ms == 0)
- {
- dx_yellow = 0;//亮
- }
- else
- {
- dx_yellow = 1;//滅
- }
- }
- }
- /***********************東西時間*********************************/
- if(flag_dx_nb == 1)
- {
- if(dx_s > 5)
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- flag_5m_value = 0;
- }else if(dx_s <= 5) //當(dāng)小于5秒時 黃燈要閃了
- {
- dx_red = 0; //滅
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 1; //滅
- if(flag_500ms == 0) //黃燈閃爍
- {
- nb_yellow = 0; //亮
- }
- else
- {
- nb_yellow = 1; //滅
- }
- }
- }
- }
- /********************獨(dú)立按鍵程序*****************/
- uchar key_can; //按鍵值
- void key() //獨(dú)立按鍵程序
- {
- static uchar key_new;
- key_can = 20; //按鍵值還原
- P1 |= 0x1f;
- if((P1 & 0x1f) != 0x1f) //按鍵按下
- {
- delay_1ms(1); //按鍵消抖動
- if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
- { //確認(rèn)是按鍵按下
- key_new = 0;
- switch(P1 & 0x1f)
- {
- case 0x1e: key_can = 1; break; //得到按鍵值
- case 0x1d: key_can = 2; break; //得到按鍵值
- case 0x1b: key_can = 3; break; //得到按鍵值
- case 0x17: key_can = 4; break; //得到按鍵值
- }
- }
- }
- else
- key_new = 1;
- }
- uchar menu_1,flag_s;
- /********************設(shè)置函數(shù)*****************/
- void key_with()
- {
- if(key_can == 4) //交通管制按鍵
- {
- flag_jdgz ++;
- if(flag_jdgz > 5)
- flag_jdgz = 0;
- if(flag_jdgz == 1) // 全部亮紅燈
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 2) // 東西紅燈 南北綠燈
- {
- dx_red = 0; //亮
- dx_green = 1; //滅
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 3) // 南北紅燈 東西綠燈
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 0; //亮
- nb_green = 1; //滅
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 4) // 南北綠燈 東西綠燈
- {
- dx_red = 1; //滅
- dx_green = 0; //亮
- dx_yellow = 1; //滅
- nb_red = 1; //滅
- nb_green = 0; //亮
- nb_yellow = 1; //滅
- }
- if(flag_jdgz == 5) // 南北黃燈 東西黃燈
- {
- dx_red = 1; //滅
- dx_green = 1; //滅
- dx_yellow = 0; //亮
- nb_red = 1; //滅
- nb_green = 1; //滅
- nb_yellow = 0; //亮
- }
- }
- if(key_can == 1) //設(shè)置鍵
- {
- menu_1 ++;
- if(menu_1 >= 3)
- {
- menu_1 = 0;
- }
- }
- if(menu_1 == 1) //設(shè)置東西的時間
- {
- if(key_can == 2)
- {
- dx_time ++ ; //加1
- if(dx_time > 99)
- dx_time = 99;
- }
- if(key_can == 3)
- {
- dx_time -- ; //減1
- if(dx_time <= 10)
- dx_time = 10;
- }
- dis_smg[0] = smg_du[10] ; //顯示為A
- dis_smg[1] = smg_du[10] ; //顯示為A
- dis_smg[2] = smg_du[dx_time % 10] ; //顯示東西設(shè)置的時候
- dis_smg[3] = smg_du[dx_time / 10] ;
- }
- if(menu_1 == 2) //設(shè)置南北的時間
- {
- if(key_can == 2)
- {
- nb_time ++ ; //加1
- if(nb_time > 99)
- nb_time = 99;
- }
- if(key_can == 3)
- {
- nb_time -- ; //減1
- if(nb_time <= 10)
- nb_time = 10;
- }
- dis_smg[0] = smg_du[11] ; //顯示為B
- dis_smg[1] = smg_du[11] ; //顯示為B
- dis_smg[2] = smg_du[nb_time % 10] ; //顯示東西設(shè)置的時候
- dis_smg[3] = smg_du[nb_time / 10] ;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼 全部資料51hei下載地址:
單片機(jī)交通燈 4個數(shù)碼管 大.7z
(8.26 MB, 下載次數(shù): 619)
2021-10-20 20:38 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|