导航:首页 > 操作系统 > 红绿灯单片机程序汇编

红绿灯单片机程序汇编

发布时间:2022-07-04 04:00:52

❶ 求大神解答,用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

❷ 求一个用汇编语言编写单片机简易交通灯程序。求高手帮下忙谢谢了。

;------------------------------------
;程序实现功能
;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。
;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。
;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。

;工作寄存器及存储单元分配
;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
END

❸ 跪求51单片机设计红绿灯程序,C和汇编都行,最好有注释,,具体要求如下

《单片机原理与应用》,李明主编,北京航空航天大学出版社,书上有现成的,只不过是汇编的,修改延时就可用。

❹ AT89S51 单片机控制交通灯程序(汇编语言)

ORG0000H

LJMPSTART

ORG0003H;INT0中断入口地址

LJMPINT0

ORG0040H

START:

MOVSP,#60H

SETBEX0;INT0中断有效

SETBIT0

SETBEA

LCALLSTATUS0;初始状态(都是红灯)

CIRCLE:

LCALLSTATUS1;南北绿灯,东西红灯

LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯

LCALLSTATUS3;南北红灯,东西绿灯

LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯

LJMPCIRCLE

INT0:

PUSHPSW;保护现场

PUSH2

PUSHACC

MOVDPTR,#8300H

MOVA,#0FH;南北,东西都亮红灯

MOVX@DPTR,A

MOVR2,#100;延时10秒

LCALLDELAY

POPACC;恢复现场

MOVX@DPTR,A

POP2

POPPSW

RETI

STATUS0:;南北红灯,东西红灯

MOVDPTR,#8300H

MOVA,#0FH

MOVX@DPTR,A

MOVR2,#10;延时1秒

LCALLDELAY

RET

STATUS1:;南北绿灯,东西红灯

MOVDPTR,#8300H

MOVA,#96H;南北绿灯,东西红灯

MOVX@DPTR,A

MOVR2,#200;延时20秒

LCALLDELAY

RET

STATUS2:;南北绿灯闪转黄灯,东西红灯

MOVDPTR,#8300H

MOVR3,#03H;绿灯闪3次

FLASH:

MOVA,#9FH

MOVX@DPTR,A

MOVR2,#03H

LCALLDELAY

MOVA,#96H

MOVX@DPTR,A

MOVR2,#03H

LCALLDELAY

DJNZR3,FLASH

MOVA,#06H;南北黄灯,东西红灯

MOVX@DPTR,A

MOVR2,#10;延时1秒

LCALLDELAY

RET

STATUS3:;南北红灯,东西绿灯

MOVDPTR,#8300H

MOVA,#69H

MOVX@DPTR,A

MOVR2,#200;延时20秒

LCALLDELAY

RET

STATUS4:;南北红灯,东西绿灯闪转黄灯

MOVDPTR,#8300H

MOVR3,#03H;绿灯闪3次

FLASH1:

MOVA,#6FH

MOVX@DPTR,A

MOVR2,#03H

LCALLDELAY

MOVA,#69H

MOVX@DPTR,A

MOVR2,#03H

LCALLDELAY

DJNZR3,FLASH1

MOVA,#09H;南北红灯,东西黄灯

MOVX@DPTR,A

MOVR2,#10;延时1秒

LCALLDELAY

NOP

RET

DELAY:;延时子程序

PUSH2

PUSH1

PUSH0

DELAY1:

MOV1,#00H

DELAY2:

MOV0,#0B2H

DJNZ0,$

DJNZ1,DELAY2;延时100mS

DJNZ2,DELAY1

POP0

POP1

POP2

RET

这是我们的实验,程序肯定没问题。至于ULN2803,只是一个增大电流,电压的芯片,因为51单片机本身的电流太小。你改一下就好。至于其他不明白的地方,可以交流。QQ375778861

❺ 单片机交通灯汇编语言程序,只需红黄绿灯顺序亮就行了

#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();

}

❻ 单片机控制红黄绿灯汇编程

RED bit P1.4
YEL bit P1.5
GRE bit P3.6

ORG 0000H
CLR RED ;低电平发光
SETB GRE
CALL DL1S
CALL DL1S
CALL DL1S
CALL DL1S

SETB RED
CLR YEL ;低电平发光
CALL DL1S
CALL DL1S

CLR YEL ;低电平发光
CLR GRE ;低电平发光
CALL DL1S

SETB YEL
CALL DL1S
CALL DL1S
CALL DL1S
CALL DL1S

SJMP 0000H

DL1S:
;略,因为题目没有提供晶振频率
RET

END

❼ 单片机 用汇编语言编写交通红绿灯 只要求红灯30秒,黄灯5秒,绿灯30秒,黄灯5秒,其他不限

看你的程序上没有很大的问题,但是你的延时都使用相同子程序,延时时间相同。你可以把延时30秒的子程序和延时5秒的程序分开来写,分别调用。另单片机的引脚一般为吸入电流,建议你将单片机的引脚输出改为0有效就可以直接接负载,电源控制按键判断也作出相应的修改。

❽ 解释单片机红绿灯汇编语言如下 求解释

❾ c51单片机控制交通灯要求用汇编语言

// 51单片机控制交通灯要求用汇编语言,仿真实例,可以参考一下

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

❿ 单片机交通灯的汇编程序

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
你看看行不行 如果不行你自己再稍微改一下吧 反正大概就这些了
希望对你能有所帮助。

阅读全文

与红绿灯单片机程序汇编相关的资料

热点内容
被调侃的程序员 浏览:489
哪里有无损音乐app下载 浏览:221
单片机如何使用proteus 浏览:991
java常用的服务器 浏览:281
集结APP在哪里下载 浏览:800
欧洲cf玩什么服务器 浏览:529
如何连接另一台电脑上的共享文件夹 浏览:681
如何让桌面文件夹搬家到e盘 浏览:73
java自动格式化 浏览:619
ipad怎么查看文件夹大小 浏览:583
手工粘土解压球 浏览:552
在线视频教育源码 浏览:41
快四十学什么编程 浏览:754
gnumakelinux 浏览:537
视易峰云服务器怎么改系统 浏览:535
javamap取值 浏览:768
mac和win磁盘加密软件 浏览:474
苹果为什么会连接不到服务器 浏览:726
pdf格式文件如何保存 浏览:303
小霸王服务器tx什么意思 浏览:75