单片机的汇编交通灯程序.docx

上传人:b****4 文档编号:3733543 上传时间:2022-11-25 格式:DOCX 页数:14 大小:18.28KB
下载 相关 举报
单片机的汇编交通灯程序.docx_第1页
第1页 / 共14页
单片机的汇编交通灯程序.docx_第2页
第2页 / 共14页
单片机的汇编交通灯程序.docx_第3页
第3页 / 共14页
单片机的汇编交通灯程序.docx_第4页
第4页 / 共14页
单片机的汇编交通灯程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机的汇编交通灯程序.docx

《单片机的汇编交通灯程序.docx》由会员分享,可在线阅读,更多相关《单片机的汇编交通灯程序.docx(14页珍藏版)》请在冰豆网上搜索。

单片机的汇编交通灯程序.docx

单片机的汇编交通灯程序

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

*描述:

*

*AT89S52液晶演示数据p0,控制p2*

*功能:

*

*万年历、频率计、密码锁、点阵屏*

*作者:

*

*哥不在江湖~~*

*技术支持:

*

*湖南工学院*

**

**

**

**

**

**

**

**

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

;***********************************************************************************************;

;系统起始程序区

ORG0000H

START:

LJMPMAIN

ORG000BH

LJMPTIME

ORG001BH

LJMPTIME2

;***********************************************************************************************;

;系统监控程序区

ORG0030H

MAIN:

MOVSP,#80H;确立堆栈区

MOVPSW,#00H;

MOVTMOD,#01H;定时器初始化,定时器0以工作方式1工作

CLRF0;判断表格首地址标志位

CLREA

MOVR0,#20H;RAM区首地址

MOVR7,#96;RAM区单元个数

ML:

MOV@R0,#00H

INCR0

DJNZR7,ML

TSF:

MOVDPTR,#DISBH;系统初始化后提示符“P.”字符代码表首地址

MOVR5,#08H

MOVR0,#78H

DISPTSF:

CLRA

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR5,DISPTSF

FUN:

ACALLDISP;调显示子程序显示提示符“P.”

ACALLKEY;调用键扫描程序

JB20H.0,JT;S2键按下,则执行交通灯的程序

JB20H.1,SZAJ2;S3键按下,则执行数字按键的程序

LJMPFUN

SZAJ2:

LJMPSZAJ

;***********************************************************************************************;

;交通灯程序入口

JT:

MOVIE,#82H;定时器0初始化

MOVTMOD,#01H;(1秒钟定时)

MOVTH0,#3CH

MOVTL0,#0B0H

MOVR4,#20

CLR21H.0

CLRTR1

CLRTR0

;***********************************************************************************************;

ONE:

MOVR3,#15;第一个状态,主绿次红

MOVP3,#0DEH;灯亮,R3为秒计数

;***********************************************************************************************;

TSF1:

MOVDPTR,#DISBH

MOVR5,#08H

MOVR0,#78H

DISPTSF1:

CLRA;数码管显示缓存区扫描

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR5,DISPTSF1

MOV78H,#05H;数码管显示缓存区付初值

MOV79H,#01H;主绿次红,初值15

SETBTR0;开定时

;***********************************************************************************************;

HA1:

ACALLDISP

JNB21H.0,HUI1

CLR21H.0;15秒倒计时程序

DJNZ78H,HUIQU1

MOVR6,79H

CJNER6,#00H,TEN

LJMPHUIQU1

TEN:

ACALLDISP

JNB21H.0,TEN

MOV78H,#09H

MOV79H,#00H

DECR3

CLR21H.0

LJMPHUIQU1

HUI1:

LJMPHA1

HUIQU1:

DJNZR3,HA1

;***********************************************************************************************;

CLRTR0;第二个状态,主黄次红

;***********************************************************************************************;

TWOTWO:

MOVIE,#88H;定时器1初始化

MOVTMOD,#10H;(0.5秒定时器)

MOVTH1,#3CH

MOVTL1,#0B0H

MOVR4,#10

;***********************************************************************************************;

TWO:

MOVR3,#5;R3还是秒计数

MOVP3,#0DDH;灯亮

;***********************************************************************************************;

TSF2:

MOVDPTR,#DISBH

MOVR5,#08H

