導航:首頁 > 操作系統 > 單片機交通燈程序設計圖

單片機交通燈程序設計圖

發布時間:2022-05-19 08:36:06

A. 求51單片機控制的交通燈電路圖

一、設計任務與要求

1.設計一個十字路口的交通燈控制電路,要求甲車道和乙車道兩條交叉道路上的車輛交替運行,每次通行時間都設為25秒;
2.要求黃燈先亮5秒,才能變換運行車道;
3.黃燈亮時,要求每秒鍾閃亮一次 。

二、實驗預習要求
1.復習數字系統設計基礎。
2.復習多路數據選擇器、二進制同步計數器的工作原理。
3.根據交通燈控制系統框圖,畫出完整的電路圖。

三、設計原理與參考電路

1.分析系統的邏輯功能,畫出其框圖
交通燈控制系統的原理框圖如圖12、1所示。它主要由控制器、定時器、解碼器和秒脈沖信號發生器等部分組成。秒脈沖發生器是該系統中定時器和控制器的標准時鍾信號源,解碼器輸出兩組信號燈的控制信號,經驅動電路後驅動信號燈工作,控制器是系統的主要部分,由它控制定時器和解碼器的工作。圖中:
TL: 表示甲車道或乙車道綠燈亮的時間間隔為25秒,即車輛正常通行的時間間隔。定時時間到,TL=1,否則,TL=0。
TY:表示黃燈亮的時間間隔為5秒。定時時間到,TY=1,否則,TY=0。
ST:表示定時器到了規定的時間後,由控制器發出狀態轉換信號。由它控制定時器開始下個工作狀態的定時。

圖12、1 交通燈控制系統的原理框圖 2.畫出交通燈控制器的ASM(Algorithmic State Machine,演算法狀態機)

(1)圖甲車道綠燈亮,乙車道紅燈亮。表示甲車道上的車輛允許通行,乙車道禁止通行。綠燈亮足規定的時間隔TL時,控制器發出狀態信號ST,轉到下一工作狀態。
(2)甲車道黃燈亮,乙車道紅燈亮。表示甲車道上未過停車線的車輛停止通行,已過停車線的車輛繼續通行,乙車道禁止通行。黃燈亮足規定時間間隔TY時,控制器發出狀態轉換信號ST,轉到下一工作狀態。
(3)甲車道紅燈亮,乙車道黃燈亮。表示甲車道禁止通行,乙車道上的車輛允許通行綠燈亮足規定的時間間隔TL時,控制器發出狀態轉換信號ST,轉到下一工作狀態。
(4)甲車道紅燈亮,乙車道黃燈亮。表示甲車道禁止通行,乙車道上位過縣停車線的車輛停止通行,已過停車線的車輛停止通行,已過停車線的車輛繼續通行。黃燈亮足規定的時間間隔TY時,控制器發出狀態轉換信號ST,系統又轉換到第(1)種工作狀態。
交通燈以上4種工作狀態的轉換是由控制器器進行控制的。設控制器的四種狀態編碼為00、01、11、10,並分別用S0、S1、S3、S2表示,則控制器的工作狀態及功能如表12、1所示,控制器應送出甲、乙車道紅、黃、綠燈的控制信號。為簡便起見,把燈的代號和燈的驅動信號合二為一,並作如下規定:
表12、1 控制器工作狀態及功能
控制狀態 信號燈狀態 車道運行狀態
S0(00) 甲綠,乙紅 甲車道通行,乙車道禁止通行
S1(01) 甲黃,乙紅 甲車道緩行,乙車道禁止通行
S3(11) 甲紅,乙綠 甲車道禁止通行,甲車道通行
S2(10) 甲紅,乙黃 甲車道禁止通行,甲車道緩行
AG=1:甲車道綠燈亮;
BG=1:乙車道綠燈亮;
AY=1:甲車道黃燈亮;
BY=1:乙車道黃燈亮;
AR=1:甲車道紅燈亮;
BY=1:乙車道紅燈亮;
由此得到交通燈的ASM圖,如 圖12、2所示。設控制器的初始狀態為S0(用狀態框表示S0),當S0的持續時間小於25秒時,TL=0(用判斷框表示TL),控制器保持S0不變。只有當S0的持續時間等於25秒時,TL=1,控制器發出狀態轉換信號ST(用條件輸出框表示ST),並轉換到下一個工作狀態。依此類推可以弄懂ASM圖所表達的含義。

