簡(jiǎn)單的交通燈焊接與程序設(shè)計(jì)用時(shí):5天
014941b22xfox5v77vjhjk.png (71.7 KB, 下載次數(shù): 51)
下載附件
2017-2-27 03:12 上傳
本課程設(shè)計(jì)報(bào)告的word版本及完整的程序代碼下載地址:
http://www.torrancerestoration.com/bbs/dpj-77888-1.html
1 設(shè)計(jì)目的:設(shè)計(jì)一個(gè)東西方向和南北方向十字路口的簡(jiǎn)單交通燈控制系統(tǒng)。 2 設(shè)計(jì)要求:2.1 可以按鍵設(shè)置交通燈東西、南北的倒計(jì)時(shí)時(shí)間第一次按設(shè)置鍵是設(shè)置東西方向的時(shí)間,第二次按設(shè)置鍵是設(shè)置南北方向的時(shí)間,再按加減鍵就可以設(shè)置對(duì)應(yīng)的時(shí)間。 22 東西和南北方向各有兩個(gè)數(shù)碼管分別顯示時(shí)間東西和南北的時(shí)間相差5秒,這5秒為黃燈亮的時(shí)間。 2.3 當(dāng)有特殊情況時(shí),可以按緊急模式進(jìn)行調(diào)整.2.4 緊急模式:當(dāng)消防車、救護(hù)車等特殊車輛通行時(shí)按下”緊急模式鍵”全部亮紅燈,待緊急車輛通過(guò)后,再恢復(fù)后再退出。 2.5 夜間模式:4個(gè)方向黃燈亮起。 2.6 禁止通行第1次按緊急鍵4個(gè)方向全部亮紅燈. 2.7 夜間模式第2次東西南北4個(gè)方向黃燈閃爍 2.8 南北優(yōu)先通行第3次南北綠燈亮東西紅燈亮 2.9 東西優(yōu)先通行第4次南北紅燈亮東西綠燈亮 2.10 再按一次回到正常顯示不同的模式適合不同的交通情況(如夜間模式,有交通事故的時(shí)候)
3 材料準(zhǔn)備:10*15洞洞板1塊, 51芯片(STC89C51RC), 母座(或者40pin芯片座或zip座), 紅色LED燈1個(gè), 103上拉排阻1個(gè)(九個(gè)引腳), 10K電阻1個(gè), 1K電阻1個(gè), 30pf瓷片電容2個(gè), 10uf電解電容1個(gè), 單排針, 輕觸按鍵4個(gè), 12.288 MHz晶振1個(gè), 自鎖開關(guān)(六腳), 杜邦線, USB轉(zhuǎn)TTL線(下載與供電), 紅黃綠LED燈各2個(gè), 3641AH數(shù)碼管(共陰四位數(shù)碼管) 4 電路圖:*注:關(guān)于EA:我使用的STC89C52RC單片機(jī)芯片(EA管腳已內(nèi)部上拉到Vcc) - 如外部不加上拉,或外部上拉到Vcc,上電復(fù)位后單片機(jī)從內(nèi)部開始執(zhí)行程序;
- 如外部下拉到地,上電復(fù)位后單片機(jī)從外部開始執(zhí)行程序。
根據(jù)網(wǎng)上找到的資料畫的電路圖: 1)去掉了復(fù)位電路和電源插孔:
1.001.jpg (23.16 KB, 下載次數(shù): 50)
下載附件
2017-2-27 03:12 上傳
2)再修改后:
1.002.jpg (40.69 KB, 下載次數(shù): 50)
下載附件
2017-2-27 03:12 上傳
5 時(shí)鐘電路:
1.003.jpg (19.84 KB, 下載次數(shù): 62)
下載附件
2017-2-27 03:12 上傳
1.004.jpg (7.12 KB, 下載次數(shù): 48)
下載附件
2017-2-27 03:12 上傳
5.1 關(guān)于單片機(jī)的XTAL1和XTAL2單片機(jī)的XTAL1和XTAL2內(nèi)部有一片內(nèi)振蕩器結(jié)構(gòu)但仍需要在XTAL1和XTAL2兩端連接一個(gè)晶振和兩個(gè)電容才能組成時(shí)鐘電路,這種使用晶振配合產(chǎn)生信號(hào)的方法是內(nèi)部時(shí)鐘方式; 5.2 晶振說(shuō)明無(wú)源晶振是有2個(gè)引腳的無(wú)極性元件,需要借助于時(shí)鐘電路才能產(chǎn)生振蕩信號(hào),自身無(wú)法振蕩起來(lái); 5.3 時(shí)鐘電路的重要性時(shí)鐘電路在單片機(jī)系統(tǒng)中很重要,它能控制著單片機(jī)工作的節(jié)奏,是必不可少的部分。單片機(jī)運(yùn)行需要時(shí)鐘支持——就像計(jì)算機(jī)的CPU一樣,如果沒(méi)有時(shí)鐘電路來(lái)產(chǎn)生時(shí)鐘驅(qū)動(dòng)單片機(jī),那單片機(jī)就不能執(zhí)行程序。 6 自鎖開關(guān):六引腳自鎖開關(guān)是一個(gè)雙刀雙擲開關(guān),除了圖上用黑線相連的部分,其他部分均不相連。
1.005.jpg (10.49 KB, 下載次數(shù): 51)
下載附件
2017-2-27 03:12 上傳
7 A103J排阻:排阻是具有極性,在焊接的時(shí)候一定需要注意,如果方向弄錯(cuò)可能導(dǎo)致顯示不了。
1.006.jpg (19.79 KB, 下載次數(shù): 45)
下載附件
2017-2-27 03:12 上傳
從圖上可以看到排阻左邊有一個(gè)點(diǎn)標(biāo)記和103數(shù)值。那個(gè)點(diǎn)表示那一端的第一個(gè)引腳為公共引腳。,而103表示該排阻,前兩位數(shù)表示數(shù)值,最后一位表示倍數(shù)即10X10 3=10K。 排阻在原理圖中的符號(hào)表示:根據(jù)圖可以發(fā)現(xiàn)排阻內(nèi)部的所有電阻都連接到第一個(gè)引腳上,所以第一個(gè)引腳肯定就是公共端,見下圖。
1.007.jpg (7.62 KB, 下載次數(shù): 60)
下載附件
2017-2-27 03:12 上傳
8 四腳開關(guān):
1.008.jpg (24.82 KB, 下載次數(shù): 53)
下載附件
2017-2-27 03:12 上傳
9 3641AH數(shù)碼管引腳圖:
1.009.jpg (29.61 KB, 下載次數(shù): 40)
下載附件
2017-2-27 03:12 上傳
對(duì)應(yīng)的字母段碼排列:
1.010.jpg (8.63 KB, 下載次數(shù): 57)
下載附件
2017-2-27 03:12 上傳
10 仿真圖:
1.011.jpg (57.62 KB, 下載次數(shù): 45)
下載附件
2017-2-27 03:12 上傳
11 電路連接測(cè)試1)正面圖:
1.012.jpg (44.14 KB, 下載次數(shù): 44)
下載附件
2017-2-27 03:12 上傳
2)背面圖:
1.013.jpg (39.08 KB, 下載次數(shù): 47)
下載附件
2017-2-27 03:12 上傳
12 程序分析:
- #include
- #define uint unsigned int
- #define uchar unsigned char
- /* I/O口的定義 */
- sbit w1_NS=P1^0; //數(shù)碼管南北時(shí)間的位選
- sbit w2_NS=P1^1;
- sbit w1_WE=P1^4; //數(shù)碼管東西時(shí)間的位選
- sbit w2_WE=P2^7;
- sbit k1=P3^2; //按鍵的定義
- sbit k2=P3^5;
- sbit k3=P3^6;
- sbit k4=P3^7;
- sbit red_NS=P2^1; //南北紅綠黃燈的定義
- sbit yellow_NS=P1^6;
- sbit green_NS=P1^5;
- sbit red_WE=P2^6; //東西紅綠黃燈的定義
- sbit yellow_WE=P2^4;
- sbit green_WE=P2^3;
-
- uchar seconds_NS,seconds_WE,seconds_WE_set,seconds_NS_set,flag_NS,flag_WE,t0,k1num,k4num;
- uchar code table[]={
- 0xeb,0x28,0xb3,0xba,0x78, //數(shù)碼管譯碼:分別對(duì)應(yīng)數(shù)字0~9
- 0xda,0xdb,0xa8,0xfb,0xfa
- };
-
- void delay(uint z); //延時(shí)函數(shù)
- void init(); //初始化函數(shù)
- void display_NS(); //南北時(shí)間顯示函數(shù)
- void display_WE(); //東西時(shí)間顯示函數(shù)
- void LED_display(); //紅路燈的正常模式函數(shù)
- void keyscan(); //按鍵掃描函數(shù)
-
- void main()
- {
- init();
- while(1)
- {
- keyscan();
- display_NS();
- display_WE();
- LED_display();
- }
- }
-
- void delay(uint z) //延時(shí)函數(shù)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- void init() //初始化函數(shù)
- {
- t0=0;
- flag_NS=0;
- flag_WE=0;
- seconds_NS_set=10;
- seconds_WE_set=15;
- seconds_NS=seconds_NS_set;
- seconds_WE=seconds_WE_set;
- TMOD=0x01; //設(shè)置定時(shí)器的工作方式為1,定時(shí)器工作方式
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1; //開總中斷
- ET0=1; //開定時(shí)器0的中斷
- TR0=1; //開啟定時(shí)器0的運(yùn)行開關(guān)
-
- }
-
- void display_NS() //南北時(shí)間顯示函數(shù)
- {
- P0=0x00;
- w1_NS=0;
- P0=table[seconds_NS/10]; //顯示南北時(shí)間的十位
- delay(1);
- w1_NS=1;
-
- P0=0x00;
- w2_NS=0;
- P0=table[seconds_NS%10]; ////顯示南北時(shí)間的個(gè)位
- delay(1);
- w2_NS=1;
-
- }
-
- void display_WE() //東西時(shí)間顯示函數(shù)
- {
- P0=0x00;
- w1_WE=0;
- P0=table[seconds_WE/10]; //顯示東西時(shí)間的十位
- delay(1);
- w1_WE=1;
-
- P0=0x00;
- w2_WE=0;
- P0=table[seconds_WE%10]; //顯示東西時(shí)間的個(gè)位
- delay(1);
- w2_WE=1;
-
- }
-
- void timer0() interrupt 1 //中斷函數(shù),16位加1計(jì)數(shù)器
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t0++;
- if(t0==20)
- {
- t0=0;
- seconds_NS--;
- seconds_WE--;
- }
- }
-
- void LED_display() //紅路燈的正常模式
- {
- if(flag_NS==0) //flag_NS為0時(shí)
- {
- if(seconds_NS>5) //南北時(shí)間大于5s
- {
- red_NS=1; //紅燈滅
- yellow_NS=1; //黃燈滅
- green_NS=0; //綠燈亮
- }
- else
- { //5s內(nèi)亮黃燈5s
- red_NS=1;
- yellow_NS=0;
- green_NS=1;
- if(seconds_NS==0)
- {
- seconds_NS=seconds_WE_set;
- flag_NS=1;
- }
- }
- }
- if(flag_NS==1) // flag_NS為1時(shí)
- {
- if(seconds_NS>5)
- {
- red_NS=0; //紅燈亮
- yellow_NS=1; //黃燈滅
- green_NS=1; //綠燈滅
- }
- else
- { //5s內(nèi)亮黃燈5s
- red_NS=1;
- yellow_NS=0;
- green_NS=1;
- if(seconds_NS==0)
- {
- seconds_NS=seconds_NS_set;
- flag_NS=0;
- }
- }
- }
-
- if(flag_WE==0) //flag_WE為0時(shí)
- {
- if(seconds_WE>5)
- {
- red_WE=0; //紅燈亮
- yellow_WE=1; //黃燈滅
- green_WE=1; //綠燈滅
- }
- else
- { //5s內(nèi)黃燈亮5s
- red_WE=1;
- yellow_WE=0;
- green_WE=1;
- if(seconds_WE==0)
- {
- seconds_WE=seconds_NS_set;
- flag_WE=1;
- }
- }
- }
- if(flag_WE==1)
- {
- if(seconds_WE>5)
- {
- red_WE=1; //紅燈滅
- yellow_WE=1; //黃燈滅
- green_WE=0; //綠燈亮
- }
- else
- { //黃燈亮5s
- red_WE=1;
- yellow_WE=0;
- green_WE=1;
- if(seconds_WE==0)
- {
- seconds_WE=seconds_WE_set-3;
- flag_WE=0;
- }
- }
- }
- }
-
- void keyscan() //按鍵掃描
- {
- if(k1==0)
- {
- while(!k1); //等待按鍵釋放(消抖)
- k1num++;
- TR0=0;
- }
- if(k1num==1)
- {
- if(k2==0)
- {
- while(!k2);
- seconds_NS_set++;
- seconds_NS=seconds_NS_set;
- // display_NS();
- if(seconds_NS==100)
- seconds_NS=0;
- }
- if(k3==0)
- {
- while(!k3);
- seconds_NS_set--;
- seconds_NS=seconds_NS_set;
- // display_NS();
- if(seconds_NS==0)
- seconds_NS=99;
- }
- }
- if(k1num==2)
- {
- if(k2==0)
- {
- while(!k2);
- seconds_WE_set++;
- seconds_WE=seconds_WE_set;
- // display_WE();
- if(seconds_WE==100)
- seconds_WE=0;
- }
- if(k3==0)
- {
- while(!k3);
- seconds_WE_set--;
- seconds_WE=seconds_WE_set;
- // display_WE();
- if(seconds_WE==0)
- seconds_WE=99;
- }
- }
- if(k1num==3)
- {
- k1num=0;
- TR0=1;
- }
-
- if(k4==0)
- {
- while(!k4);
- k4num++;
- }
-
- /*特殊情況選擇模式*/
- switch(k4num)
- {
- case 1: //按第1次為緊急模式,禁止通行
- red_WE=0;
- yellow_WE=1;
- green_WE=1;
- red_NS=0;
- yellow_NS=1;
- green_NS=1;
- TR0=0;
- flag_NS=-1;
- flag_WE=-1;
- seconds_NS=99;
- seconds_WE=99;
- break;
復(fù)制代碼 13 心得體會(huì)本次是第一次焊接,剛開始出現(xiàn)許多錯(cuò)誤,修改修改再修改;上網(wǎng)查資料,請(qǐng)教師兄,最后做出來(lái)了。這次從中收獲許多,學(xué)會(huì)從網(wǎng)上檢索有用的資料,這對(duì)我們學(xué)習(xí)有很大的幫助。對(duì)單片機(jī)也有了進(jìn)一步的了解,動(dòng)手能力、分析能力也增強(qiáng)了,實(shí)踐很重要,再好的理論如果不能用于實(shí)踐,那么它就是沒(méi)有用的。 紙上得來(lái)終覺(jué)淺,絕知此事要躬行。 感謝。
1.014.jpg (10.66 KB, 下載次數(shù): 44)
下載附件
2017-2-27 03:12 上傳
參考資料: 1、單片機(jī)最小系統(tǒng)電路圖:
1.015.jpg (41.34 KB, 下載次數(shù): 54)
下載附件
2017-2-27 03:12 上傳
|