當前位置:首頁 » 編程軟體 » 紅綠燈匯編程序

紅綠燈匯編程序

發布時間: 2023-02-07 17:14:06

㈠ 求大神解答,用51單片機匯編語言實現一個紅綠燈的程序,不是一個路口的,大概注釋下就好

;------------------------------------

;程序實現功能

;西南北路口直行與轉彎交替通行,數碼管顯示直行通行倒計時,紅綠黃燈顯示包括人行道在內的道路交通狀態。

;某一方向道路擁擠時,可以人工控制調節東西南北方向通行時間。

;緊急情況時,各路口交通燈顯示紅燈,數碼管保持數據不變。

;工作寄存器及存儲單元分配

;1.工作寄存器

;R2設置為定時器定時中斷次數,R6、R7用於延時程序中的寄存器

;2.片內存儲單元

;30H、31H作為兩組數碼管顯示數據存儲單元;32H、33H作為交通燈初始狀態存儲單元;40H、41H作為交通燈顯示數據存儲單元

;3.標志位

;00H:南北通行標志位 ; 01H:東西通行標志位;02H:緊急事件標志位

;-----------------------------------

SNF EQU 00H ;;;南北通行標志位

EWF EQU 01H ;;;東西通行標志位

URF EQU 02H ;;;緊急事件標志位

ORG 0000H

LJMP MAIN ;;;上電轉主程序

ORG 000BH ;;;定時中斷入口

LJMP DSZD

ORG 0003H ;;;緊急中斷入口

LJMP URZD

ORG 0030H

MAIN: LCALL INIT ;;;調用初始化子程序

LOOP: LCALL DIS ;;;循環執行顯示子程序

AJMP LOOP

;///////////初始化程序

INIT: SETB SNF

SETB EWF

SETB URF

MOV R2,#20 ;;;定時器中斷20次為1s

MOV TMOD,#01H ;;;初始化定時器

MOV TL0,#0B0H

MOV TH0,#3CH

SETB EA ;;;開定時中斷與緊急中斷

SETB ET0

SETB TR0

SETB EX0

SETB IT0 ;;;設置中斷程式控制方式

MOV DPTR,#TAB ;;;數值首地址放入DPTR中

MOV 40H,#40 ;;;東南西北通行時間設置

MOV 41H,#40

MOV 30H,#40 ;;;通行時間初始化

MOV 31H,#60

MOV P0,#4CH ;;;初始化時南北通行並把交通燈狀態分別放在32H和33H中

MOV 32H,#4CH

MOV P2,#15H

MOV 33H,#15H

RET

;////////////顯示子程序

DIS: MOV P3,#0DFH ;;;選中南北方向的十位數碼管

MOV A,30H ;;;把顯示數據送人數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A ;;;

LCALL D1MS

MOV P3,#0EFH ;;;選中南北方向的個位數碼管

MOV A,B ;;;送入數碼管顯示

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#7FH ;;;選中第東西方向的十位數碼管

MOV A,31H ;;;送入數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#0BFH ;;;選中第東西方向的個位數碼管

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

SETB P3.0

SETB P3.1

JNB P3.0,DIS_S ;;;查詢是否第一個按鍵按下

JNB P3.1,DIS_E ;;;查詢是否第二個按鍵按下

AJMP DIS_R ;;;沒有鍵按下則返回

DIS_S:LCALL D5MS ;;;按鍵去抖

JNB P3.0,DIS_SN

AJMP DIS_R

DIS_SN:MOV 40H,#50 ;;;對通行時間從新分配,南北通行時間加長

MOV 41H,#30

AJMP DIS_R

DIS_E:LCALL D5MS ;;;按鍵去抖

JNB P3.1,DIS_EW

AJMP DIS_R

DIS_EW:MOV 40H,#30 ;;;東西通行時間加長

MOV 41H,#50

DIS_R:RET

;///////定時中斷處理程序

DS_C: LJMP DS_R ;;;接力跳轉

DSZD: PUSH ACC ;;;保護現場

