51单片机电子秒表设计
实验二
一、实验内容
电子秒表设计(键盘状态转移法)
用单片机实现电子秒表的功能,并采用0号键实现计时启动、停止和回零操作。第一次按0号键,计时开始;第2次按0号键,计时停止;第3次按0号键,计时回零。初始状态显示0.00;计时状态显示当前计时时间;停止计时显示最后计时时间。
二、实验程序设计
对各个状态和各任务号分配如下: 0状态:初始状态; 1状态:计时状态; 2状态:停止计时状态;
1
23号任务:计时归零,显示初始值。
根据上述分析,建立状态表如下:
表2.1 电子秒表键控状态表
程序流程图如图2.1所示。
图2.1 电子秒表键控主程序流程图
参考程序代码如下:
LOAD BIT P1.2 ;串行命令加载,上升沿激活
DIN BIT P1.0 ;串行数据输出,接CH451的数据输入 DCLK BIT P1.1 ;串行数据时钟,上升沿激活
DOUT BIT P3.3 ;INT1,键盘中断和键值数据输入,接CH451的数据输出 KEY_F BIT 00H ;20H.0位作有键标志位 ST EQU 21H ;存状态号
KEY EQU 22H ;存放键盘中断中读取的键码 KD EQU 23H ;存放键号
MSEC EQU 24H ;百分之一秒计数单元 SEC EQU 25H ;秒计数单元 MIN EQU 26H ;分计数单元
ORG 0000H AJMP MAIN
ORG 000BH ;定时器中断入口 LJMP CLOCK ORG 0013H
LJMP CH451_ INT1
ORG 100H
MAIN: MOV SP, #60H ;系统初始化
MOV ST,#0 CLR KEY_F MOV KD,#0
MOV P1,#60H ;禁止P1接口上的其它芯片 ACALL CH451_INIT ;CH451初始化
DISP: LCALL DISPLAY ;当前计时值显示 ML0: NOP
JNB KEY_F,ML0 ;无按键等待
CLR KEY_F ;有按键,清按键标志 MOV DPTR, #STAB ;计算状态行地址 MOV A, ST MOV B, #2 MUL AB ADD A, DPL MOV DPL, A MOV A, B ADDC A, DPH
MOV DPH, A ;DPTR=#STAB + ST*2 MOV A,KD ;读取次状态号 RL A ;KD*2 MOV R0,A
MOVC A,@A+DPTR ;获得次状态号 MOV ST,A ;更新ST MOV A,R0 INC A
MOVC A,@A+DPTR ;得到任务号 MOV B,#3
MUL AB ;每个LJMP占3个字节 MOV DPTR,#TASK
JMP @A+DPTR ;散转
TASK: LJMP P_0 ;跳转子程序0
LJMP P_1 ;跳转子程序1 LJMP P_2 ;跳转子程序2
P_0: … ;启动计时程序略,自己编写 P_1: … ;计时停止程序略,自己编写 P_2: … ;归零程序略,自己编写
;状态表
; K0
;ST, PR STAB: DB 1, 1 ; stat0
DB 2, 2 ; stat1 DB 0, 0 ; stat2
;------------------------------------ ------------------------------------
CH451_INIT:略 ;CH451初始化子程序参考实验一
;------------------------------------------------------------------------
CH451_INT1: ;键盘中断子程序
PUSH PSW ;现场保护 PUSH ACC CLR EX1
LCALL READ _CH451 ;读取键码
ACALL GET_KD ;获得键号 POP ACC POP PSW SETB EX1
CLR IE1 ;清中断标志 RETI
;------------------------------------------------------------------------ READ_CH451:; 略,参考实验一
;------------------------------------------------------------------------
GET_KD: ;获得键号子程序
MOV A,KEY
CJNE A,#40H,OUT
MOV A,#0 ;0# 键
;… … … 在使用多个键的情况下,继续判断其它键号
MOV KD,A ;存键号
SETB KEY_F ;置有键标志位 OUT: RET
;------------------------------------------------------------------------
CLOCK: ;略,定时器中断服务子程序,自己编写 DISPLAY:略,显示子程序,自己编写
;---------------------------------------------------------------------------- END
图2.2 定时器中断服务子程序流程图
图2.3 显示子程序流程图
二、实验操作步骤
1. 打开KEILuvison3软件,建立工程,设置调试环境,实验板上电;
2. 输入源程序,编译,连接,加载;
3. 运行程序,观察数码管显示应为000.00; 4. 按0键,启动计时,数码管显示计时时间;
5. 再按0键,停止计时,数码管显示累计时时间; 6. 再按0键,计时归零,数码管显示返回初始状态。
三、实验报告要求:
1. 实验名称 2. 实验内容
3. 实验设计,包括:
(1)硬件电路原理图 (2)程序流程图和源程序
4. 实验操作,包括调试程序的方法、过程、出现的问题及解决 5. 实验总结