3.單元電路的設計
(1)定時器
定時器由與系統秒脈沖(由時鍾脈沖產生器提供)同步的計數器構成,要求計數器在狀態信號ST作用下,首先清零,然後在時鍾脈沖上升沿作用下,計數器從零開始進行增1計數,向控制器提供模5的定時信號TY和模25的定時信號TL。
計數器選用集成電路74LS163進行設計較簡便。74LS163是4位二進制同步計數器,它具有同步清零、同步置數的功能。74LS163的外引線排列圖和時序波形圖如圖12、3所示,其功能表如表12、2所示。圖中, 是低電平有效的同步清零輸入端, 是低電平有效才同步並行置數控制端,CTp、CTT是計 圖12、2 交通燈的ASM圖數控制端,CO是進位輸出端,D0~D3是並行數據輸入端,Q0~Q 3是數據輸出端。由兩片74LS163級聯組成的定時器電路如圖12、4所示。電路的工作原理請自行分析。

(a)

圖12、3 74LS163的外引線排列圖和時序波形圖

(2)控制器
控制器是交通管理的核心,它應該能夠按照交通管理規則控制信號燈工作狀態的轉換。從ASM圖可以列出控制器的狀態轉換表,如表12、3所示。選用兩個D觸發器FF1、FFO做為時序寄存器產生 4種狀態,控制器狀態轉換的條件為TL和TY,當控制器處於Q1n+1Q0n+1= 00狀態時,如果TL= 0,則控制器保持在00狀態;如果,則控制器轉換到Q1n+1Q0n+1= 01狀態。這兩種情況與條件TY無關,所以用無關項"X"表示。其餘情況依次類推,同時表中還列出了狀態轉換信號ST。

圖12、4 定時器電路圖

表12、2 74LS163功能表
|

表12、3 控制器狀態轉換表

根據表12、3、可以推出狀態方程和轉換信號方程,其方法是:將Q1n+1、Q0n+1和 ST為1的項所對應的輸人或狀態轉換條件變數相與,其中"1"用原變數表示,"0"用反變數表示,然後將各與項相或,即可得到下面的方程:

根據以上方程,選用數據選擇器 74LS153來實現每個D觸發器的輸入函數,將觸發器的現態值( )加到74LS153的數據選擇輸入端作為控制信號.即可實現控制器的功能。控制器的邏輯圖如圖12、5所示。圖中R、C構成上電復位電路 。

圖 12、5控制器邏輯圖

(3)解碼器
解碼器的主要任務是將控制器的輸出 Q1、 Q0的4種工作狀態,翻譯成甲、乙車道上6個信號燈的工作狀態。控制器的狀態編碼與信號燈控制信號之間的關系如表 12、4所示。實現上述關系的解碼電路請讀者自行設計。

四、實驗儀器設備
1. 數字電路實驗箱
2. 集成電路74LS74 1片,74LS10 1片,74LS00 2片,74LS153 2片,74LS163 2片,NE555 1片
3. 電阻 51KΩ 1隻,200Ω 6隻
4. 電容 10Uf 1隻
5. 其它 發光二極體 6隻

五、實驗內容及方法

表12、4控制器狀態編碼與信號燈關系表

狀態 AG AY AR BG BY BR
00 1 0 0 0 0 1
01 0 1 0 0 0 1
10 0 0 1 1 0 0
11 0 0 1 0 1 0

1.設計、組裝解碼器電路,其輸出接甲、乙車道上的6隻信號燈(實驗時用發光二極體代替),驗證電路的邏輯功能。
2.設計、組裝秒脈沖產生電路。
3.組裝、調試定時電路。當 CP信號為 1Hz正方波時,畫出CP、 Q0、 Q1、 Q2、Q3、Q4、TL.、TY的波形,並注意它們之間一的時序關系。

4.組裝、調試控制器電路。
5.完成交通燈控制電路的聯調,並測試其功能。

B. 單片機控制的交通燈

