加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的交通燈_緊急開(kāi)關(guān)+黃燈倒計(jì)時(shí)+可調(diào)時(shí)間

10/10 16:49
946
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買成功”頁(yè)面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買后不支持退換且無(wú)法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

仿真圖proteus 7.8

程序編譯器:keil 4/keil 5

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):J000

功能說(shuō)明:

采用51單片機(jī)以及單片機(jī)最小系統(tǒng)和三極管驅(qū)動(dòng)電路以及外圍的按鍵和數(shù)碼管顯示等部件,設(shè)計(jì)一個(gè)基于單片機(jī)的交通燈設(shè)計(jì)。

1.四路交通燈,帶有紅綠燈倒計(jì)時(shí),綠燈倒計(jì)時(shí)結(jié)束后轉(zhuǎn)黃燈5秒,再轉(zhuǎn)紅燈。

2.緊急情況下按鍵緊急按鈕,四路黃燈快閃。

3.可以動(dòng)態(tài)設(shè)置紅綠燈時(shí)間。

涉及知識(shí)點(diǎn):按鍵掃描,定時(shí)器,數(shù)碼管驅(qū)動(dòng)。

開(kāi)題報(bào)告

內(nèi)容要求:

一、 任務(wù)

近年來(lái)隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)技術(shù)日益更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個(gè)核心部件來(lái)使用,僅單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu)軟硬件結(jié)合,加以完善。

十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來(lái)實(shí)現(xiàn)這井然秩序呢?靠的就是交通信號(hào)燈的自動(dòng)指揮系統(tǒng)。交通信號(hào)燈控制方式很多。本系統(tǒng)采用STC89C52單片機(jī)以及單片機(jī)最小系統(tǒng)和三極管驅(qū)動(dòng)電路以及外圍的按鍵和數(shù)碼管顯示等部件,設(shè)計(jì)一個(gè)基于單片機(jī)的交通燈設(shè)計(jì)。設(shè)計(jì)通過(guò)兩位一體共陰極數(shù)碼管顯示,并能通過(guò)按鍵對(duì)定時(shí)進(jìn)行設(shè)置。本系統(tǒng)實(shí)用性強(qiáng)、操作簡(jiǎn)單、擴(kuò)展功能強(qiáng)。設(shè)計(jì)通過(guò)STC89C52單片機(jī)以及單片機(jī)最小系統(tǒng)和三極管驅(qū)動(dòng)數(shù)碼管(數(shù)碼管更亮,白天看的很清楚)以及外圍的按鍵和數(shù)碼管顯示等部件,數(shù)碼管倒計(jì)時(shí)顯示時(shí)間。

image-20220827223845964

仿真圖(提供源文件):

image-20220903202521141

image-20220903202531050

系統(tǒng)硬件設(shè)計(jì)

根據(jù)上面的功能要求,硬件系統(tǒng)主要有單片機(jī)模塊、指示燈模塊和倒計(jì)時(shí)顯示模塊。各模塊選擇如下

主控制器選擇

單片機(jī)(Microcontrollers)是一種集成電路芯片,是采用超大規(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)用。從上世紀(jì)80年代,由當(dāng)時(shí)的4位、8位單片機(jī),發(fā)展到現(xiàn)在的300M的高速單片機(jī)。本文的單片機(jī)特指51單片機(jī),具體芯片型號(hào)是STC89C52RC。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51單片機(jī)的一種具體芯片型號(hào)。

AT89C51是AT89C5X系列單片機(jī)的典型產(chǎn)品,它采用ATMEL的高密非易失存儲(chǔ)技術(shù)制造并和工業(yè)標(biāo)準(zhǔn)MCS—51指令集引腳結(jié)構(gòu)兼容。通過(guò)在單塊芯片上組合通用的CPL1和快閃存儲(chǔ)器,ATMEL公司生產(chǎn)的AT89C52是一強(qiáng)勁的微型計(jì)算機(jī),它對(duì)許多嵌入式控制的應(yīng)用,提供了一種高度靈活和成本低的解決辦法。芯片AT89C52是ATMEL公司生產(chǎn)的帶2K字節(jié)快閃存儲(chǔ)器的8位單片機(jī)。