PUSH PSW

CLR TR0 ;;;關定時器及中斷標志位並重新賦值

CLR TF0

MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ R2,DS_C ;;;判斷1m時間是否到達

MOV R2,#20 ;;;到達重新賦值

DEC 30H ;;;南北方向通行時間減一

MOV A,30H ;;;把減一後的時間送入顯示存儲單元

;;;;;;;南北通行到達最後4秒時黃燈閃爍

DS_10:CJNE A,#4,DS_11 ;;;如果通行時間剩餘4秒

JNB SNF,DS_11 ;;;判斷是否是南北通行

MOV P0,#8AH

MOV 32H, #8AH ;;;把交通燈狀態存入存儲單元(後面類似)

DS_11:CJNE A,#3,DS_12 ;;;不是剩餘3秒,返回

JNB SNF,DS_12 ;;;不是南北通行時間,返回

MOV P0,#88H

MOV 32H, #88H

DS_12:CJNE A,#2,DS_13

JNB SNF,DS_13

MOV P0,#8AH

MOV 32H, #8AH

DS_13:CJNE A,#1,DS_14

JNB SNF,DS_14

MOV P0,#88H

MOV 32H, #88H

;------------------------

DS_14:JNZ DS_NE ;;;通行時間沒有結束轉向改變東西方向的數碼管

CPL SNF ;;;如果通行時間結束則對標志位取反

JNB SNF,DS_1 ;;;判斷是否南北通行

MOV 30H,40H ;;;是,點亮相應的交通燈

MOV P0,#4CH

MOV 32H,#4CH ;;;存儲交通燈狀態

MOV P2,#15H

MOV 33H, #15H ;;;存儲交通燈狀態

DS_NE:DEC 31H ;;;東西方向通行時間減一

MOV A,31H ;;;把通行剩餘時間送入顯示存儲單元

;;;;;;;;東西方向通行時間剩餘4秒鍾黃燈閃爍(程序注釋與南北方向類似 略)

DS_20:CJNE A,#4,DS_21

JB EWF,DS_21

MOV P0,#51H

MOV 32H, #51H

DS_21:CJNE A,#3,DS_22

JB EWF,DS_22

MOV P0,#41H

MOV 32H, #41H

DS_22:CJNE A,#2,DS_23

JB EWF,DS_23

MOV P0,#51H

MOV 32H, #51H

DS_23:CJNE A,#1,DS_24

JB EWF,DS_24

MOV P0,#41H

MOV 32H, #41H

;-----------------------------

DS_24:JNZ DS_R ;;;東西方向時間沒有結束,返回

CPL EWF ;;;對通行狀態取反

JNB EWF,DS_2 ;;;東西方向通行時間到來,跳轉

MOV 31H,#80 ;;;東西方向通行結束,重新顯示時間

MOV P0,#89H ;;;點亮相應的交通燈

MOV 32H, #89H

MOV P2,#29H

MOV 33H, #29H

AJMP DS_R

DS_1: MOV 30H,#80 ;;;南北通行時間結束,重新對顯示存儲單元賦值

MOV P0,#89H ;;;執行轉彎狀態1

MOV 32H, #89H

MOV P2,#26H

MOV 33H, #26H

AJMP DS_NE

DS_2: MOV 31H,41H ;;;東西方向開始通行,賦值予顯示存儲單元

MOV P0,#61H ;;;點亮相應的交通燈

MOV 32H, #61H

MOV P2,#15H

MOV 33H, #15H

DS_R: SETB TR0

POP PSW ;;;恢復現場

POP ACC

RETI

;/////////////緊急中斷處理程序

URZD: PUSH ACC ;;;保護現場

PUSH PSW

CLR IE0 ;;;清除中斷標志位

CLR TR0 ;;;關定時器

CPL URF ;;;緊急事件標志位

JB URF,UR_CON ;;;緊急結束;跳轉

MOV P0,#49H ;;;各路口燈全顯示紅燈亮

MOV P2,#15H

AJMP UR_R