題目 交通燈控制系統的設計 一、課程設計的目的與要求 1、課程設計目的: (1)進一步理解和消化書本知識,運用所學知識和技能進行簡單的設計。 (2)通過課程設計提高應用能力,分析問題和解決問題的能力。 (3)培養查閱資料的習慣,訓練和提高自學,獨立思考的能力。 2、課程設計要求 交通燈控制系統的設計 1) 掌握在單片機系統中擴展簡單I/O介面的方法。 2) 掌握數據輸出程序的設計方法。 3) 掌握模擬交通燈控制的實現方法。 4) 掌握外部中斷技術的基本使用方法。 5) 掌握中斷處理程序的編程方法。 從課程設計的目的出發,通過設計工作的各個環節,達到以下要求: (1)能夠正確理解課程設計的題目和意義,全面思考問題。 (2)運用科學合理的方法,認真按時完成。 二、課程設計課題的分析 1、電路的設計 1)原理 要完成本實驗,首先必須了解交通燈的亮滅規律。本實驗需要用到試驗箱上八個發光二極體中的六個,即紅、綠、黃各兩個。將L1(紅)、L2(綠)、L3(黃)作為東西方向的指示燈,將L5(紅)、L6(綠)、L7(黃)作為南北方向的指示燈。交通燈的亮滅規律為:初始態是兩個路口的紅燈全亮,之後,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間後,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次後,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間後,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次後,再切換到東西路口方向,重復上述過程。 各發光二極體的陽極通過保護電阻接到+5V的電源上,陰極接到輸入端上,因此使其點亮使相應使相應輸入端為低電平。 當有急救車到達時,兩個方向上的紅燈亮,以便讓急救車通過,假設急救車通過路口的時間為10秒,急救車通過後,交通燈恢復中斷前的狀態。本程序以單次脈沖為中斷申請,表示有急救車通過,單次脈沖輸出端P-接CPU板上的INT0。 2)、硬體電路圖 圖1—1 交通燈控制系統的硬體接線圖 74LS273的輸出00—07接發光二極體L1—L8,74LS273的片選CS273接片選信號CS2,此時74LS273的片選地址為CFA0—CFA7之間任選。 3)、程序流程圖 主程序流程 圖1—2 主程序軟體流程圖 中斷程序流程圖 三、課程設計的結果 1、程序 NAME JIAOTONGGENG OUTPORT EQU 0CFB0H ;埠地址 SAVE EQU 55H ;SAVE保存從埠CFA0輸出的數據 CSEG AT 0000H LJMP START CSEG AT 4003H LJMP INT CSEG AT 4100H START: SETB IT0 ;中斷程序初始化 SETB EX0 SETB EA MOV A,#11H ;置首顯示碼,兩紅燈全亮 MOV SAVE,A ;保存 ACALL DISP ;顯示輸出 ACALL DE3S ;延時3秒 LLL: MOV A,#12H ;東西路口綠燈亮,南北路口紅燈亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延時10秒 MOV A,#10H ;東西路口綠燈滅 MOV SAVE,A ACALL DISP MOV R2,#05H ;東西路口黃燈閃爍5次 TTT: MOV A,#14H MOV SAVE,A ACALL DISP ACALL DE02S ;延時0.2秒 MOV A,#10H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,TTT MOV A,#11H ;紅燈全亮 MOV SAVE,A ACALL DISP ACALL DE02S ;延時0.2秒 MOV A,#21H ;東西路口紅燈亮,南北路口綠燈亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延時10秒 MOV A,#01H ;南北路口綠燈滅 MOV SAVE,A ACALL DISP MOV R2

C. 需要用單片機實現交通燈程序、匯編

單片機交通燈控制器的設計
一. 設計任務
在一十字路口設置交通燈,並用單片機對其進行合理的控制。
時間 方向 控制要求
白天 東西 綠燈 黃燈 紅燈
南北 紅燈 綠燈 黃燈
夜晚 東西 黃燈
南北 黃燈
二. 總體設計方案
現在流行的一種設計為兩主幹線相交的十字路。本設計採用一主幹道(南北方向),一從幹道(東西方向)的路口,即主幹道的通行時間為從幹道的2倍。在正常情況下,兩幹道的交通燈按圖1進行轉換,並以倒計數的方式將剩餘時間顯示在每個幹道對應的兩位LED上;另發揮部分為當出現緊急情況時,路口的交通燈全為紅燈,緊急情況解除時,恢復到原來的狀態。其具體狀態如圖1。
狀態 持續時間/S 南北方向 東西方向 控制碼
綠 黃 紅 綠 黃 紅
1 40 亮 滅 滅 滅 滅 亮 01111110B
2 5 滅 亮 滅 滅 滅 亮 10111110B
3 20 滅 滅 亮 亮 滅 滅 11001111B
4 5 滅 滅 亮 滅 亮 滅 11011101B
5 按緊急鍵 滅 滅 亮 滅 滅 亮 11011110B
6 按夜晚鍵 滅 亮 滅 滅 亮 滅 01111100B
7 按恢復鍵 恢復 恢復 恢復 恢復 恢復 恢復 恢復原來
其系統框圖如圖2。
三.硬體電路的設計
1. 單片機系統
單片機系統採用atmel公司的AT89C51晶元,晶振選用6MHZ,電源電壓採用5V。其總體系統電路圖見圖3。
2. 信號燈與按鈕電路的設計
信號燈採用發光二極體組成,分紅黃綠三種顏色。該系統用於控制信號燈的輸出線路有六條,按鈕輸出線有三條,應用AT89C51的P2.7,P3口來實現上述連接。3個按鈕一端通過上拉電阻連接到電源,並輸入單片機,另一端接地,這樣未按下時,輸入是高電平,反之,為低電平。採用軟體消抖。
3. LED顯示電路
用LED顯示器共有4位,需8位輸出口用於位選輸出,分別選用AT89C51的P1,P2口,驅動電路採用晶元7407驅動器。