MOVR0,#78H;数码管显示缓存区扫描

DISPTSF2:

CLRA

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR5,DISPTSF2;数码管显示缓存区付初值

MOV78H,#05H;主黄次红,初值05

MOV79H,#00H

;***********************************************************************************************;

CLR22H.0

SETBTR1;开定时器1

MOVR7,#00H

HA2:

ACALLDISP

JNB22H.0,HA2;执行两次0.5秒定时,则计1秒

INCR7

CLR22H.0

CJNER7,#02H,HA2

DEC78H

MOVR7,#00H

;***********************************************************************************************;

CJNER3,#4,HUIQU2;当倒计时剩下3秒时,执行主行道黄灯闪烁的程序

;***********************************************************************************************;

SHAN21:

CLR22H.0

LIANG2:

JB22H.0,SHAN22

MOVP3,#0DFH;主行道闪烁程序

ACALLDISP

LJMPLIANG2

SHAN22:

CLR22H.0

MIE2:

JB22H.0,SHAN2

MOVP3,#0DDH

ACALLDISP

LJMPMIE2

SHAN2:

DEC78H

DECR3

CJNER3,#1,SHAN21

LJMPTIAO2

HUIQU2:

DJNZR3,HA2

HUI2:

LJMPHA2

TIAO2:

NOP

;***********************************************************************************************;

CLRTR1;第三个状态,主红次绿

CLRTR0;定时器的选择

SANSAN:

MOVIE,#82H

MOVTMOD,#01H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVR4,#20

;***********************************************************************************************;

SAN:

MOVR3,#5

MOVP3,#0F3H

;***********************************************************************************************;

TSF3:

MOVDPTR,#DISBH

MOVR5,#08H

MOVR0,#78H

DISPTSF3:

CLRA

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR5,DISPTSF3

MOV78H,#05H

MOV79H,#00H

;***********************************************************************************************;

SETBTR0;开定时

HA3:

ACALLDISP

JNB21H.0,HA3;5秒倒计时程序

CLR21H.0

DEC78H

DJNZR3,HA3

;***********************************************************************************************;

CLRTR0;选择定时器1,即0.5秒定时器

SISI:

MOVIE,#88H

MOVTMOD,#10H

MOVTH1,#3CH

MOVTL1,#0B0H

MOVR4,#10

;***********************************************************************************************;

SI:

MOVR3,#5

MOVP3,#0EBH

TSF4:

MOVDPTR,#DISBH

MOVR5,#08H

MOVR0,#78H

DISPTSF4:

CLRA

MOVCA,@A+DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR5,DISPTSF4

MOV78H,#05H

MOV79H,#00H

CLR22H.0

SETBTR1

HA4:

ACALLDISP

JNB22H.0,HA4

INCR7

CLR22H.0

CJNER7,#02H,HA4

DEC78H

MOVR7,#00H

;***********************************************************************************************;

CJNER3,#4,HUIQU4

;***********************************************************************************************;

SHAN41:

CLR22H.0

LIANG4:

JB22H.0,SHAN42

MOVP3,#0FBH

ACALLDISP

LJMPLIANG4

SHAN42:

CLR22H.0

MIE4:

JB22H.0,SHAN4

MOVP3,#0EBH

ACALLDISP

LJMPMIE4

SHAN4:

DEC78H

DECR3

CJNER3,#1,SHAN41

LJMPTIAO4

HUIQU4:

DJNZR3,HA4

HUI4:

LJMPHA4

TIAO4:

NOP

LJMPJT

;***********************************************************************************************;

SZAJ:

MOVP3,#0FFH;数据初始化

MOV78H,#10H

MOV79H,#10H

MOV7AH,#10H

MOV7BH,#10H

MOV7CH,#10H

MOV7DH,#10H

MOV7EH,#10H

MOV7FH,#10H

XS:

ACALLDISP

ACALLKEY

JB20H.0,KEY00;是S2键,转KEY00执行

JB20H.1,KEY11;是S3键,转KEY11执行

JB20H.2,KEY22;是S4键,转KEY22执行

JB20H.3,KEY33;是S5键,转KEY33执行

JB20H.4,KEY44;是S6键,转KEY44执行

JB20H.5,KEY55;是S7键,转KEY55执行