UR_CON:SETB TR0 ;;;恢復正常交通

MOV A,32H

MOV P0,A

MOV A,33H

MOV P2,A

UR_R: POP PSW ;;;恢復現場

POP ACC

RETI

;////////////查表指令0,1,2,3,4,5,6,7,8,9

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH

DB 7DH, 07H, 7FH, 6FH

;//////////延時5ms與1ms

D5MS: MOV R7,#5

D1MS: MOV R7,#10

MOV R6,#50

L1: DJNZ R6,$

DJNZ R7,L1

RET

㈡ 如何用C語言匯編紅綠燈的程序

用random生成一個隨機數,或者是用戶自己輸入一個數字,用switch語句來響應,當是1時,紅燈亮,當是2時,綠燈亮等。

㈢ 十字路口紅綠燈控制用匯編設計程序

redlightzhu bit p1.0 yellowlightzhu bit p1.1 greenlightzhu bit p1.2 redlight bit p1.3 yellowlight bit p1.4 greenlight bit p1.5 shiw equ 78h gew equ 79h xh1 equ 30h xh2 equ 31h org 0000h jmp main org 0080h main: mov xh1,#255 mov xh2,#255 mov p1,#0ffh mov P0,#0ffh mov P2,#0ffh mov dptr,#tab green: mov xh1,#255 mov xh2,#255 mov r4,#30 mov r3,#35 loopa:clr greenlightzhu clr redlight loop1:lcall shuxian djnz xh1,loop1 setb greenlightzhu setb redlight loop2:lcall shuxian djnz xh2,loop2 dec r3 djnz r4,loopa greenlight: mov xh1,#255 mov xh2,#255 mov r4,#5 mov r3,#5 loopb:clr greenlightzhu clr yellowlightzhu clr redlight loop11:lcall shuxian djnz xh1,loop11 setb greenlightzhu setb redlight setb yellowlightzhu loop12:lcall shuxian djnz xh2,loop12 dec r3 djnz r4,loopb red1: mov xh1,#255 mov xh2,#255 mov r4,#20 mov r3,#15 loopc:clr greenlight clr redlightzhu loop21:call shuxian djnz xh1,loop21 setb greenlight setb redlightzhu loop22:call shuxian djnz xh2,loop22 dec r4 djnz r3,loopc red2: mov xh1,#255 mov xh2,#255 mov r4,#5 mov r3,#5 loopd:clr greenlight clr yellowlight clr redlightzhu loop31:call shuxian djnz xh1,loop31 setb greenlight setb redlightzhu setb yellowlight loop32:call shuxian djnz xh2,loop32 dec r3 djnz r4,loopd jmp green shuxian: mov a,r4 mov b,#10 div ab mov shiw,a mov gew,b movc a,@a+dptr mov shiw,a mov a,gew movc a,@a+dptr mov gew,a mov p0,#0ffh mov p2,#0ffh clr p2.3 mov p0,shiw call delay mov p0,#0ffh mov p2,#0ffh clr p2.4 mov p0,gew call delay mov a,r3 mov b,#10 div ab mov shiw,a mov gew,b movc a,@a+dptr mov shiw,a mov a,gew movc a,@a+dptr mov gew,a mov p0,#0ffH mov p2,0ffh clr p2.5 mov p0,shiw call delay mov p0,#0ffh mov p2,#0ffh clr p2.6 mov p0,gew call delay ret delay: mov r6,#30;延時1ms子程序 mov r7,#255 d1:djnz r6,d1 d2:djnz r7,d2 ret tab: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h end

希望採納

㈣ 用51單片機製作紅綠燈,要求按鍵能控制整個電路的啟動和停止,用匯編語言怎麼編寫程序