四.軟體設計
本系統的軟體包括主程序,顯示程序和定時器溢出中斷程序三部分。
1. 主程序:設置堆棧,定時器初始化,中斷系統初始化,顯示緩沖區賦初值,設置狀態標志,狀態切換。主程序流程圖見圖4。
2. 中斷服務程序
其功能主要包括:不同狀態下的時間計時,狀態的循環切換,更新顯示等,其流程圖見圖5。
現將內部數據存儲器分配如下:
(1) 60H~7FH:堆棧;
(2) 5CH~5FH:顯示緩沖區;
(3) 5BH:定時溢出次數計數;
(4) 5AH:秒計數單元;
(5) 20H:狀態標志單元;
(6) 其他:數據緩沖區。
定義狀態標志位:
(1) 00H:狀態1標志,為「1」時表明當前運行於狀態1;
(2) 01H:狀態2標志,為「1」時表明當前運行於狀態2;
(3) 02H:狀態3標志,為「1」時表明當前運行於狀態3;
(4) 03H:狀態4標志,為「1」時表明當前運行於狀態4;
具體程序如下:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T01NT
MAIN:MOV SP,#5FH
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB 00H
CLR 01H
CLR 02H
CLR 03H
MOV 5BH,#0
MOV 5AH,#40
MOV 5CH,#4
MOV 5DH,#0
MOV 5EH,#4
MOV 5FH,#0
SETB TR0
MOV IE,#82H
M1:ACALL DIR
JNB P3.2,M2
JINB P3.3 ,M3
SJMP M1
M2:ACALL DIR
ACALL DIR
ACALL DIR
ACALL DIR
JB P3.2,M1
CLR TR0
MOV P3,#0DEH
M21:ACALL DIR
JNB P3.2,M21
SJMP M1
M3:ACALL DIR
ACALL DIR
ACALL DIR
ACALL DIR
JB P3.3,M1
JB 00H,M31
MOV P3,#7EH
SJMP M34
M31:JB 01H,M32
MOV P3,#0BEH
SJMP M34
M32:JB 02H,M33
MOV P3,#0CFH
SJMP M34
M33:MOV P3,#0DDH
M34:SETB TR0
M35:ACALL DIR
JNB P3.3,M21
SJMP M1
T01NT:PUSH ACC
PUSH PSW
MOV PSW,#08H
MOV TL0,#0B0H
MOV TH0,#3CH
INC 5BH
MOV A,5BH
CJNE A,#10,T0ED
MOV 5BH,#0
DEC 5AH
MOV A,5AH
MOV B,#10
DIV AB
MOV 5CH,A
MOV 5DH,B
MOV 5EH,A
MOV 5FH,B
MOV A,5AH
JNZ T0ED
JNB 00H,T01
CLR 00H
SETB 01H
MOV P3,#0BEH
MOV 5CH,#0
MOV 5DH,#5
MOV 5EH,#0
MOV 5FH,#5
MOV 5AH,#5
SJMP T0ED
T01:JNB 01H,T02
CLR 01H
SETB 02H
MOV P3,#0CFH
MOV 5CH,#2
MOV 5DH,#0
MOV 5EH,#2
MOV 5FH,#0
MOV 5AH,#20
SJMP T0ED
T02:JNB 02H,T03
CLR 02H
SETB 03H
MOV P3,#0DDH
MOV 5CH,#0
MOV 5DH ,#5
MOV 5EH,#0
MOV 5FH,#5
MOV 5AH,#5
SJMP T0EDH
T03:CLR 03H
SETB 00H
MOV P3,#7EH
MOV 5CH,#4
MOV 5DH,#0
MOV 5EH,#4
MOV 5FH,#0
MOV 5AH,#40
T0ED:POP PSW
POP ACC
RETI

顯示子程序:
DIR:MOV R5,#4
MOV R2,#01H
MOV R0,#5CH
DIR1:MOV A,@R0
ADD A#
MOVC A,@A+PC
MOV P1,A
MOV P2,R2
INC R0
MOV A,R2
RL A
MOV R2,A
ACALL DL
DJNZ R5,DIR1
RET
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,67H
END

D. 用8051單片機做一交通信號燈控制裝置

摘要
近年來隨著科技的飛速發展,單片機的應用正在不斷地走向深入,同時帶動傳統控制檢測日新月益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬體結構,以及針對具體應用對象特點的軟體結合,加以完善。交通信號燈的出現,使交通得以有效管制,對於疏導交通流量、提高道路通行能力,減少交通事故有明顯效果。本系統採用單片機AT89C51為中心器件來設計交通燈控制器,系統實用性強、操作簡單、擴展性強。
目錄

