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

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

基于51單片機(jī)交通燈仿真_緊急開關(guān)+黃燈倒計時+可調(diào)時間proteus仿真+C語言代碼+報告

10/03 14:04
2109
服務(wù)支持:
技術(shù)交流群

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

虛擬商品不可退

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

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

仿真圖proteus 7.8

程序編譯器:keil 4/keil 5

編程語言:C語言

設(shè)計編號:J000

功能說明:

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

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

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

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

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

??開題報告

內(nèi)容要求:

一、 任務(wù)

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

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

image-20220827223845964

??仿真圖(提供源文件):

image-20220903202521141

image-20220903202531050

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

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

??主控制器選擇

單片機(jī)(Microcontrollers)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。從上世紀(jì)80年代,由當(dāng)時的4位、8位單片機(jī),發(fā)展到現(xiàn)在的300M的高速單片機(jī)。本文的單片機(jī)特指51單片機(jī),具體芯片型號是STC89C52RC。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51單片機(jī)的一種具體芯片型號。

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

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

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

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

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

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

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

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

??時鐘及復(fù)位電路

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

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

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

??指示燈及倒計時模塊

(1)指示燈模塊:

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

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

??倒計時模塊:

利用兩個74HC573鎖存器驅(qū)動四個兩位數(shù)碼管,因為南北方向和東北方向的倒計時時間是一樣的,所以倒計時實(shí)際上只有兩個顯示。

img

??程序

image-20220903202729067

??軟件主流程框架

image-20220828100640968

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

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

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

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

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

??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;//綠燈時間和紅燈時間,紅燈要比綠燈時間長
uchar index=0;
enum eStaSysterm StaSysterm=NormalRun;

void main()
{
	EA=1;						  		//開總中斷
	InintTimer0();				  		//初始化定時器0
	while(1)
	{	
		LEDScan();				  		//數(shù)碼管即LED掃描
		KeyDriver();			  		//鍵盤驅(qū)動掃描
		if(flag1s)
		{
			flag1s=0;
			NS_time--;			  		//紅綠燈倒計時時間減
			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ù)值不減一	
}
void LEDScan()
{
	 if(StaSysterm==NormalRun)			 //正常運(yùn)行
	 {
		if(NS_time==0 || WE_time==0)//當(dāng)東西或者南北方向通行時間倒數(shù)到0,切換狀態(tài)
		{
			switch(index)				 //改變紅綠燈的狀態(tài),狀態(tài)機(jī)
			{
				case 0:
				{
					index=1;
					NS_time=GreenTime;//南北方向綠燈通行時間
					WE_time=RedTime;//東西綠燈方向通行時間
					P2=0X09;	//需要亮的燈轉(zhuǎn)換為二進(jìn)制位0000 1001,對應(yīng)P2口的P2^0和P2^3,
					          //對應(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)整紅綠燈時間
	{
		index=0;
		NS_time=0;
		WE_time=0;	 //重新初始化紅綠燈并運(yùn)行
		UrgentScan();
	}
}

??設(shè)計報告

image-20220903202739452

??資料清單&網(wǎng)盤鏈接

image-20220903202745825

??百度網(wǎng)盤鏈接

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

相關(guān)推薦

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