? 該單片機(jī)還具有體積小,價(jià)格低等特點(diǎn)。AT89C51單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線地址總線控制總線等三大總線。

系統(tǒng)硬件結(jié)構(gòu)圖

中央處理器(CPU)是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。

AT89C51內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問(wèn),而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個(gè),可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。

AT89C51共有4096個(gè)8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。 AT89C51有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。

AT89C51共有4組8位I/O口(P0、P1、P2或P3),用于對(duì)外部數(shù)據(jù)的傳輸。 AT89C51內(nèi)置一個(gè)全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。

AT89C51具備較完善的中斷功能,有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿足不同的控制要求,并具有2級(jí)的優(yōu)先級(jí)別選擇。

時(shí)鐘及復(fù)位電路

AT89C51內(nèi)置最高頻率達(dá)12MHz的時(shí)鐘電路,用于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,但AT89C51單片機(jī)需外置振蕩電容

本設(shè)計(jì)中,使單片機(jī)運(yùn)行在最小系統(tǒng)。

時(shí)鐘電路由兩個(gè)20nF的微調(diào)電容和一個(gè)晶振組成。AT89C51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個(gè)引腳接石英晶體振蕩器和微調(diào)電容,構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。本系統(tǒng)采用12Hz的振蕩器,機(jī)器周期為1us。復(fù)位操作有上電自動(dòng)復(fù)位、按鍵電平復(fù)位和外部脈沖復(fù)位三種方式。

指示燈及倒計(jì)時(shí)模塊

(1)指示燈模塊:

設(shè)計(jì)電路中每個(gè)路口的控制信號(hào)燈應(yīng)有三個(gè),即紅燈、黃燈、綠燈各一個(gè)。因此,本電路的設(shè)計(jì)中應(yīng)用到紅燈、黃燈、綠燈個(gè)四個(gè)。同一方向的兩個(gè)路口的同一顏色指示燈是同時(shí)亮滅,為簡(jiǎn)化電路,可讓這兩個(gè)燈接同一引腳。這樣可用P1口控制所有的指示燈。

按照設(shè)計(jì),指示燈采用紅/綠/黃三種發(fā)光二極管。該組件及其與單片機(jī)引腳的接法如下:

倒計(jì)時(shí)模塊:

利用兩個(gè)74HC573鎖存器驅(qū)動(dòng)四個(gè)兩位數(shù)碼管,因?yàn)槟媳狈较蚝蜄|北方向的倒計(jì)時(shí)時(shí)間是一樣的,所以倒計(jì)時(shí)實(shí)際上只有兩個(gè)顯示。

img

程序

image-20220903202729067

軟件主流程框架

image-20220828100640968

? 開(kāi)機(jī)上電便處于正常運(yùn)行狀態(tài),南北方向通行30秒后變?yōu)闁|西方向通行30秒,如此60秒循環(huán)一次,使得東西方向和南北方向交替通行。

? 顯示系統(tǒng)則顯示到下一次改變通行方向所剩的時(shí)間,利于司機(jī)調(diào)整車輛狀況。每到通行方向轉(zhuǎn)換時(shí),正在通行的方向綠燈熄滅,變?yōu)辄S燈閃爍,提醒司機(jī)注意通行方向的改變,避免不必要的危險(xiǎn)。

? 本設(shè)計(jì)支持動(dòng)態(tài)修改東西南北方向的紅綠燈時(shí)間。短按設(shè)置/退出設(shè)計(jì)進(jìn)入修改模式。先修改南北方向綠燈時(shí)間,再短按修改東西方向紅燈時(shí)間,按第四個(gè)按鍵保存設(shè)置的時(shí)間。