一.設計任務…………………………

二.交通燈的設計程序框圖………………

三.交通燈程序的主程序 ………………

四.系統硬體電路的設計……………………

五.原理圖………………

六.檢測與調試…………………………….

七.總結與體會……………………………….

八.致謝……………………………….

E. c51單片機c語言交通燈的程序

Proteus模擬原理圖:

程序如下:

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar data buf[4];

uchar data sec_dx=20;//東西數默認

uchar data sec_nb=30;//南北默認值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定時器中斷次數

sbit k1=P1^6;//定義5組開關

sbit k2=P1^7;

sbit k3=P2^7;

sbit k4=P3^0;

sbit k5=P3^1;

sbit Yellow_nb=P2^5; //南北黃燈標志

sbit Yellow_dx=P2^2; //東西黃燈標志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//燈狀態循環標志

bit set=1;//調時方向切換鍵標志

uchar code table[11]={ //共陰極字型碼

0x3f, //--0

0x06, //--1

0x5b, //--2

0x4f, //--3

0x66, //--4

0x6d, //--5

0x7d, //--6

0x07, //--7

0x7f, //--8

0x6f, //--9

0x00 //--NULL

};

//函數的聲明部分

void delay(int ms);//延時子程序

void key();//按鍵掃描子程序

void key_to1();//鍵處理子程序

void key_to2();

void key_to3();

void display();//顯示子程序

void logo(); //開機LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 開始默認狀態,東西綠燈,南北黃燈

sec_nb=sec_dx+5;

while(1)

{

key(); //調用按鍵掃描程序

display(); //調用顯示程序

Buzzer();

}

}

//函數的定義部分

void key() //按鍵掃描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{

TR0=1; //啟動定時器

Buzzer_Indicate=0;

sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}

if(k4!=1)

{

delay(5);

if(k4!=1)

{

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)

key_to3();

}

}

}

void display() //顯示子程序

{

buf[1]=sec_dx/10; //第1位 東西秒十位

buf[2]=sec_dx%10; //第2位 東西秒個位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒個位

P1=0xff; // 初始燈為滅的

P0=0x00;

P1=0xfe; //片選LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd; //片選LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb; //片選LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]]; //片選LCD4

delay(1);

}

void time0(void) interrupt 1 using 1 //定時中斷子程序

{

b++;

if(b==19) // 定時器中斷次數

{ b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0) //東西黃燈閃

{ Green_dx=0;Yellow_dx=!Yellow_dx;}

if(sec_dx<=5&&time==1) //南北黃燈閃

{ Green_nb=0;Yellow_nb=!Yellow_nb;}

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}

}

void key_to1() //鍵盤處理子程序之+

{

TR0=0; //關定時器

if(set==0)

set_timenb++; //南北加1S

else

set_timedx++; //東西加1S

if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //設置的數值賦給東西南北

sec_dx=set_timedx;

}

void key_to2() //鍵盤處理子程序之-

{

TR0=0; //關定時器

if(set==0)

set_timenb--; //南北減1S

else

set_timedx--; //東西減1S

if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99; //減到1重置99

sec_nb=set_timenb ; //設置的數值賦給東西南北

sec_dx=set_timedx;

}

void key_to3() //鍵盤處理之緊急車通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1 //只允許東西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1 //只允許南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//開機的Logo "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms) //延時子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}


F. 單片機交通燈程序設計和電路圖

;********交通燈控制器************
;綠燈亮90秒後轉為黃燈
;黃燈亮2秒過渡後轉為紅燈
;另設東西方向、南北方向緊急開關各一個,利用外部中斷INT0、INT1實現中斷。
;緊急開關閉合時,相應方向切換成綠燈,以便於特種車輸通過
;設定P1.0控制東西方向綠燈,P1.1控制東西方向黃燈,P1.2控制東西方向紅燈;
;設定P1.3控制南北方向綠燈,P1.4控制南北方向黃燈,P1.5控制南北方向紅燈.
;********************************
ORG 0000H ;
LJMP MAIN ;
ORG 0003H ;
LJMP ZD0 ;
ORG 0013H ;
LJMP ZD1 ;
MAIN:
MOV SP,#70H ;
MOV IE,#85H ;
LOOP:
CLR P1.0 ;
SETB P1.1 ;
SETB P1.2 ;
SETB P1.3 ;
SETB P1.4 ;
CLR P1.5 ;
ACALL DEL90S ;
ACALL YELL ;
ACALL DEL2S ;
SETB P1.0 ;
SETB P1.1 ;
CLR P1.2 ;
CLR P1.3 ;
SETB P1.4 ;
SETB P1.5 ;
ACALL DEL90S ;
ACALL YELL ;
ACALL DEL2S ;
SJMP LOOP ;
YELL:
SETB P1.0 ;
CLR P1.1 ;
SETB P1.2 ;
SETB P1.3 ;
CLR P1.4 ;
SETB P1.5 ;
RET ;
ZD0:
CLR P1.0 ;
SETB P1.1 ;
SETB P1.2 ;
SETB P1.3 ;
SETB P1.4 ;
CLR P1.5 ;
JNB P3.2,ZDO;
RETI ;
ZD1:
SETB P1.0 ;
SETB P1.1 ;
CLR P1.2 ;
CLR P1.3 ;
SETB P1.4 ;
SETB P1.5 ;
JNB P3.3,ZD1;
RETI ;
DEL2S:
MOV R5,#10H ;
F3: MOV R6,#0FFH;
F2: MOV R7,#0E1H;
F1: DJNZ R7,F1 ;
DJNZ R6,F2 ;
DJNZ R5,F3 ;
RET ;
DEL90S:
MOV R5,#03H ;
F6: MOV R6,#0F0H;
F5: MOV R7,#0F0H;
F4: MOV R0,#0F0H;
DJNZ R0,$ ;
DJNZ R7,F4 ;
DJNZ R6,F5 ;
DJNZ R5,F6 ;
RET ;
END ;

