新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于51单片机秒表的程序设计

基于51单片机秒表的程序设计

作者:时间:2012-07-09来源:网络收藏

;主程序

;――――――――――初始化程序―――――――――――

MAIN: MOV TMOD,#61H ;置T0方式1定时,T1方式2计数

MOV TH0,#3CH ;T0置初值

MOV TL0,#0B0H

MOV TH1,#0C4H ;T1置初值

MOV TL1,#0C4H

MOV DPTR,#4400H ;8155控制口地址送DPTR

MOV A,#43H ;设置8155工作方式字

MOVX @DPTR,A ;设置PA、PB口输出,PC口输入

MOV 20H,#00H ;60秒计数单元置初值

MOV 21H,#14H ;50ms计数单元置初值

MOV SP,#3FH ;堆栈指针置初值

MOV R2,#08H n, bsp; ;LED待显示位数送R2

MOV R0,#30H ;显示缓冲区首址送R0

STAR: MOV @R0,#00H ;显示缓冲区清零

INC R0

DJNZ R2,STAR

CLR A ;累加器清零

;―――――――――――键盘查询程序――――――――――

KEY: ACALL KS ;调按键查询子程序判是否有键按下

JNZ K1 ;有键按下转移

ACALL DISP ;无键按下,调显示子程序延时

AJMP KEY ;继续查询按键

;―――――――――――键盘扫描程序――――――――――

K1: ACALL DISP ;键盘去抖延时

ACALL DISP

ACALL KS ;再次判别是否有键按下

JNZ K2 ;有键按下转移

AJMP KEY ;无按键,误读,继续查询按键

K2: MOV R3,#0FEH ;首列扫描字送R3

MOV R4,#00H ;首列号送R4

K3: MOV DPTR,#4401H ;PA口地址送DPTR,开始列扫描

MOV A,R3

MOVX @DPTR,A ;列扫描字送PA口

INC DPTR ;指向PC口

INC DPTR

MOVX A,@DPTR ;读取行扫描值

JB ACC.0,L1 ;第0行无键按下,转查第1行

MOV A,#00H ;第0行有键按下,行首键号送A

AJMP LK ;转求键号

L1: JB ACC.1,L2 ;第1行无键按下,转查第2行

MOV A,#08H ;第1行有键按下,行首键号送A

AJMP LK ;转求键号

L2: JB ACC.2,L3 ;第2行无键按下,转查第3行

MOV A,#10H ;第2行有键按下,行首键号送A

AJMP LK ;转求键号

L3: JB ACC.3,NEXT ;第3行无键按下,转查下一列

MOV A,#18H ;第3行有键按下,行首键号送A

AJMP LK

LK: ADD A,R4 ;形成键码送A

PUSH ACC ;键码入栈保护

K4: ACALL DISP

ACALL KS ;等待键释放

JNZ K4 ;未释放,等待

POP ACC ;键释放,弹栈送A

AJMP PR ;转键盘处理程序

NEXT: INC R4 ;修改列号

MOV A,R3

JNB ACC.3,KEY ;4列扫描完返回按键查询状态

RL A ;未扫描完,改为下列扫描字

MOV R3,A , nbsp; ;扫描字暂存R3

AJMP K3 ;转列扫描程序

;―――――――――――键盘处理程序―――――――――――――――

PR: CJNE A,#00H,PR01 ;不是KE0键码,转KE1键

AJMP KE0 ;转KE0键处理程序

PR01: CJNE A,#01H,PR02 ;不是KE1键码,转KE2键

AJMP KE1 ;转KE1键处理程序

PR02: CJNE A,#02H,PR03 ;不是KE2键码,返回按键查询

AJMP KE2 ;转KE2键处理程序

PR03: AJMP KEY

KE0: SETB TR0 ;启动T0

SETB TR1 ;启动T1

SETB ET0 ;允许T0中断

SETB EA ;开中断

AJMP KEY ;返回键盘查询状态

燃气报警器相关文章:燃气报警器原理


评论


相关推荐

技术专区

关闭