交通路口紅綠燈自動控制器電路圖 如圖所示為交通路口紅綠燈自動控制電路。該控制器主要由四塊555(IC2~IC5)和一些阻容元件組成的四級單穩態延時電路首尾相連而成。輸入的8V電壓經78M05穩壓後為555提供VDD=+5V的電源電壓。 當剛接通電源時,觸發脈沖經IC1(CD4011)門電路和R1、C1延時,再經C2、R22微分後加到IC2②腳,觸發IC2輸出高電平,進入暫穩態,其暫穩態定時時間長短取決於K1的位置,延時td=1.1RC6,設定時間分別為60秒、45秒、30秒。暫穩態結束時,IC2③腳為低電平,其經C3、R23微分後,下降沿又觸發IC3,形成第二級單穩態延時。如此依次觸發定時,完成綠色燈亮-黃色燈亮(8秒、10秒、12秒)-紅色燈亮(60秒、45秒、30秒)的循環周期。 本控制器通過四級電路首尾相接,依次延時觸發,使交通燈依次出現綠-黃-紅(色)信號,指揮行人和車輛在十字路I=1有秩序地通行(綠)-提醒注意(黃)-禁止通行(紅)。 看看這個有用嗎?

㈤ 單片機 用匯編語言編寫交通紅綠燈 只要求紅燈30秒,黃燈5秒,綠燈30秒,黃燈5秒,其他不限

看你的程序上沒有很大的問題,但是你的延時都使用相同子程序,延時時間相同。你可以把延時30秒的子程序和延時5秒的程序分開來寫,分別調用。另單片機的引腳一般為吸入電流,建議你將單片機的引腳輸出改為0有效就可以直接接負載,電源控制按鍵判斷也作出相應的修改。

㈥ 單片機交通燈匯編語言程序,只需紅黃綠燈順序亮就行了

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0; //東西向燈

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3; //南北向燈

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //閃爍次數,操作類型變數

//延時

void DelayMS(uint x)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//交通燈切換

void Traffic_Light()

{

switch(Operation_Type)

{

case1: //東西向綠燈與南北向紅燈亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case2: //東西向黃燈閃爍,綠燈關閉

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10)return; //閃爍5次

Flash_Count=0;

Operation_Type=3;

break;

case3: //東西向紅燈,南北向綠燈亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case4: //南北向黃燈閃爍5次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=1;

}

}

//主程序

void main()

{

while(1)Traffic_Light();

}

㈦ 單片機交通燈的匯編程

NAME T3 ;I/O口擴展實驗一
PORT EQU 0CFA0H ;片選地址CS0
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOV A,#11H ;兩個紅燈亮,黃燈、綠燈滅
ACALL DISP ;調用273顯示單元(以下雷同)
ACALL DE3S ;延時3秒
LLL: MOV A,#12H ;東西路口綠燈亮;南北路口紅燈亮
ACALL DISP
ACALL DE10S ;延時10秒
MOV A,#10H ;東西路口綠燈滅;南北路口紅燈亮
ACALL DISP
MOV R2,#05H ;R2中的值為黃燈閃爍次數
TTT: MOV A,#14H ;東西路口黃燈亮;南北路口紅燈亮
ACALL DISP
ACALL DE02S ;延時0.2秒
MOV A,#10H ;東西路口黃燈滅;南北路口紅燈亮
ACALL DISP
ACALL DE02S ;延時0.2秒
DJNZ R2,TTT ;返回TTT,使東西路口;黃燈閃爍五次
MOV A,#11H ;兩個紅燈亮,黃燈、綠燈滅
ACALL DISP
ACALL DE02S ;延時0.2秒
MOV A,#21H ;東西路口紅燈亮;南北路口綠燈亮
ACALL DISP
ACALL DE10S ;延時10秒
MOV A,#01H ;東西路口紅燈亮;南北路口綠燈滅
ACALL DISP
MOV R2,#05H ;黃燈閃爍五次
GGG: MOV A,#41H ;東西路口紅燈亮;南北路口黃燈亮
ACALL DISP
ACALL DE02S ;延時0.2秒
MOV A,#01H ;東西路口紅燈亮;南北路口黃燈滅
ACALL DISP
ACALL DE02S ;延時0.2秒
DJNZ R2,GGG ;返回GGG,使南北路口;黃燈閃爍五次
MOV A,#03H ;兩個紅燈亮,黃燈、綠燈滅
ACALL DISP
ACALL DE02S ;延時0.2秒
JMP LLL ;轉LLL循環
DE10S: MOV R5,#100 ;延時10秒
JMP DE1
DE3S: MOV R5,#30 ;延時3秒
JMP DE1
DE02S: MOV R5,#02 ;延時0.2秒
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
DISP: MOV DPTR,#PORT ;273顯示單元
CPL A
MOVX @DPTR,A
RET
END
你看看行不行 如果不行你自己再稍微改一下吧 反正大概就這些了
希望對你能有所幫助。