G. 單片機控制交通燈的一個主程序流程圖不理解,求高手幫忙解釋下

我的理解是這樣的:不管東西還是南北向通行,所有紅綠燈都是以秒為基本計時單位的,所以用定時器產生一秒的中斷。當進入中斷時我們在中斷服務程序中做一下幾件事,1、設置標志位S,用於判斷哪路交通燈開啟。2、如果需要我們在中斷程序中加一個中斷計數器N,記錄進入中斷的次數,這個樣就可以用這個N控制交通燈亮的時間是多少秒。

H. 基於51單片機控制交通燈的電路圖與C語言程序

思路:

紅燈停,綠燈行,黃燈閃爍提示行人紅綠燈即將切換。四個方向各有一個紅、黃、綠顯示和兩個數碼管。

東西道為人行道(20秒),南北道為車行道(60秒),黃燈延時最後三秒時,閃爍並切換。

三、硬體電路設計

此電中路設計採用AT89C51單片機,74LS47(數碼管驅動)74LS373(數碼管驅動輸出鎖存),8個數碼管顯示其延時值,四個紅、黃、綠指示燈。硬體設計關鍵在於,延時顯示時,要考慮到當個位數字顯示時,要確保十位數字顯示輸出的不變。因此,可加輸出鎖存器。在延時最後三秒時,要讓黃燈進行閃爍,並同時顯示數字(這一步在軟體設計上很關鍵)。

四、軟體程序(C語言)

以下是整個設計的軟體程序,直接可以編譯成*。Hex代碼。通過以上電路,下載到單片機,可直接運行。

//*****************************//

//程序名:十字路口交通燈控制

//編寫人:黃庭劍

//初寫時間:2009年1月2日

//程序功能:南北為車行道,延時60秒;東西方向為人行道,延時20秒,且在最後3秒黃燈顯示2秒鍾再實現切換.

//CPU說明:AT89C51型單片機;24MHZ晶體振盪器

//完成時間:2009年1月6日

//*****************************//

#include<stdio.h>

#include<reg51.h>

#include<intrins.h>

sfrp0=0x80;

sfrp1=0x90;

sfrp2=0xA0;

sfrp3=0xb0;//這部分內容其實在「#include<reg51.h>」里已經有,但裡面定義的必須區分大小寫,在這里,因為我程序採用的是小寫,reg51.h里對各個埠與寄存器的定義都是大寫,所以在編譯連接時,會報錯,所以,在本設計程序里,我只用到了埠,在這里也就只定義了四個,而沒有去改reg51.h裡面的內容。其實兩者是一樣的。

sbitsw=p0^0;

sbitOE=P0^6;

sbitLE=P0^7;//74LS373鎖存器控制端定義

chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的數碼管時間顯示調用,利用74L74BCD碼,8位驅動輸出;

//函數聲明begin

voiddelay1(intcount);

voiddelay_long(intnumber1,intnumber2);

voidpeople_car_drive();

//函數聲明end

//***********************//延時子程序

voiddelay1(intcount)

{inti;

for(i=count;i>0;i--)

{;}

}

voiddelay_long(intnumber1,intnumber2)

{

inta,b;

for(a=number1;a>0;a--)

{

for(b=number2;b>0;b--)

{_nop_();}

}

}

//**********************//延時子程序

voidpeople_car_drive()