JB20H.6,KEY66;是S8键,转KEY66执行

JB20H.7,KEY77;是S9键,转KEY77执行

LJMPOUT

KEY00:

LCALLJIAOHUAN

MOV7FH,#00H

LCALLDISP

LJMPOUT

KEY11:

LCALLJIAOHUAN

MOV7FH,#01H

LCALLDISP

LJMPOUT

KEY22:

LCALLJIAOHUAN

MOV7FH,#02H

LCALLDISP

LJMPOUT

KEY33:

LCALLJIAOHUAN

MOV7FH,#03H

LCALLDISP

LJMPOUT

KEY44:

LCALLJIAOHUAN

MOV7FH,#04H

LCALLDISP

LJMPOUT

KEY55:

LCALLJIAOHUAN

MOV7FH,#05H

LCALLDISP

LJMPOUT

KEY66:

LCALLJIAOHUAN

MOV7FH,#06H

LCALLDISP

LJMPOUT

KEY77:

LCALLJIAOHUAN

MOV7FH,#07H

LCALLDISP

OUT:

LJMPXS

TIME:

MOVTH0,#3CH

MOVTL0,#0B0H

DECR4

CJNER4,#0,ZHUAN

SETB21H.0

MOVR4,#20

ZHUAN:

RETI

TIME2:

MOVTH1,#3CH

MOVTL1,#0B0H

DECR4

CJNER4,#0,ZHUAN2

SETB22H.0

MOVR4,#10

ZHUAN2:

RETI

DISBH:

DB11H,10H,10H,10H,10H,10H,10H,10H,10H;提示符“P.”字符序号

;显示字符段选码表(共阳极代码)

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;0-8

DB90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH;9,A,B,C,D,E,F,灭,p.

;**************************************************************************************;

;键扫描子程序

KEY:

LCALLKEYCHULI;调P1口数据处理子程序

JZEXIT;没有键按下,转返回

LCALLDISP;调显示子程序去抖动

LCALLDISP

LCALLKEYCHULI;调P1口数据处理子程序

JZEXIT;没有键按下,转返回

MOVB,20H;保存取反后的键值

KEYSF:

LCALLKEYCHULI;调P1口数据处理子程序

JZKEY1;键释放,则将键值转移并保存

LCALLDISP;调显示子程序延时

LJMPKEYSF;等待释放

KEY1:

MOV20H,B;键值送20H保存

EXIT:

RET;子程序返回

;P1口按键数据处理子程序

KEYCHULI:

PUSHPSW;保护现场

CLRRS1;改变当前寄存器组为组1

SETBRS0

MOVP1,#0FFH;先向P1口写1

MOVA,P1;读P1口数据

CPLA;P1口数据取反

MOV20H,A;保存取反后的键值

CLRRS1;恢复当前寄存器组为组0

CLRRS0

POPPSW;恢复现场

RET;子程序返回

;数码管显示子程序DISP

;入口:

7FH,7EH,7DH,7CH,7BH,7AH,79H,78H(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)

DISP:

PUSHDPH

PUSHDPL

PUSHACC

PUSHPSW

CLRRS1;改变当前寄存器组为组1

SETBRS0

MOVR1,#78H;显示缓冲存储单元首地址

MOVR2,#0FEH;从右至左显示

MOVR5,#08H;循环次数,即驱动数码管的位数

DISP1:

MOVA,@R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A;送段控

MOVP2,R2;送位控

LCALLDL

MOVA,R2;延时1毫秒

RLA;获得新的位控码

MOVR2,A;保存新的位控码

INCR1;获得新的显示缓冲单元地址

DJNZR5,DISP1;循环没有结束则继续

DISP2:

POPPSW;恢复当前寄存器组的组号

POPACC

POPDPL

POPDPH

RET

;延时1ms子程序(晶振频率12MHz)DL

DL:

MOVR7,#02H

DL1:

MOVR6,#0FFH

DL2:

DJNZR6,DL2

DJNZR7,DL1

RET

;将78至7EH单元的内容交换子程序

JIAOHUAN:

MOV78H,79H

MOV79H,7AH

MOV7AH,7BH

MOV7BH,7CH

MOV7CH,7DH

MOV7DH,7EH

MOV7EH,7FH

RET

END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1