带矩阵键盘的单片机数字时钟的设计与仿真汇编

更新时间:2023-05-15 03:41:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

汇编版矩阵键盘电子钟设计,带全部注释

任务:设计一个数字钟。外接6个LED数码管,分别显示时、分、秒,以24小时制显示时间。系统可由4×4键盘输入标准时间值。另有确认键和清除键,按清除键重新输入标准时间,按确认键开始计时工作。

LINE EQU 50H ; 行地址

ROW EQU 51H ; 行地址

VAL EQU 52H ; 获取的键盘值存的地址

ORG 0000H

JMP START

ORG 03H ; 外部中断0入口地址

JMP LSCAN ;跳转键盘扫描

START:

MOV 60H,#1 ;段地址时十位

MOV 61H,#2 ;段地址时个位

MOV 62H,#0 ;段地址分十位

MOV 63H,#0 ;段地址分个位

MOV 64H,#0 ;段地址秒十位

MOV 65H,#0 ;段地址秒个位

汇编版矩阵键盘电子钟设计,带全部注释

SETB IT0 ;触发方式为电平触发

SETB EX0 ; 开外部中断

SETB PX0 ; 设置外部中断0优先级为高

SETB EA ;开总中断

MOV TMOD,#01 ;设置定时器0为16位计数器

MOV R1,#60H;显示地址初始化

; MOV R1,#06H;显示6位

XS0: ;定时器重新赋初值

MOV TH0,#00H ;送定时器初值为00H,晶振786.432KHz,计满正好1秒 MOV TL0,#00H

XS: ;数码管显示扫描

MOV 70H,#0FEH ;送位地址

MOV DPTR,#TAB ;

MOV P2,70H

MOV A,60H ;送段地址时十位

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS ;延时调用1ms

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,61H ;送段地址时个位

ADD A,#10 ;加小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,62H ;送段地址分十位

MOVC A,@A+DPTR

汇编版矩阵键盘电子钟设计,带全部注释

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,63H ;送段地址分个位

ADD A,#10 ;加小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,64H ;送段地址秒时位

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H ;送段地址秒个位

MOV A,65H

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

JB TF0,JIA ;定时1秒调转到加1子程序

JNB P3.0,P100 ; 清零停止

JNB P3.1,P1000 ; 确定启动

AJMP XS ;返回继续扫描显示数码管

汇编版矩阵键盘电子钟设计,带全部注释

JIA: CLR TF0

MOV A,65H

CJNE A,#9,JIA1 ;不等于9转

MOV 65H,0

MOV A,64H

CJNE A,#5,JIA10 ;不等于5转

MOV 64H,#0 ;超过59秒置0

MOV A,63H

CJNE A,#9,JIA100 ;不等于9转

MOV 63H,#0

MOV A,62H

CJNE A,#5,JIA1000 ;不等于5转

MOV 62H,#0 ;超过59分置0

MOV A,61H

CJNE A,#9,JIA10000 ;;不等于9转

MOV 61H,#0 ;超过9点时个位置0

MOV A,60H

CJNE A,#2,JIA100000 ;不等于2转

MOV 60H,#0 ;时 十位超过2置0

AJMP XS0

P100: ; 清零停止

CLR TR0 ;停止定时器

MOV 60H,#0 ;依次给时分秒清零

MOV 61H,#0

MOV 62H,#0

MOV 63H,#0

MOV 64H,#0

MOV 65H,#0

汇编版矩阵键盘电子钟设计,带全部注释

AJMP XS0

P1000: SETB TR0 ;确定启动定时器

AJMP XS0

JIA100000:

INC 60H ;时 十位加1

AJMP XS0

JIA10000:

CJNE A,#3,JIAJIA ;不等于3跳转到加1程序

MOV A,60H

CJNE A,#02,JIAJIA ;不等于2跳转到加1程序

MOV 60H,#0 ;超过23点置0

MOV 61H,#0 ;

AJMP XS0

JIAJIA:

INC 61H ;时 个位加1

AJMP XS0

JIA1000:INC 62H ;分 十位加1

AJMP XS0

JIA100: INC 63H ;分 个位加1

AJMP XS0

JIA10: INC 64H ;秒 十位加1

AJMP XS0

JIA1: INC 65H ;秒 个位加1

AJMP XS0

RET ;子程序返回

YS1MS: MOV R6,#9H ;延时程序

YL1: MOV R7,#19H

汇编版矩阵键盘电子钟设计,带全部注释

DJNZ R6,YL1

RET

LSCAN: MOV LINE,#0 ;键盘扫描程序

MOV ROW,#0 ;桨键盘值清零

MOV P1,#00H

MOV P1,#0F0H

L1: JNB P1.0,L2 ;扫描第一行

LCALL YS1MS

JNB P1.0,L2

MOV LINE,#00H

LJMP RSCAN

L2: JNB P1.1,L3

LCALL YS1MS

JNB P1.1,L3

MOV LINE,#01H

LJMP RSCAN

L3: JNB P1.2,L4

LCALL YS1MS

JNB P1.2,L4

MOV LINE,#02H

LJMP RSCAN

L4: JNB P1.3,L5

LCALL YS1MS

JNB P1.3,L5

MOV LINE,#03H

L5: ;键盘扫描数码管显示子函数,小数点全亮表示进入或者键盘值状态

MOV 70H,#0FEH ;位地址

MOV DPTR,#TAB ;根据地址查表

MOV P2,70H

MOV A,60H ;段地址

ADD A,#10;小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS ;延时调用

MOV P0,#0FFH

MOV A,70H

RL A

汇编版矩阵键盘电子钟设计,带全部注释

MOV P2,70H

MOV A,61H

ADD A,#10

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,62H

ADD A,#10;小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,63H

ADD A,#10

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

MOV P2,70H

MOV A,64H

ADD A,#10;小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

汇编版矩阵键盘电子钟设计,带全部注释

RL A

MOV 70H,A

MOV P2,70H

MOV A,65H

ADD A,#10;小数点

MOVC A,@A+DPTR

MOV P0,A

LCALL YS1MS

MOV P0,#0FFH

MOV A,70H

RL A

MOV 70H,A

JMP L1

RSCAN:

MOV P1,#00H

MOV P1,#0FH

C1: JNB P1.4,C2 ;扫描第一列

MOV ROW,#00H

LJMP CALCU

C2: JNB P1.5,C3

MOV ROW,#01H

LJMP CALCU

C3: JNB P1.6,C4

MOV ROW,#02H

LJMP CALCU

C4: JNB P1.7,C1

MOV ROW,#03H

CALCU:

MOV A,LINE

MOV B,#04H

MUL AB

ADD A,ROW

PUSH ACC

Z: MOV A,P1

汇编版矩阵键盘电子钟设计,带全部注释

POP ACC

MOV @R1,A ;取值暂存

INC R1

CJNE R1,#66H,OUT ;取得的值输出

MOV R1,#60H

OUT: RETI ;中断返回

TAB: ;定义一个键盘值数组

DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

DB 040H,079H,024H,030H,019H,012H,002H,078H,000H,010H

END

本文来源:https://www.bwwdw.com/article/4p3e.html

Top