{

intp_1=2,i,j=9,p_2=6;//****************//行人通行時,延時20秒

p2=0x09;//南北紅燈亮

p3=0x24;//東西綠燈亮

while(p_1-->0)

{LE=1;

OE=0;

if(p_1==0){OE=1;}//當十位數減到0時,只顯示個位數

p1=display[p_1];

delay1(1000);

LE=0;

j=9;

for(i=10;i>0;i--)

{

if(p_1==0&&j==3)break;//減到3時退出循環,讓其黃燈閃爍顯示

p1=display[j--];

delay_long(16000,2);

if(sw==1)return;

}

}

//*******************************************************************************//

p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意

p3=0x12;

p1=display[3];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[2];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[1];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

//*****************以下是車輛通行時延時60秒//

p2=0x24;//南北綠燈亮

p3=0x09;//東西紅燈亮

while(p_2-->0)

{LE=1;

OE=0;

if(p_2==0){OE=1;}//當十位數減到0時,只顯示個位數

p1=display[p_2];

delay1(1000);

LE=0;

j=9;

for(i=10;i>0;i--)

{

if(p_2==0&&j==3)break;//減到2時退出循環

p1=display[j--];

delay_long(16000,2);

if(sw==1)return;

}

}

p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意

p3=0x12;

p1=display[3];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[2];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);

p2=0x12;

p3=0x12;

p1=display[1];

delay_long(8000,1);

p2=0x00;

p3=0x00;

delay_long(14000,1);//南北黃燈閃爍三秒完畢

}

voidmain()//主函數入口處

{

p0=0x01;

p1=0x00;

p2=0x00;

p3=0x00;//初始化各埠

{while(1)

{

if(sw==0)

{people_car_drive();}

else

{

p2=0x00;

p3=0x00;//關閉所有交通燈

}

}

}

}

詳情訪問:http://hi..com/hjiannew/

I. 單片機交通燈課程設計

/*****************************************************

十字路口交通燈控制C程序

******************************************************/

#defineucharunsignedchar

#defineuintunsignedint

#include<reg52.h>

/*****定義控制位**********************/

sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位

sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位

sbitEW_LED2=P2^3;//EW_LED2控制位

sbitEW_LED1=P2^2;//EW_LED1控制位

sbitSN_LED2=P2^1;//SN_LED2控制位

sbitSN_LED1=P2^0;//SN_LED1控制位

sbit SN_Yellow=P1^6;//SN黃燈

sbit EW_Yellow=P1^2;//EW黃燈

sbit EW_Red=P1^3;//EW紅燈

sbit SN_Red=P1^7;//SN紅燈

sbit EW_ManGreen=P3^0;//EW人行道綠燈

sbit SN_ManGreen=P3^1;//SN人行道綠燈

sbit Special_LED=P2^6;//交通正常指示燈

sbit Busy_LED=P2^7;//交通繁忙指示燈

sbit Nomor_Button=P3^5;//交通正常按鍵

sbit Busy_Btton=P3^6;//交通繁忙按鍵

sbit Special_Btton=P3^7;//交通特殊按鍵

sbit Add_Button=P3^3;//時間加

sbit Reces_Button=P3^4;//時間減

bit Flag_SN_Yellow;//SN黃燈標志位

bit Flag_EW_Yellow;//EW黃燈標志位

charTime_EW;//東西方向倒計時單元

charTime_SN;//南北方向倒計時單元

ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化賦值,正常模式

ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用於存放修改值的變數

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段選碼

ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信號燈控制代碼

/**********************延時子程序************************/

voidDelay(uchara)

{

uchari;

i=a;

while(i--){;}

}

/*****************顯示子函數**************************/

voidDisplay(void)

{

charh,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=1;

Delay(2);

EW_LED2=0;

P0=table[h];

EW_LED1=1;

Delay(2);

EW_LED1=0;

h=Time_SN/10;

l=Time_SN%10;

P0=table[l];

SN_LED2=1;

Delay(2);

SN_LED2=0;

P0=table[h];

SN_LED1=1;

Delay(2);

SN_LED1=0;

h=EW1/10;

l=EW1%10;

P0=table[l];

Time_Show_LED1=1;

Delay(2);

Time_Show_LED1=0;

P0=table[h];

Time_Show_LED2=1;

Delay(2);

Time_Show_LED2=0;

}

/**********************外部0中斷服務程序************************/

voidEXINT0(void)interrupt0using1

