第一篇:單片機(jī)交通燈控制程序
#include
//*****define led port ********** sbit R1=P2^4;//east and west red led sbit Y1=P2^3;//east and west yellow led sbit G1=P2^2;//east and west green led sbit R2=P2^5;//south and north red led sbit Y2=P2^6;//south and north yellow led sbit G2=P2^7;//south and north green led
//*********define key************** sbit k0=P3^0;//emergency sbit k1=P3^1;//east and west pass sbit k2=P3^2;//south and north pass sbit k3=P3^3;//start and subtract 1 sbit k4=P3^4;//pause and add 1 sbit k5=P3^5;//set time
//*********define variable********* bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pass_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num;
//*********define key******** void delay(uint i){ uint x,y;for(x=i;x>0;x--)
for(y=110;y>0;y--);} void timer0_init(){ TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;}
void led_display(uchar dx,nb){ uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx>99){
led_w1=1;
led_w2=1;} else {
led_w1=0;
P0=table[dx1];
delay(5);
led_w1=1;
if(dx<10&&dx>0)led_w2=1;
else
{
led_w2=0;
P0=table[dx2];
delay(5);
led_w2=1;
} } if(nb>99){
led_w3=1;
led_w4=1;} else {
led_w3=0;
P0=table[nb1];
delay(5);
led_w3=3;
if(nb<10&&nb>0)led_w4=1;
else
{
led_w4=0;
P0=table[nb2];
delay(5);
led_w4=4;
} } } //*************light work********** void circle_led(){ if(!flag){
if(pass_time>5)
{
led_display(pass_time-5,pass_time);
R1=1;Y1=1;G1=0;
//east and west pass
R2=0;Y2=1;G2=1;
//south and north stop
}
if(pass_time<=5&&pass_time>0)
{
if(cnt>=10)led_display(pass_time,pass_time);
else led_display(100,pass_time);
R1=1;G1=1;
//east and west yellow led flash
if(cnt>=10)Y1=0;
else Y1=1;
R2=0;Y2=1;G2=1;
}
if(pass_time==0)
{
pass_time=nb_time;
flag=1;
} } else {
if(pass_time>5)
{
led_display(pass_time,pass_time-5);
R1=0;Y1=1;G1=1;
//east and west stop
R2=1;Y2=1;G2=0;
//south and north pass
}
if(pass_time<=5&&pass_time>0)
{
if(cnt>=10)led_display(pass_time,pass_time);
else led_display(pass_time,100);
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt>=10)Y2=0;
else Y2=1;
}
if(pass_time==0)
{
pass_time=dx_time;
flag=0;
} } }
void emergency()
//east and west,south and north stop { led_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;} void dx_pass()
//east and west pass,south and north stop { led_display(100,100);if(y_time<=5&&y_time>0){
TR1=1;
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt1>=10)Y2=0;
else Y2=1;} if(y_time==0){
TR1=0;
R1=1;Y1=1;G1=0;
R2=0;Y2=1;G2=1;} } void nb_pass()
//south and north pass,east and west stop { led_display(100,100);if(y_time<=5&&y_time>0){
TR1=1;
R1=1;G1=1;
if(cnt1>=10)Y1=0;//east and west yellow led flash
else Y1=1;
R2=0;Y2=1;G2=1;
} if(y_time==0){
TR1=0;
R1=0;Y1=1;G1=1;
R2=1;Y2=1;G2=0;} }
//***********keyboard scan************ void keyscan(){
if(!k5num)
{
if(k0==0)//*******emergency*******
{
delay(10);
if(k0==0)
{
while(!k0);
TR0=0;
k0num=1;
}
}
if(!k1num&&!k0num)
{
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);
k1num=1;
k2num=0;
y_time=5;//單方向通行時(shí),黃燈閃爍時(shí)間
TR0=0;
TR1=1;
}
}
}
if(!k2num&&!k0num)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
while(!k2);
k1num=0;
k2num=1;
y_time=5;//單方向通行時(shí),黃燈閃爍時(shí)間
TR0=0;
TR1=1;
}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
if(k1num||k2num)pass_time=dx_time;//由東西或南北通行返回時(shí),重新開始執(zhí)行。
k0num=0;
k1num=0;
k2num=0;
k4num=0;
k5num=0;
TR0=1;
TR1=0;
flag_t=0;
}
} {
} if(!k4&&!k0num)
//pause { delay(10);if(k4==0){
while(!k4);
TR0=0;
k4num=1;} }
if(k4num==1)
//暫停鍵按下時(shí),才可以調(diào)整兩個(gè)方向通行時(shí)間 if(k5==0){ delay(10);if(k5==0){
k5num++;
while(!k5);
switch(k5num)
{
case 1:
TR0=1;
flag_t=1;//調(diào)整時(shí)間時(shí),pass_time值不變。
k5num=1;
break;
case 2:
k5num=2;
break;
case 3:
TR0=0;
k5num=0;
pass_time=dx_time;//重新賦值
break;
} } } if(k5num!=0){ if(k3==0){
delay(10);
if(k3==0)
{
while(!k3);
switch(k5num)
{
case 1:
dx_time--;
if(dx_time<10)
break;
case 2:
nb_time--;
if(nb_time<10)
break;
}
}
}
if(k4==0)
{
delay(10);
if(k4==0)
{
while(!k4);
switch(k5num)
{
case 1:
dx_time++;
if(dx_time>=100)
break;
case 2:
nb_time++;
if(nb_time>=100)
break;
}
}
}
} } } void main(){ timer0_init();dx_time=45;nb_time=30;
dx_time=99;nb_time=99;dx_time=10;nb_time=10;
pass_time=dx_time;while(1){ keyscan();if(k0num)emergency();else { switch(k4num){
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pass();
if(k2num)nb_pass();
}
break;
case 1:
switch(k5num)
{
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pass();
if(k2num)nb_pass();
}
break;
case 1:
R1=1;Y1=1;G1=1;//調(diào)整時(shí)間時(shí),關(guān)閉所有燈
R2=1;Y2=1;G2=1;
if(cnt<=10)
led_display(100,nb_time);
else
led_display(dx_time,nb_time);
break;
case 2:
R1=1;Y1=1;G1=1;//調(diào)整時(shí)間時(shí),關(guān)閉所有燈
R2=1;Y2=1;G2=1;
if(cnt<=10)
led_display(dx_time,100);
else
led_display(dx_time,nb_time);
break;
}
break;
}
}
} } void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==20){
cnt=0;
if(flag_t==0)pass_time--;//調(diào)整時(shí)間時(shí),不執(zhí)行此操作
} } void timer1()interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt1++;if(cnt1==20){
cnt1=0;
y_time--;//單方向通行時(shí),黃燈閃爍時(shí)間。
} }
第二篇:交通燈單片機(jī)課程設(shè)計(jì)
《單片機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告》
課題:以交通燈為主的多功能任務(wù)設(shè)計(jì)
班級 學(xué)號 學(xué)生姓名
指導(dǎo)教師
淮陰工學(xué)院 電子與電氣工程學(xué)院
2015-6 1
目錄
一、課程設(shè)計(jì)目的......................................................................................................3
二、設(shè)計(jì)要求..............................................................................................................3 1. 總體要求........................................................................................................3 2. 具體要求........................................................................................................3 3. 系統(tǒng)硬件總框圖............................................................................................4 1)AT89C52單片機(jī).......................................................................................5 3)數(shù)碼管顯示電路........................................................................................6 4)LED燈顯示...............................................................................................7 5)鍵盤掃描模塊............................................................................................7 6)蜂鳴器電路................................................................................................8
三、硬件電路的設(shè)計(jì)及描述......................................................................................8 1. 硬件總框圖及原理圖....................................................................................8 2. 主程序流程圖..............................................................................................10 3. 各模塊流程圖..............................................................................................11 1)時(shí)間顯示程序流程圖..............................................................................12 2)流水燈程序流程圖..................................................................................12 3)利用蜂鳴器的音樂流程圖......................................................................13 4)交通燈控制..............................................................................................13
四、源程序代碼........................................................................................................14
六、調(diào)試情況
六、設(shè)計(jì)心得............................................................................................................20
七、參考文獻(xiàn)............................................................................................................20
一、設(shè)計(jì)目的
《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)是一項(xiàng)重要的實(shí)踐性教育環(huán)節(jié),是學(xué)生在校期間必須接受的一項(xiàng)工程訓(xùn)練。在課程設(shè)計(jì)過程中,在教師指導(dǎo)下,應(yīng)用工程的方法,通過一個(gè)簡單課題的設(shè)計(jì)練習(xí),可使學(xué)生初步體驗(yàn)單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)過程、設(shè)計(jì)要求、完成的工作內(nèi)容和具體的設(shè)計(jì)方法,了解必須提交的各項(xiàng)工程文件,也達(dá)到鞏固、充實(shí)和綜合運(yùn)用所學(xué)知識解決實(shí)際問題的目的。
通過課程設(shè)計(jì),應(yīng)該能加強(qiáng)學(xué)生如下能力的培養(yǎng):(1)獨(dú)立工作能力和創(chuàng)造力;
(2)綜合運(yùn)用專業(yè)及基礎(chǔ)知識,解決實(shí)際工程技術(shù)問題的能力;(3)查閱圖書資料、產(chǎn)品手冊和各種工具書的能力;(4)工程繪圖的能力;
(5)編寫技術(shù)報(bào)告和編寫技術(shù)資料的能力。
二、設(shè)計(jì)要求
1.總體要求
(1)獨(dú)立完成設(shè)計(jì)任務(wù)(2)繪制系統(tǒng)硬件總框圖(3)繪制系統(tǒng)原理電路圖
(4)制定編寫設(shè)計(jì)方案,編制軟件框圖,完成詳細(xì)完整的程序清單和注釋(5)制定編寫調(diào)試方案,編寫用戶操作使用說明書
(6)寫出設(shè)計(jì)工作小結(jié)。對在完成以上文件過程所進(jìn)行的有關(guān)步驟如設(shè)計(jì)思想、指標(biāo)論證、方案確定、參數(shù)計(jì)算、元器件選擇、原理分析等作出說明,并對所完成的設(shè)計(jì)作出評價(jià),對自己整個(gè)設(shè)計(jì)工作中經(jīng)驗(yàn)教訓(xùn),總結(jié)收獲和今后研究方向。
2.具體要求
本次工程實(shí)踐的校內(nèi)部分主要以單片機(jī)為基礎(chǔ),進(jìn)行單片機(jī)軟件編程,目的 3 是為了提高學(xué)生的軟件編程和系統(tǒng)設(shè)計(jì)能力,整個(gè)設(shè)計(jì)系統(tǒng)包括兩個(gè)部分,硬件及軟件部分,硬件部分已經(jīng)制作成功,學(xué)生只需要掌握其原理和焊接相應(yīng)的元器件,掌握元器件的辨別和元器件的作用以及應(yīng)用場所即可,另外對所焊接的電路還需要進(jìn)行仔細(xì)的檢查,判斷是否有焊接錯(cuò)誤的地方或者短路的地方,對出現(xiàn)的異常情況要能夠根據(jù)現(xiàn)象判別原因,并具備解決問題的能力,從而切實(shí)提高學(xué)生的硬件電子電路的分析、判斷能力。
軟件編程是本次課程設(shè)計(jì)的重要環(huán)節(jié)。在為期兩周的工程實(shí)踐中,將占據(jù)主要時(shí)間,完成的軟件編程任務(wù)主要包括以下幾點(diǎn):
1)、熟悉Keil C51編程平臺(tái)及相關(guān)編程軟件
2)、編寫、調(diào)試蜂鳴器、繼電器動(dòng)作、方波程序并進(jìn)行軟硬件聯(lián)調(diào) 3)、編寫、調(diào)試LED流水燈(循環(huán)顯示)程序并進(jìn)行軟硬件聯(lián)調(diào) 4)、編寫、調(diào)試鍵盤掃描子程序并進(jìn)行軟硬件聯(lián)調(diào) 5)、編寫、調(diào)試數(shù)碼管動(dòng)態(tài)掃描程序并進(jìn)行軟硬件聯(lián)調(diào) 6)、基于交通燈的多功能控制設(shè)計(jì)
其中前五個(gè)內(nèi)容是后兩個(gè)內(nèi)容的基礎(chǔ),主要是編制一些子程序,為后繼的整個(gè)系統(tǒng)設(shè)計(jì)打下基礎(chǔ)。交通燈控制是在五個(gè)課題中選做的一個(gè)設(shè)計(jì),是一個(gè)簡單的單片機(jī)編程設(shè)計(jì),來實(shí)現(xiàn)智能交通燈的多功能作用。
3.系統(tǒng)硬件總框圖
圖1 系統(tǒng)設(shè)計(jì)總框圖
此次課程設(shè)計(jì),AT89C52是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。1)AT89C52單片機(jī)
設(shè)計(jì)中所用的單片機(jī)型號為AT89C52,其主要功能為:
AT89C52是低功耗、高性能的CMOS 8位單片機(jī)。片內(nèi)帶有8KB的Flash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外,AT89C52的指令系統(tǒng)和引腳與80C52完全兼容,所以,近幾年AT89C52單片機(jī)應(yīng)用極為廣泛。
AT89C52單片機(jī)除了含有8KB的Flash存儲(chǔ)器外,片內(nèi)還有256 B的RAM,32條I/O口線,3個(gè)16位定時(shí)/計(jì)算器、6個(gè)中斷源、1個(gè)全雙工串行口等。同時(shí),與80C52一樣,有空閑和掉電兩種節(jié)電運(yùn)行方式。
AT89C52引腳如下圖所示:
圖2 AT89C52引腳
AT89C52單片機(jī)為40腳雙列直插封裝的8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測試圖控制,紅外遙控信號IR的接收解碼及與主板CPU通信等。
2)DS1302模塊
DS1302的RST是復(fù)位/片選線,通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。
其管腳圖如下:
圖3 DS1302管腳圖
各引腳功能:Vcc1為后備電源,VCC2為主電源,X1和X2是振蕩源,SCLK為輸入端
RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。
3)數(shù)碼管顯示電路
圖4 數(shù)碼管顯示電路
設(shè)計(jì)中采用六位共陰極數(shù)碼管,通過單片機(jī)STC89C52的P0口控制其位選和段選,以達(dá)到動(dòng)態(tài)顯示相應(yīng)數(shù)值的效果。在其位選控制部分,采用了一個(gè)9012型三極管,要求當(dāng)P0口輸出低電平時(shí),位選成功。
所謂動(dòng)態(tài)掃描就是指我們采用分時(shí)的方法,輪流控制各個(gè)顯示器的COM端,6 使各個(gè)顯示器輪流點(diǎn)亮。在輪流點(diǎn)亮掃描過程中,每位顯示器的點(diǎn)亮?xí)r間是極為短暫的(約1ms),但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。
4)LED燈顯示
圖5 LED顯示模塊
本次課程設(shè)計(jì)中,“程序語言”通過“翻譯”軟件“翻譯”成單片機(jī)所需的二進(jìn)制代碼,單片機(jī)可工作。要用外加電源和分壓電阻來控制低電平驅(qū)動(dòng)點(diǎn)亮,因?yàn)閱纹瑱C(jī)不能直接高電平驅(qū)動(dòng)LED燈。如圖D1-D8和R1、R2以及R6-R11連接到單片機(jī)IO口,當(dāng)P1口某腳變低時(shí)相應(yīng)LED發(fā)光。實(shí)現(xiàn)LED燈的閃爍,只需利用編程方法依次從低位到高位逐個(gè)變?yōu)榈碗娖?,等待少許時(shí)刻再變高即可。
5)鍵盤掃描模塊
圖6 按鍵輸入電路
本模塊四個(gè)開關(guān)分別用于控制流水燈控制電路,時(shí)間顯示電路,音樂蜂鳴器電路,交通燈四部分功能。當(dāng)按下其中一個(gè)開關(guān)時(shí),該部分電路導(dǎo)通,給單片機(jī) 發(fā)出地址信號,實(shí)現(xiàn)其中一項(xiàng)功能的運(yùn)做,如圖4所示。
KEYA鍵:其功能是當(dāng)該鍵按下時(shí),蜂鳴器程序工作; KEYB鍵:其功能是當(dāng)該鍵按下時(shí),流水燈程序工作;
KEYC鍵:其功能是當(dāng)該鍵按下時(shí),數(shù)碼管動(dòng)態(tài)掃描程序工作; KEYD鍵:其功能是當(dāng)該鍵按下時(shí),交通燈程序工作。
6)蜂鳴器電
圖7 蜂鳴器電路
路
蜂鳴器單元電路是通過一個(gè)PNP三極管來放大驅(qū)動(dòng)蜂鳴器,蜂鳴器的正極接到+5V電源上面,蜂鳴器的負(fù)極接到三極管的發(fā)射極,三極管的基極經(jīng)過限流電阻后由單片機(jī)的P3.4控制。
當(dāng)輸出高電平時(shí),三極管截止,蜂鳴器的兩引腳間的直流電壓接近于0V,沒有電流流過線圈,蜂鳴器不發(fā)聲;當(dāng)輸出低電平時(shí),三極管導(dǎo)通,使蜂鳴器的兩個(gè)引腳間獲得將接近+5V的直流電壓,這樣蜂鳴器的電流形成回路,發(fā)出聲音。因此,我們可以通過程序控制IO口輸出的電平來控制蜂鳴器是否發(fā)出聲音,實(shí)現(xiàn)各種可能音響的產(chǎn)生。
三、硬件電路的設(shè)計(jì)及描述
1.硬件總框圖及原理圖
圖8 硬件總框圖
圖9 硬件總原理圖
2.主程序流程圖
3.各模塊流程圖 1)時(shí)間顯示程序流程圖
2)流水燈程序流程圖
3)利用蜂鳴器的音樂流程圖
4)智能交通燈
四、源程序代碼
/******************************************************************** * 文件名
: 4個(gè)功能由按鍵控制.c * 描
述
: 按下A鍵,實(shí)現(xiàn)蜂鳴器動(dòng)作。
按下B鍵,實(shí)現(xiàn)LED流水燈循環(huán)顯示。
按下C鍵,實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)掃描顯示。
按下D鍵,實(shí)現(xiàn)交通燈功能。* 創(chuàng)建人
:
***********************************************************************/ #include
#define uint unsigned int
// 無符號整形習(xí)慣的定義
#define uchar unsigned char
//無符號字符型習(xí)慣的定義 void buzz_key(void);
//子函數(shù)聲明 void led_key(void);void tube_key(void);void traffic(void);unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 0 1 2 3 4 5 6 7 8 9
unsigned char code weima[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
// 選擇哪個(gè)數(shù)碼管
unsigned char temp[6];uchar i=35;uchar k=30;uchar l=5;uchar j;uchar b;
//定義變量
sbit duan=P2^6;//定義管腳 sbit wei=P2^7;sbit key_A=P3^4;sbit key_B=P3^5;sbit key_C=P3^6;sbit key_D=P3^7;sbit buzz=P2^3;sbit DIOLA=P2^5;sbit csda=P3^2;sbit red=P1^0;//交通燈管腳定義 sbit green=P1^1;sbit yellow=P1^2;/******************************************************************** * 名稱 : Delay_1ms()* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x * 輸入 : x(延時(shí)一毫秒的個(gè)數(shù))* 輸出 : 無
***********************************************************************/
void Delay_1ms(unsigned int t){ unsigned char x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);
}
/******************************************************************** * 名稱 : Main()* 功能 : 實(shí)現(xiàn)蜂鳴器,流水燈,數(shù)碼管,交通燈
***********************************************************************/ void main(){
DIOLA=0;//流水燈鎖存器關(guān) 流水燈未選通
wei=0;//位選關(guān)
duan=1;
P0=0;
duan=0;
csda=0;
while(1){
if(key_A==0 || key_B==0 || key_C==0|| key_D==0)
{
if(key_A==0)
//A鍵按下
{
buzz_key();
//調(diào)用蜂鳴器子程序
}
else if(key_B==0)//B鍵按下
{
led_key();
//調(diào)用流水燈子程序
}
else if(key_C==0)//C鍵按下時(shí)
{
tube_key();//調(diào)用數(shù)碼管顯示子程序
}
else
//D鍵按下時(shí)
{
traffic();
//調(diào)用交通燈子程序
i=35;
k=30;
l=5;
return;
}
}
} }
/******************************************************************** * 名稱 : buzz_key(void)* 功能 : 蜂鳴器子程序
***********************************************************************/
void buzz_key(void)
{
DIOLA=0;wei=0;
buzz=0;
//蜂鳴器響
while(key_B&&key_C&&key_D&&!key_A);
buzz=1;
//關(guān)蜂鳴器
}
/********************************************************************* * 名稱 : led_key(void)* 功能 : 流水燈子程序
***********************************************************************/ void led_key(void){
DIOLA=1;b=0xfe;
P1=b;//11111110 while(key_B==0){
b=_crol_(b,1);
//左移11111101
Delay_1ms(500);
P1=b;
//111111011
Delay_1ms(500);
}
while(key_A&&key_B&&key_C&&key_D);
P1=0xff;
}
/******************************************************************** * 名稱 : tube_key(void)* 功能 : 數(shù)碼管子程序
***********************************************************************/
void tube_key(void){
DIOLA=0;
//流水燈使能端置0 while(key_C==0)
{ unsigned int i;
for(i=0;i<6;i++)
{
wei=1;
P0=weima[i];
//位選信號
wei=0;
duan=1;
P0=duanma[i];//段選信號
duan=0;
Delay_1ms(500);
}
duan=1;
P0=0;
duan=0;
//清零
}
}
/******************************************************************** * 名稱 : traffic_key(void)* 功能 : 交通燈子程序
***********************************************************************/
void traffic(void)
{
DIOLA=0;
while(key_D==0)
{
if(i>0)
{
DIOLA=1;
b=0xfe;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隱
P0 = weima[0];
wei=0;
duan=1;
//第1位數(shù)碼管顯示
P0 = duanma[(i / 10)%10];//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)40毫秒后顯示下一個(gè)數(shù)
P0 = 0;
wei=1;
//消隱
P0 = weima[1];
wei=0;
duan=1;
//第2位數(shù)碼管顯示
P0 = duanma[i % 10];
//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)40毫秒后顯示下一個(gè)數(shù)
}
i--;
}
else if(k>0)
{
DIOLA=1;
b=0xfd;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隱
P0 = weima[0];
wei=0;
duan=1;
//第1位數(shù)碼管顯示
P0 = duanma[(k / 10)%10];//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)3毫秒后顯示下一個(gè)數(shù)
P0 = 0;
wei=1;
//消隱
P0 = weima[1];
wei=0;
duan=1;
//第2位數(shù)碼管顯示
P0 = duanma[k % 10];
//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)3毫秒后顯示下一個(gè)數(shù)
}
k--;
}
else if(l>0)
{
DIOLA=1;
b=0xfb;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隱
P0 = weima[0];
wei=0;
duan=1;
//第1位數(shù)碼管顯示
P0 = duanma[(l / 10)%10];//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)3毫秒后顯示下一個(gè)數(shù)
P0 = 0;
wei=1;
//消隱
P0 = weima[1];
wei=0;
duan=1;
//第2位數(shù)碼管顯示
P0 = duanma[l % 10];
//在這里取 i 的個(gè)位數(shù)
Delay_1ms(40);
//延時(shí)3毫秒后顯示下一個(gè)數(shù)
}
l--;
}
}
}
五、設(shè)計(jì)心得
通過兩個(gè)星期的實(shí)驗(yàn),我的設(shè)計(jì)雖然有一些毛病,但總體上還是成功的。兩周的時(shí)間雖然短暫,但我從中受益匪淺,畢竟在課堂學(xué)習(xí)到的東西真真正正的用到實(shí)際中還是有很大困難的,要把理論運(yùn)用于實(shí)踐確實(shí)并非一件易事。我從最初的設(shè)想設(shè)計(jì)一個(gè)什么樣的數(shù)字電路到繪制電路圖,然后打印排版,最后矯正設(shè)計(jì)中的漏洞與不足,整個(gè)過程我翻閱了大量的資料。
這次交通燈的課程設(shè)計(jì),也使我得到了一次用專業(yè)知識、專業(yè)技能分析和解決現(xiàn)實(shí)問題的能力。使我在單片機(jī)的基本原理、單片機(jī)應(yīng)用學(xué)習(xí)過程中,以及在常用編程設(shè)計(jì)思路技巧的掌握方面都能向前邁了一大步,為日后成為一名合格的應(yīng)用型人才打下良好的基礎(chǔ)。綜合課程設(shè)計(jì)讓我把以前學(xué)習(xí)到的知識得到鞏固和進(jìn)一步的提高認(rèn)識,對已有知識有了更深層次的理解和認(rèn)識。在此,由于自身能力有限,在課程設(shè)計(jì)中碰到了很多的問題,我通過查閱相關(guān)書籍、資料以及和周圍同學(xué)交流得到解決。
還有交通燈是我們生活中非常常見的一種東西,對于我們學(xué)以致用的這種能力得到了很好鍛煉,能夠?yàn)槲覀円院蟮墓ぷ饔趯W(xué)習(xí)打下基礎(chǔ)。
六、參考文獻(xiàn)
1.《單片機(jī)原理及接口技術(shù)》 李朝青 北京航空航天大學(xué)出版社,2004 2.《單片機(jī)原理及應(yīng)用》 李全力 高等教育出版社,2001 3.《電子系統(tǒng)設(shè)計(jì)與實(shí)踐》 楊剛,周群 電子工業(yè)出出版社,1997 4.《單片機(jī)微型計(jì)算機(jī)技術(shù)》 劉國榮 機(jī)械工業(yè)出版社,1997 5.《數(shù)字電子技術(shù)》 楊志忠 高等教育出版社,2003 6.《電子技術(shù)》 胡宴如 高等教育出版社,2001 7.《電子線路CAD》 王延才 機(jī)械工業(yè)出版社,2001 8.《單片機(jī)應(yīng)用技術(shù)選編》 何利民 北京航空航天大學(xué)出版社,1996 9.《單片機(jī)應(yīng)用技術(shù)》 吳國經(jīng) 中國電力出版社,2004 10.《單片機(jī)及接口技術(shù)實(shí)踐教程》 胡健 北京機(jī)械工業(yè)出版社,2002 11.《使用接口技術(shù)》 李廣軍 成都電子科技大學(xué)出版社,1998
第三篇:單片機(jī):交通燈控制系統(tǒng)設(shè)計(jì)
交通燈控制系統(tǒng)設(shè)計(jì)
摘要:本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤、LED 顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有倒計(jì)時(shí)、時(shí)間設(shè)置、緊急情況處理、分時(shí)段調(diào)整信號燈的點(diǎn)亮?xí)r間以及根據(jù)具體情況手動(dòng)控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則
一、方案比較、設(shè)計(jì)與論證 1 電源提供方案
為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案
方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會(huì)使系統(tǒng)復(fù)雜,且可能影響電路電平。方案二:采用單片機(jī)控制模塊提供電源。改方案的優(yōu)點(diǎn)是系統(tǒng)簡明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案
該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能?;谏鲜鲈?,我們考慮了三種方案: 方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號和數(shù)碼字苻,無法勝任題目要求。
方案二:完全采用點(diǎn)陣式LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作;但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數(shù)碼管與點(diǎn)陣LED 相結(jié)合的方法因?yàn)樵O(shè)計(jì)既要求倒計(jì)時(shí)數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看并考慮到現(xiàn)實(shí)情況,用數(shù)碼管與LED燈分別顯示時(shí)間與提示信息。這種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。權(quán)衡利弊,第三種方案可互補(bǔ)一二方案的優(yōu)缺,我們決定采用方案三以實(shí)現(xiàn)系統(tǒng)的顯示功能。3 輸入方案:
題目要求系統(tǒng)能手動(dòng)設(shè)燈亮?xí)r間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴(kuò)展I/O 口及鍵盤,顯示等。該方案的優(yōu)點(diǎn)是:
使用靈活可編程,并且有RAM,及計(jì)數(shù)器。若用該方案,可提供較多I/O 口,但操作起來稍顯復(fù)雜。
方案二: 直接在IO口線上接上按鍵開關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個(gè)按鍵,分別是K1、K2、K3、K4。由于該系統(tǒng)對于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的I/O 口就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及RAM已經(jīng)夠用,故選擇方案二。
二、理論分析與計(jì)算
1.交通燈顯示時(shí)序的理論分析與計(jì)算
對于一個(gè)交通路口來說,能在最短的時(shí)間內(nèi)達(dá)到最大的車流量,就算是達(dá)到了最佳的性能,我們稱在單位時(shí)間內(nèi)多能達(dá)到的最大車流為車流量,用公式:車流量= 車流 / 時(shí)間 來表示。
先設(shè)定一些標(biāo)號如圖2-1 所示。
說明:此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路口燈,左邊為西 路口燈。
圖2-2 所示為一種紅綠燈規(guī)則的狀態(tài)圖,分別設(shè)定為S1、S2、S3、S4,交通燈以這四 的狀態(tài)為一個(gè)周期,循環(huán)執(zhí)行(見圖2-3)。
請注意圖2-1b和圖2-1d,它們在一個(gè)時(shí)間段中四個(gè)方向都可以通車,這種狀態(tài)能在
一定的時(shí)間內(nèi)達(dá)到較大的車流量,效率特別高。
依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于相向的燈的狀態(tài)圖
是一樣的,所以只需寫出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它
們的狀態(tài)在相位上相差180°。因此最終只需寫出一組S1、S2、S3、S4的邏輯狀態(tài)表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應(yīng)的端口送邏輯值。2.交通燈顯示時(shí)間的理論分析與計(jì)算
東西和南北方向的放行時(shí)間的長短是依據(jù)路口的各個(gè)方向平時(shí)的車流量來設(shè)定,并且
S1、S2、S3、S4各個(gè)狀態(tài)保持的時(shí)間之有嚴(yán)格的對應(yīng)關(guān)系,其公式如下所示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標(biāo)準(zhǔn)來改變車輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分
為主干道和次干道,主干道的放行時(shí)間大于次干道的放行時(shí)間,我們設(shè)定值時(shí)也應(yīng)以此為參 考。
三、電路圖及設(shè)計(jì)文件 1.燈控制電路設(shè)計(jì)
由于32個(gè)LED 來實(shí)現(xiàn)紅綠燈狀態(tài),若直接接在單片機(jī)的口線,路口倒計(jì)時(shí)的顯示就不
能實(shí)現(xiàn),所以本次設(shè)計(jì)中采用一種新型的電路如圖3-1 所示。
圖中74LS04的作用是倒相和驅(qū)動(dòng),它輸出的電流大約48mA,實(shí)際測試發(fā)現(xiàn)足以滿足要
求,而且發(fā)光管也能達(dá)到足夠的亮度。
觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。
圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導(dǎo)致邏輯 的錯(cuò)誤。
共四組和上述相同的電路分別代表東西南北四個(gè)方向的紅綠燈,使用兩片74LS04 作為 驅(qū)動(dòng)。
2.倒計(jì)時(shí)顯示電路設(shè)計(jì)
前面已經(jīng)分析過相向的燈的狀態(tài)和倒計(jì)時(shí)都是相同的,所以為了節(jié)省,采用兩組四個(gè)數(shù)碼管
作為倒計(jì)時(shí)的顯示;同時(shí)為了節(jié)省口資源,采用串口顯示的方式驅(qū)動(dòng)數(shù)碼管。見圖3-2 所 示。
四、程序設(shè)計(jì)思路與流程圖 1.主程序流程圖
主程序中主要是一個(gè)死循環(huán),不停的循環(huán)四個(gè)狀態(tài),如圖4-1 所示。
2.按鍵子程序流程圖
它包含倒計(jì)時(shí)調(diào)整和緊急狀態(tài)兩個(gè)狀態(tài)。
主程序中放了一個(gè)按鍵的判斷指令,當(dāng)有按鍵按下的時(shí)候,程序就自動(dòng)的跳轉(zhuǎn)到按鍵子
程序處理。當(dāng)檢測到K2鍵按下的時(shí)候就自動(dòng)返回到主程序。當(dāng)出現(xiàn)緊急的情況的時(shí)候,按下K3或者K4 就切換到緊急狀態(tài),當(dāng)緊急事件處理完畢 的時(shí)候,按下K2,就可以返回正常狀態(tài)。
五、測試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測試
當(dāng)電路連接完畢后,將寫好的測試程序刷寫到芯片內(nèi),K1 和K2分別給端口送高電平和
低電平,通電即可檢測。2.?dāng)?shù)碼管的測試
將串口的和電路板上的接口連接,將寫好的測試程序刷寫到芯片內(nèi),開電源即可測試。
3.整體電路測試
系統(tǒng)上電,刷寫好程序即可開始測試,觀測一個(gè)周期(共計(jì)S1~S4四個(gè)狀態(tài),默認(rèn)140 秒)燈的顯示狀態(tài)是否正常,同時(shí)觀察倒計(jì)的計(jì)數(shù)是否正常。
六、總結(jié)
由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時(shí)的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。
但是在我們設(shè)計(jì)和調(diào)試的過程中,也發(fā)現(xiàn)了一些問題,譬如紅燈和綠燈的切換還不夠迅
速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實(shí)踐中進(jìn)一步完善。附錄 系統(tǒng)總體電路圖
1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環(huán),周而復(fù)始。2.十字路口要有數(shù)字顯示,提示行人把握時(shí)間:當(dāng)某方向綠燈亮?xí)r,置顯示器為24,然后以每秒減1計(jì)數(shù)方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮?xí)r,再次置顯示器為29,并開始減計(jì)數(shù),直到為0,十字路口紅綠燈交換,完成一次工作循環(huán)。
3.可手動(dòng)調(diào)整和自動(dòng)調(diào)整,夜間為黃燈閃耀。下面是一個(gè)單片機(jī)交通燈程序 /*
****************************************************************************************** * *
* Keil C 89S51 交通信號控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
****************************************************************************************** */
#include “reg51.h” #define UINT unsigned int #define ULONG unsigned long #define UCHAR unsigned char /*
信號燈變量
南北方向綠燈
sbit n_bike_g = P1^0;//自行車
sbit n_right_g = P1^1;//右轉(zhuǎn)
sbit n_up_g = P1^2;//直行
sbit n_left_g = P1^3;//左轉(zhuǎn) 調(diào)頭
南北方向紅燈
sbit n_bike_r = P1^4;//自行車
sbit n_right_r = P1^5;//右轉(zhuǎn)
sbit n_up_r = P1^6;//直行
sbit n_left_r = P1^7;//左轉(zhuǎn) 調(diào)頭 南北方向黃燈
sbit n_bike_y = P3^0;//自行車
sbit n_right_y = P3^1;//右轉(zhuǎn)
sbit n_up_y = P3^2;//直行
sbit n_left_y = P3^3;//左轉(zhuǎn) 調(diào)頭
東西方向綠燈
sbit e_bike_g = P2^0;//自行車
sbit e_right_g = P2^1;//右轉(zhuǎn)
sbit e_up_g = P2^2;//直行
東西方向紅燈
sbit e_bike_r = P2^4;//自行車
sbit e_right_r = P2^5;//右轉(zhuǎn)
sbit e_up_r = P2^6;//直行
東西方向黃燈
sbit e_bike_y = P3^4;//自行車
sbit e_right_y = P3^5;//右轉(zhuǎn)
sbit e_up_y = P3^6;//直行
*/ //延時(shí)
void delay(UINT t, UINT s){ while(t){ UINT i;
for(i = 0;i < s;i++){ } t--;} }
//信號燈狀態(tài)
void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3){
P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(150, 65535);}
void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22){ UINT i;
for(i = 0;i < 3;i ++){
P1 = P_P1;P2 = P_P2;delay(5, 65535);P1 = P_P11;P2 = P_P22;delay(5, 65535);}
P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(10, 65535);} //主程序
void main(){
P1 = P2 = P3 = 0x0;while(1){
time_x(0xA5, 0x38, 0x0);
time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);time_x(0x96, 0x52, 0x0);
time_s(0x92, 0x52, 0x4, 0x96, 0x52);time_x(0x5A, 0x52, 0x0);
time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);time_x(0xF0, 0x25, 0x0);
time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);time_x(0xD2, 0x16, 0x0);
time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);} }
給你一個(gè)定時(shí)控制的信號系統(tǒng),我只做的簡單的測試,至于延時(shí)我用的軟件,你自己想辦法。^_^
Dai_Weis 于 2005-5-4 13:43:23 重新給你說明
/*
*********************************************************************************** * *
* Keil C AT89S51 交通信號控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
*********************************************************************************** 開發(fā)說明:
固定時(shí)間信號變換,南北設(shè)置調(diào)頭、左傳、直行、右轉(zhuǎn)、自行車。
東西設(shè)置左傳、直行、右轉(zhuǎn)、自行車。
時(shí)序狀態(tài):
紅 綠 紅 綠
序號 左 前 右 自 左 前 右 自 前 右 自 前 右 自1 0 1 0 0 1 0 1 1 1 1 0 0 0 2 1 0 0 1 0 1 1 0 1 0 1 0 1 0 3 0 1 0 1 1 0 1 0 1 0 1 0 1 0 4 1 1 1 1 0 0 0 0 0 1 0 1 0 1 5 1 1 0 1 0 0 1 0 0 0 1 1 1 0 */
另外修正個(gè)錯(cuò)誤
while(1){
time_x(0xA5, 0x70, 0x0);time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);
材料: 1、89S51 11.0592M 晶振
1K電阻、10UF電容
12個(gè)燈,紅、黃、綠各四個(gè),12個(gè)1K電阻
,十字路口嘛。蜂鳴器一個(gè)。
按鍵一個(gè),按鍵復(fù)位
采用AT89s51型號的單片機(jī),由于交通十字路口的對稱性,所以一個(gè)引腳可以同時(shí)控制兩個(gè)燈,將發(fā)光二極管分別接到P1各個(gè)引腳,在其中加入一個(gè)時(shí)振蕩當(dāng)電路,來控制時(shí)間,在P3.0引腳接入蜂鳴器只黃燈亮的時(shí)候發(fā)出聲響,這里我們讓每次黃燈亮的時(shí)候發(fā)出六聲響,通過C程序的控制就可以實(shí)現(xiàn),每次循環(huán)是10秒。2、9cm*15cm萬用板 1片 單片機(jī)及IC座 1套 12M晶振 1只 22P電容 2只 10uF電容 1只 10K電阻 1只 1K排阻 1只 兩位一體數(shù)碼管 2只 DC座 1只 自鎖開關(guān) 1只
發(fā)光二極管紅綠黃
各4只 按鍵 7只 USB電源線 1條 導(dǎo)線
若干
1、基于51系列單片機(jī)(型號:STC89C52、AT89C51/C52、AT89S51/S52,隨機(jī)選擇,如有特
殊要求請與店主討論)設(shè)計(jì)實(shí)現(xiàn)。(以上幾種單片機(jī)全部為51系列單片機(jī),除了名字不一樣外,功能及應(yīng)用完全一樣,互相
兼容)
2、兩個(gè)兩位一體數(shù)碼管顯示東西、南北方向時(shí)間。
3、四方向各有紅綠黃三顆燈。
4、七個(gè)按鍵操作,分別是:禁止通行、東西通行、南北通行、時(shí)間加、時(shí)間減、切換方向、確認(rèn)。
第四篇:基于單片機(jī)的交通燈設(shè)計(jì)
基于單片機(jī)的交通燈設(shè)計(jì)
設(shè)計(jì)程序:
#include
//共陽極
uchar
code table1[5]={0xf3,0xf5,0xde,0xee,0xf6};/*各種狀態(tài)下紅綠燈段選碼, 狀態(tài)1:A綠燈,B紅燈;狀態(tài)2:A黃燈亮,B紅燈;狀態(tài)3:A紅燈,B綠燈;狀態(tài)4:A紅燈,B黃燈亮;狀態(tài)5:A紅燈,B紅燈;*/ uchar
code tab[4]={0x1E,0x2D,0x4E,0x8D};//數(shù)碼管顯示位選碼 sbit key1=P1^0;//放行A sbit key2=P1^1;//放行B sbit key3=P1^2;//禁止通行
uchar EW=40,SN=30,K1_T=15,K2_T=15,K3_T=20;//初始化交通燈時(shí)間 uchar count;//計(jì)時(shí)中斷次數(shù) uchar i,j;//循環(huán)控制變量 char Timer;//子程序說明語句 void Process();void Display(uchar j);void Delay(uchar a);/**************************主程序**************************/ main(){ IP=0X02;//設(shè)置定時(shí)器中斷為高優(yōu)先級//成為中斷嵌套
TMOD=0x01;//定時(shí)器工作方式
TH0=0x3C;//定時(shí)器初始化
TL0=0xB0;IT0=1;//中斷觸發(fā)方式為下降沿觸發(fā)
EA=1;//CPU開中斷
ET0=1;//開定時(shí)中斷
TR0=1;//啟動(dòng)定時(shí)
EX0=1;//啟動(dòng)外部中斷0 while(1)
{
Process();
} } /*************************交通燈顯示子程序*************************/ void Display(uchar j)//j控制顯示table中連續(xù)位的起始點(diǎn) {
char h,l;
h=Timer/10;//EW通行時(shí)間十位
l=Timer%10;//EW通行時(shí)間個(gè)位
for(i=0;i<4;)//按位顯示通行狀況及時(shí)間 {
P0=table1[j];//通行狀況顯示
P3=tab[i];//位選顯示
i++;
//j++;
if(i%2)//兩位計(jì)時(shí)顯示
{
P2=table[l];
Delay(400);
}
else
{
P2=table[h];
Delay(400);
} } Delay(5);
//設(shè)置掃描時(shí)間
} /*********鍵控*******/ void Keyboard()interrupt 0 using 0 {
if(key1==0)
{ Timer=K1_T;
while(Timer>0)
{
j=0;
Display(0);
//顯示一次
}
if(key2==0)
{
Timer=K2_T;
while(Timer>0)
{
j=2;
Display(j);
}
if(key3==0)
{
Timer=K3_T;
while(Timer>0)
{
j=4;
Display(j);
}
} } /**************************延時(shí)子程序**************************/ void Delay(uchar a)//循環(huán)a次 { uchar x;x=a;while(x--){;} }
/************************TO計(jì)時(shí)中斷服務(wù)程序************************/ void timer0(void)interrupt 1 using 1//T0中斷 { TH0=0x3C;TL0=0xB0;//定時(shí)計(jì)數(shù)初值
count++;//中斷溢出一次count+1 if(count==20){
Timer--;
count=0;//中斷次計(jì)數(shù),count回,倒計(jì)時(shí)時(shí)間
} } /**************************亮燈控制**************************/ void Process(){ Timer=EW;//初始化方向通行時(shí)間
while(Timer>3)//狀態(tài):A綠燈,B紅燈;{
j=0;
Display(j);//調(diào)用顯示函數(shù)
} while(Timer>0)//狀態(tài):A黃燈亮,B紅燈;{
j=1;
Display(j);
} Timer=SN;while(Timer>3)//狀態(tài):A紅燈,B綠燈;{
j=2;
Display(j);} while(Timer>0)//狀態(tài):A紅燈,B黃燈亮;{
j=3;
Display(j);
}
}
電路圖如下:
第五篇:基于單片機(jī)的交通燈控制系統(tǒng)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
基于單片機(jī)的交通燈控制系統(tǒng) 引言
單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域具有廣泛的應(yīng)用。本文設(shè)計(jì)了基于單片機(jī)的交通燈控制系統(tǒng)以AT89C51單片機(jī)為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行。設(shè)計(jì)方案及原理
本系統(tǒng)由AT89C51單片機(jī)、紅、黃、綠LED交通信號燈、共陰極數(shù)碼管、緊急通車開關(guān)等模塊組成該電路具有設(shè)計(jì)簡單,顯示亮度高,能耗小,可靠性高燈特點(diǎn)。其總體設(shè)計(jì)框圖如圖1所示。
復(fù)位電路七段數(shù)碼管倒計(jì)時(shí)顯示電路AT89C51晶振電路A、B車道LED顯示電路按鍵電路
圖1 系統(tǒng)總體設(shè)計(jì)方框圖
2.1 系統(tǒng)設(shè)計(jì)
交通燈控制系統(tǒng)主要控制A,B兩車道的交通,以AT89C51單片機(jī)為核心芯片,通過控制三色LED燈的亮滅來控制各車道的通行;另外通過3個(gè)按鍵來模擬各車道有無車輛的情況和有緊急車輛的情況。根據(jù)設(shè)計(jì)要求,制定總體設(shè)計(jì)思想如下:
(1)用AT89C51單片機(jī)控制交通燈電路,晶振采用12MHz。(2)用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號。
(3)有緊急車輛通過時(shí),按下K3開關(guān)使A、B車道均為紅燈,禁行20s。此時(shí),