㈧ 如何用匯編編寫紅綠燈

GEWEI EQU 21H
SHIWEI EQU 23H
SCANLED EQU 25H
SCANMODE EQU 26H
RED EQU 28H
GREEN EQU 29H
YELLOW EQU 32H
NUMTIM EQU 33H
LED EQU 34H
ORG 000H
JMP START
ORG 0BH
JMP TIMER0
ORG 100H
START:MOV SP,#50H
MOV R0,#20H
MOV R5,#20
CLR0:MOV @R0,#00H
INC R0
DJNZ R5,CLR0
MOV TMOD,#01H
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0
MOV IE,#10000010B
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#00H
MOV P3,#0FFH
MOV R3,#10
MOV R2,#3
MOV R1,#10
MOV R7,#200
MOV RED,#10
MOV YELLOW,#3
MOV GREEN,#10
MOV NUMTIM,#10
MOV LED,#0FFH
AJMP $
TIMER0:PUSH ACC
PUSH PSW
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
DJNZ R7,RET0
MOV R7,#200
MOV A,SCANMODE
MOV B,#4
DIV AB
MOV A,B
RL A
MOV DPTR,#TAB_SCAN
JMP @A+DPTR
TAB_SCAN: AJMP RED_LIGHT
AJMP YEL_LIGHT
AJMP GRE_LIGHT
AJMP YEL_LIGHT
RET0: MOV A,NUMTIM
LCALL BIN_BCD
MOV SHIWEI,A
MOV GEWEI,B
INC SCANLED
MOV A,SCANLED
MOV B,#4
DIV AB
MOV A,B
RL A
MOV DPTR,#TAB_SCAN0
JMP @A+DPTR
TAB_SCAN0:AJMP SCAN_L1
AJMP SCAN_L2
SCAN_L1: MOV P2,#11111011B
MOV A,SHIWEI
JMP END_SCAN
SCAN_L2: MOV P2,#11111101B
MOV A,GEWEI
JMP END_SCAN
END_SCAN:MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,LED
MOV P1,A
POP PSW
POP ACC
RETI
RED_LIGHT:MOV LED,#11111100B
MOV NUMTIM,RED
DEC RED
MOV A,RED
CJNE A,#0FFH,RET0
MOV RED,#10
MOV A,SCANMODE
ADD A,#01H
MOV SCANMODE,A
JMP RET0
YEL_LIGHT:MOV LED,#11110011B
MOV NUMTIM,YELLOW
DEC YELLOW
MOV A,YELLOW
CJNE A,#0FFH,RET0
MOV YELLOW,#3
MOV A,SCANMODE
ADD A,#01H
MOV SCANMODE,A
JMP RET0
GRE_LIGHT:MOV LED,#11001111B
MOV NUMTIM,GREEN
DEC GREEN
MOV A,GREEN
CJNE A,#0FFH,RET1
MOV GREEN,#10
MOV A,SCANMODE
ADD A,#01H
MOV SCANMODE,A
RET1:JMP RET0
BIN_BCD:MOV B,#10
DIV AB
RET
DELAY: MOV R5,#02
D1: MOV R6,#200
D2: MOV R7,#200
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

㈨ 十字路口紅綠燈控制用匯編編寫

採用多個時間繼電器進行循環控制。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:750
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:719
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:879
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:912
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:876