找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1365|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

利用51單片機(jī)控制各個(gè)路口紅綠燈及時(shí)間顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1102672 發(fā)表于 2023-12-5 12:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
利用51單片機(jī)控制各個(gè)路口紅綠燈及時(shí)間顯示  

1  系統(tǒng)設(shè)計(jì)
1.1 設(shè)計(jì)要求

1.1.1 設(shè)計(jì)任務(wù)   

利用51單片機(jī)控制各個(gè)路口紅綠燈及時(shí)間顯示。

1.1.2 性能指標(biāo)要求  

1、各方向的紅、綠色信號(hào)燈能按照設(shè)定規(guī)則運(yùn)行;

2、綠燈亮之前,黃燈閃爍5次;

3、紅燈和綠燈倒計(jì)時(shí)間能夠正確顯示;

4、兩干道的車輛不會(huì)會(huì)車沖突。

5、可以擴(kuò)展其他功能(如按鍵設(shè)置時(shí)間,按鍵模擬警車)

1.2 設(shè)計(jì)思路及設(shè)計(jì)框圖

1.2.1設(shè)計(jì)思路

1、各個(gè)路口紅綠燈亮滅的規(guī)則,暫不考慮左轉(zhuǎn)方向;

2、倒計(jì)時(shí)的實(shí)現(xiàn),利用單片機(jī)的定時(shí)器進(jìn)行計(jì)數(shù)得到秒信號(hào);

3、時(shí)間顯示:東西南北四個(gè)方向的時(shí)間一致,當(dāng)東西方向?yàn)?0秒綠燈通行時(shí)間,同時(shí)南北方向?yàn)?0秒紅燈禁止時(shí)間,因此硬件連接時(shí)可考慮東西南北方向可采用同一接法;最后相當(dāng)于2個(gè)數(shù)碼管動(dòng)態(tài)顯示,具體見參考電路框圖。

4、按鍵設(shè)置(擴(kuò)展要求):設(shè)置鍵按一次,設(shè)置主干道通信時(shí)間(即次干道禁止時(shí)間),按第二次,設(shè)置主干道禁止時(shí)間(即次干道通信時(shí)間),按第三次,可作為緊急通信鍵。設(shè)置時(shí)間需要確定,可通過確定鍵實(shí)現(xiàn),也可通過延時(shí)確定,如10秒。當(dāng)然也可根據(jù)需要增加相應(yīng)的按鍵。

1.2.2總體設(shè)計(jì)框圖





2  各個(gè)模塊程序的設(shè)計(jì)
芯片模塊:





按鍵模塊:



12M晶振電路模塊:



復(fù)位端模塊:



交通燈功能模塊:





數(shù)碼管顯示模塊:



3  調(diào)試過程
(1)將下載線連接下載口,即供電的時(shí)候,板子在沒有任何程序進(jìn)入的情況下,裝上芯片后各個(gè)方向的紅黃綠燈都是亮的,但數(shù)碼管沒有任何顯示。

(2)然后將程序下載到單片機(jī)內(nèi),各個(gè)方向的燈開始按照程序所設(shè)置的進(jìn)行亮滅,數(shù)碼管進(jìn)入倒計(jì)時(shí)狀態(tài)。證明硬件沒問題。

(3)通過硬件驗(yàn)證軟件,基本的交通燈功能實(shí)現(xiàn)。

4  功能測(cè)試
4.1 測(cè)試儀器與設(shè)備

萬用表一個(gè)、計(jì)算機(jī)一臺(tái)、USB下載線一根

4.2 性能指標(biāo)測(cè)試

1、各方向的紅、綠色信號(hào)燈能按照設(shè)定規(guī)則運(yùn)行;

2、綠燈亮之前,黃燈閃爍5次;

3、紅燈和綠燈倒計(jì)時(shí)間能夠正確顯示;

4、兩干道的車輛不會(huì)會(huì)車沖突。