? 緊急情況下,可以通過(guò)按鍵設(shè)置四方向黃燈。

? 延時(shí)方法可以有兩種,一種是利用MCS-51內(nèi)部定時(shí)器才生溢出中斷來(lái)確定1秒的時(shí)間,另一種是采用軟延時(shí)的方法。本程序的倒計(jì)時(shí)采用軟件延時(shí)。

main函數(shù)

以下是主函數(shù)

#define _MAIN_C
#include "use.h"
#include "main.h"
#include "time.h"
#include "key.h"
bit flag1s;	 
uchar count1s,NS_time,WE_time;
uchar GreenTime=30,RedTime=35;//綠燈時(shí)間和紅燈時(shí)間,紅燈要比綠燈時(shí)間長(zhǎng)
uchar index=0;
enum eStaSysterm StaSysterm=NormalRun;

void main()
{
	EA=1;						  		//開(kāi)總中斷
	InintTimer0();				  		//初始化定時(shí)器0
	while(1)
	{	
		LEDScan();				  		//數(shù)碼管即LED掃描
		KeyDriver();			  		//鍵盤驅(qū)動(dòng)掃描
		if(flag1s)
		{
			flag1s=0;
			NS_time--;			  		//紅綠燈倒計(jì)時(shí)時(shí)間減
			WE_time--;
		}	
	}
}
void InintTimer0()
{
	TMOD=0X01;
	TH0=0X4C;
	TL0=0X00;
	ET0=1;
	TR0=1;
}
void Timer0() interrupt 1
{
	TH0=0XBB;
	TL0=0X00;
	KeyScan();
	if(++count1s<50)	return;
	count1s=0;
	if(StaSysterm==NormalRun) flag1s=1;	 //非正常運(yùn)行時(shí),不紅綠燈數(shù)值不減一	
}
void LEDScan()
{
	 if(StaSysterm==NormalRun)			 //正常運(yùn)行
	 {
		if(NS_time==0 || WE_time==0)//當(dāng)東西或者南北方向通行時(shí)間倒數(shù)到0,切換狀態(tài)
		{
			switch(index)				 //改變紅綠燈的狀態(tài),狀態(tài)機(jī)
			{
				case 0:
				{
					index=1;
					NS_time=GreenTime;//南北方向綠燈通行時(shí)間
					WE_time=RedTime;//東西綠燈方向通行時(shí)間
					P2=0X09;	//需要亮的燈轉(zhuǎn)換為二進(jìn)制位0000 1001,對(duì)應(yīng)P2口的P2^0和P2^3,
					          //對(duì)應(yīng)仿真圖的綠燈L0和紅燈L3亮。
				}break;
				case 1:
				{
					index=2;
					NS_time=RedTime-GreenTime;
					P2=0X0A;	
				}break;
				case 2:
				{
					index=3;
					NS_time=RedTime;
					WE_time=GreenTime;
					P2=0X24;	
				}break;
				case 3:
				{
					index=0;
					WE_time=RedTime-GreenTime;
					P2=0X14;	
				}break;
				default:break;
			}
		}
		Seg_Display(NS_time/10,0);
		Seg_Display(NS_time%10,1);
		Seg_Display(WE_time/10,2);
		Seg_Display(WE_time%10,3);
	}
	else if(StaSysterm==UrgentRun)
	{								   //緊急情況運(yùn)行
		P2=0x12;
		Delayms(200);
		P2=0x00;
		Delayms(200);
	}
	else							   //設(shè)置調(diào)整紅綠燈時(shí)間
	{
		index=0;
		NS_time=0;
		WE_time=0;	 //重新初始化紅綠燈并運(yùn)行
		UrgentScan();
	}
}

設(shè)計(jì)報(bào)告

image-20220903202739452

資料清單

image-20220903202745825

資料下載鏈接

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

相關(guān)推薦

電子產(chǎn)業(yè)圖譜