{

EX0=0;//關中斷

if(Add_Button==0)//時間加

{

EW1+=5;

SN1+=5;

if(EW1>=100)

{

EW1=99;

SN1=79;

}

}

if(Reces_Button==0)//時間減

{

EW1-=5;

SN1-=5;

if(EW1<=40)

{

EW1=40;

SN1=20;

}

}

if(Nomor_Button==0)//測試按鍵是否按下,按下為正常狀態

{

EW1=60;

SN1=40;

EWL1=19;

SNL1=19;

Busy_LED=0;//關繁忙信號燈

Special_LED=0;//關特殊信號燈

}

if(Busy_Btton==0)//測試按鍵是否按下,按下為繁忙狀態

{

EW1=45;

SN1=30;

EWL1=14;

SNL1=14;

Special_LED=0;//關特殊信號燈

Busy_LED=1;//開繁忙信號燈

}

if(Special_Btton==0)//測試按鍵是否按下,按下為特殊狀態

{

EW1=75;

SN1=55;

EWL1=19;

SNL1=19;

Busy_LED=0;//關繁忙信號燈

Special_LED=1;//開特殊信號燈

}

EX0=1;//開中斷

}

/**********************T0中斷服務程序*******************/

voidtimer0(void)interrupt1using1

{

staticucharcount;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==10)

{

if(Flag_SN_Yellow==1)//測試南北黃燈標志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1) //測試東西黃燈標志位

{EW_Yellow=~EW_Yellow;}

}

if(count==20)

{

Time_EW--;

Time_SN--;

if(Flag_SN_Yellow==1)//測試南北黃燈標志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//測試東西黃燈標志位

{EW_Yellow=~EW_Yellow;}

count=0;

}

}

/*********************主程序開始**********************/

voidmain(void)

{

Busy_LED=0;

Special_LED=0;

IT0=1;//INT0負跳變觸發

TMOD=0x01;//定時器工作於方式1

TH0=(65536-50000)/256;//定時器賦初值

TL0=(65536-50000)%256;

EA=1;//CPU開中斷總允許

ET0=1;//開定時中斷

EX0=1;//開外部INTO中斷

TR0=1;//啟動定時

while(1)

{/*******S0狀態**********/

EW_ManGreen=0;//EW人行道禁止

SN_ManGreen=1;//SN人行道通行

Flag_EW_Yellow=0; //EW關黃燈顯示信號

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5)

{P1=S[0];//SN通行,EW紅燈

Display();}

/*******S1狀態**********/

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1;//SN開黃燈信號位

EW_Red=1; //SN黃燈亮,等待左拐信號,EW紅燈

Display();

}

/*******S2狀態**********/

Flag_SN_Yellow=0;//SN關黃燈顯示信號

Time_SN=SNL;

while(Time_SN>=5)

{P1=S[2];//SN左拐綠燈亮,EW紅燈

Display();}

/*******S3狀態**********/

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1;//SN開黃燈信號位

EW_Red=1; //SN黃燈亮,等待停止信號,EW紅燈

Display();}

/***********賦值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

/*******S4狀態**********/

EW_ManGreen=~EW_ManGreen;//EW人行道通行

SN_ManGreen=~SN_ManGreen;//SN人行道禁止

Flag_SN_Yellow=0; //SN關黃燈顯示信號

Time_EW=SN;

Time_SN=EW;

while(Time_EW>=5)

{P1=S[4];//EW通行,SN紅燈

Display();}

/*******S5狀態**********/

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1;//EW開黃燈信號位

SN_Red=1;//EW黃燈亮,等待左拐信號,SN紅燈

Display();}

/*******S6狀態**********/

Flag_EW_Yellow=0; //EW關黃燈顯示信號

Time_EW=EWL;

while(Time_EW>=5)

{P1=S[6];//EW左拐綠燈亮,SN紅燈

Display();}

/*******S7狀態**********/

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1;//EN開黃燈信號位

SN_Red=1;//EW黃燈亮,等待停止信號,SN紅燈

Display();}

/***********賦值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

}

}

閱讀全文

與單片機交通燈程序設計圖相關的資料

熱點內容
普通人電腦關機vs程序員關機 瀏覽:623
米酷建站源碼 瀏覽:110
氫氣app怎麼搜搭配 瀏覽:612
pdf綠盟 瀏覽:502
固態硬碟編譯器重建 瀏覽:387
怎樣編輯硬碟文件夾 瀏覽:657
安卓系統如何打開電腦軟體 瀏覽:570
android監聽事件處理 瀏覽:746
h3c伺服器怎麼看功率 瀏覽:121
前端錄制文件如何上傳伺服器 瀏覽:538
雅黑pdf 瀏覽:460
python使用領域 瀏覽:882
買蘭博基尼用什麼app 瀏覽:139
android關閉後台運行 瀏覽:507
python輸出路徑為超鏈接 瀏覽:535
caxa為什麼沒有加密鎖 瀏覽:794
伺服器怎麼設置才能用IP訪問 瀏覽:665
郵件附件加密後打開能顯示嗎 瀏覽:726
榮耀x10拍照演算法 瀏覽:571
androidgradle配置簽名 瀏覽:98