5  實(shí)訓(xùn)心得體會(huì)
       單片機(jī)實(shí)訓(xùn)功能要求真是說的容易做的難,以為一步一步畫出原理圖操作后面就很快能完成。等到實(shí)訓(xùn)真正開始的時(shí)候發(fā)現(xiàn)自己突然之間不知道該干嘛,原理圖感覺是沒問題了,程序自己不會(huì)編,單片機(jī)的知識(shí)自己又相當(dāng)薄弱。關(guān)于實(shí)訓(xùn)器件芯片,數(shù)碼管,下載口等等的管腳分布,都需要學(xué)會(huì)自行查找資料。然后這次實(shí)訓(xùn)焊板的過程相比之前簡單,首次用到了萬能板,要點(diǎn)對(duì)點(diǎn)的連接,看著原理圖里線的走向來接跳線,即使電路短接,拆線也方便。其次就是程序編寫階段了,在翻閱單片機(jī)書,老師指導(dǎo)和同學(xué)的幫助下,漸漸有了思路,但是一次次的調(diào)試失敗,關(guān)于中斷,關(guān)于延時(shí)等的知識(shí)運(yùn)用相當(dāng)薄弱,驗(yàn)收的時(shí)候就很難受,還有數(shù)碼管的段暄位選,實(shí)現(xiàn)的原理,沒有做好提前準(zhǔn)備,回答的時(shí)候不會(huì)。將自己寫好的程序燒錄到板子時(shí),看著自己的實(shí)驗(yàn)板實(shí)現(xiàn)基本功能真心感到開心,即使按鍵功能做不出來,結(jié)束后我也會(huì)從新看看,爭取搞懂。這次實(shí)訓(xùn)讓我認(rèn)識(shí)自己的單片機(jī)知識(shí)有多缺乏,暴露出一些在學(xué)習(xí)上的問題,要好好的記住他的原理。希望自己能夠更多的學(xué)習(xí)專業(yè)知識(shí),能夠把課本的知識(shí)運(yùn)用到實(shí)際生活中。


7 附錄
附錄1:電路原理圖





附錄2:程序清單

#include <reg52.h>

#include<stdio.h>

#include<absacc.h>

#define uint unsigned int

#define uchar unsigned char

char code dx516[3] _at_ 0x003b;

uchar data timelist=60;

uchar count=0;

uchar yelltime=0;

uchar intswitch;

uchar data time[4]={60,5,60,5};

uchar data disbuf[4]={0};

uchar n=0;

uchar yellow=0xff;

sbit P3_2=P3^2;

sbit P3_3=P3^3;

sbit P3_4=P3^4;



uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void timer0(void)interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

count++;

yelltime++;

if(yelltime==10)

{

yelltime=0;

yellow=yellow^0x12;



}

if(count==20)

{

count=0;

timelist--;

if(timelist==0)

{

n++;

if(n==4)

n=0;

timelist=time[n];





}

}

}

void dlms(uint x)

{

uint i=x,j;

while(i--)

{

j=100;

while(j--);

}

}

void int0(void)interrupt 0

{

dlms(5);

if(!P3_2)

{

while(!P3_2)

{

dlms(1);

}

dlms(5);

if(P3_2)

{

TR0=!TR0;

if(TR0==1)

{ count=0;

n=0;

timelist=time[n];

}

}

}



}

void int1(void)interrupt 2

{

dlms(5);

if(!P3_3)

{

while(!P3_3)

{

dlms(1);

}

dlms(5);

if(P3_3)

{

if(TR0==1)

{

count=0;

n=0;

timelist=time[n];

}

if(TR0==0)

{

time[0]=time[0]+1;

}

if(time[0]>90)

{

time[0]=10;

}

}

}

}

void time1(void)interrupt 3

{

TH1=0xff;

TL1=0xff;

dlms(5);

if(!P3_4)

{

while(!P3_4)

{ dlms(1);

}

dlms(5);

if(P3_4)

{

if(TR0==1)

{

count=0;

n=2;

timelist=time[n];

}

if(TR0==0)

{

time[2]=time[2]+1;



}

if(time[2]>90)

{

time[2]=10;

}

}

}

}

void disp(void)

{

uchar i,j;

uchar sel;

if(TR0==0)

{

disbuf[0]=time[2]%10;

disbuf[1]=time[2]/10;

disbuf[2]=time[0]%10;

disbuf[3]=time[0]/10;

P2=~0xff;

sel=0x01;

for(i=0;i<4;i++)

{

j=disbuf;

P2=(sel^0xff);

P0=table[j];

dlms(2);

P2=~0xff;

sel=sel<<1;

P1=0x36;

}

}

if(TR0==1)

{

disbuf[0]=timelist%10;

disbuf[1]=timelist/10;

disbuf[2]=timelist%10;

disbuf[3]=timelist/10;

P2=~0xff;

sel=0x01;

for(i=0;i<4;i++)

{

j=disbuf;

P2=(sel^0xff);

P0=table[j];

dlms(2);

P2=~0xff;

sel=sel<<1;

if(n==0)

{

P1=0x33;



}

if(n==1||n==3)

{

P1=yellow;

}

if(n==2)

{

P1=0x1e;

}

}



}

}

main()

{

TCON=0x05;

TMOD=0x51;

TH0=-50000/256;

TL0=-50000%256;

TH1=0xff;

TL1=0xff;

EA=1;

ET0=1;

EX0=1;

ET1=1;

EX1=1;

TR1=1;

TR0=1;

while(1)

{

disp();

}

}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表