伟纳电子ME300B单片机开发系统演示程序解析Word文档下载推荐.docx
《伟纳电子ME300B单片机开发系统演示程序解析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《伟纳电子ME300B单片机开发系统演示程序解析Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
![伟纳电子ME300B单片机开发系统演示程序解析Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/140b1649-8ca7-4e50-a810-262ce34afe65/140b1649-8ca7-4e50-a810-262ce34afe651.gif)
SEGMENT
CODE
DATA_SEG
DATA
STACK_SEG
IDATA
K1
BIT
P1.4
K2
P1.5
RSEG
DATA_SEG
KEY_S:
DS
1
KEY_V:
DIS_DIGIT:
SEC:
DIS_INDEX:
HOUR:
MIN:
SEC100:
DIS_BUF:
8
BUF_HOUR_H
EQU
DIS_BUF
小时十位
BUF_HOUR_L
DIS_BUF+1
小时个位
BUF_MIN_H
DIS_BUF+3
分十位
BUF_MIN_L
DIS_BUF+4
分个位
BUF_SEC_H
DIS_BUF+6
秒十位
BUF_SEC_L
DIS_BUF+7
秒个位
STACK_SEG
STACK:
20
===============================================================================
CSEG
AT
0000H
JMP
MAIN
0000BH
LJMP
TIMER0
0001BH
TIMER1
CODE_SEG
MAIN:
USING
MOV
SP,
#(STACK-1)
P0,#0FFH
P2,#0FFH
TMOD,#011H
定时器0,
1工作模式1,
16位定时方式
TH0,#0FCH
TL0,#017H
TH1,#0DCH
CLR
A
TL1,A
HOUR,#12
A
MIN,A
SEC,A
SEC100,A
A,HOUR
B,#10
DIV
AB
DPTR,#DIS_CODE
MOVC
A,@A+DPTR
BUF_HOUR_H,A
时十位
A,B
BUF_HOUR_L,A
时个位
A,MIN
BUF_MIN_H,A
BUF_MIN_L,A
A,SEC
BUF_SEC_H,A
BUF_SEC_L,A
BUF_HOUR_H+02H,#0BFH
BUF_HOUR_H+05H,#0BFH
DIS_DIGIT,#0FEH
DIS_INDEX,A
IE,#08AH
使能timer0,1
中断
SETB
TR0
TR1
KEY_V,#03H
MAIN_LP:
LCALL
SCAN_KEY
键扫描
JZ
MAIN_LP
无键返回
R7,#10
延时10ms
DELAYMS
延时去抖动
再次扫描
KEY_V,KEY_S
保存键值
PROC_KEY
键处理
SJMP
调回主循环
SCAN_KEY:
扫键扫描子程序
保存按键状态到key_s
返回:
---
按键是否按下(BOOL)
C,K1
读按键K1
ACC.0,C
C,K2
读按键K2
ACC.1,C
KEY_S,A
XRL
A,KEY_V
RET
PROC_KEY:
键处理子程序
传入参数:
KEY_V
按键值
返回值:
无
EA
JNB
ACC.0,PROC_K1
ACC.1,PROC_K2
END_PROC_KEY
PROC_K1:
按键k1处理
INC_HOUR
小时加1
PROC_K2:
按键K2处理
INC
MIN
分钟加1
A,MIN
C
SUBB
A,#59
JC
K2_UPDATE_MIN
如果分钟等于60,则分清0,小时加1
K2_UPDATE_MIN:
更新分显示缓冲区
AB
=
/
10
更新分十位
A,B
%
10
更新分个位
END_PROC_KEY:
TIMER0:
定时器0中断服程序,
用于数码管的动态扫描
DIS_INDEX
显示索引,
用于标识当前显示的数码管和缓冲区的偏移量
DIS_DIGIT
位选通值,
传送到P2口用于选通当前数码管的数值,
如等于0xfe时,
选通P2.0口数码管
显于缓冲区基地址
PUSH
ACC
PSW
AR0
P2,#0FFH
先关闭所有数码管
A,#DIS_BUF
获得显示缓冲区基地址
ADD
A,DIS_INDEX
获得偏移量
R0,A
R0
基地址
+
偏移量
A,@R0
获得显示代码
P0,A
显示代码传送到P0口
P2,DIS_DIGIT
A,DIS_DIGIT
位选通值左移,
下次中断时选通下一位数码管
RL
DIS_DIGIT,A
DIS_INDEX加1,
下次中断时显示下一位
ANL
DIS_INDEX,#0x07
当DIS_INDEX等于8(0000
1000)时,
清0
POP
RETI
TIMER1:
定时器1中断服务程序,
产生时基信号10ms
B
DPH
DPL
SEC100
A,SEC100
A,#100
是否中断100次(达到1s)
END_TIMER1
<
1S
SEC100,#00H
达到1s
INC_SEC
秒加1
END_TIMER1:
INC_SEC:
SEC
UPDATE_SEC
INC_MIN
UPDATE_SEC:
SEC
A,@A+DPTR
BUF_SEC_L,A
INC_MIN:
UPDATE_MIN
UPDATE_MIN:
更新分个位
INC_HOUR:
HOUR
小时加1
A,#24
UPDATE_HOUR
如果小时等于24,则小时清0
HOUR,A
小时清0
UPDATE_HOUR:
A,#9
UPDATE_HOUR1
如果小时小于10,则十位0不显示
BUF_HOUR_H,A
UPDATE_HOUR2
UPDATE_HOUR1:
BUF_HOUR_H,#0FFH
UPDATE_HOUR2:
BUF_HOUR_L,A
DELAYMS:
延时子程序
传入参数:
R7
延时值(MS)
返回值:
A,R7
END_DLYMS
DLY_LP1:
R6,#185
DLY_LP2:
NOP
DJNZ
R6,DLY_LP2
R7,DLY_LP1
END_DLYMS:
END
OF
DIS_CODE:
DB
0C0H
0F9H
0A4H
0B0H
099H
092H
082H
0F8H
080H
090H
0FFH
END
=========================
源程序(C语言)
/*******************************************************************************
wl010.C
简易电子时钟,LED数码管显示
上电时初始化显示:
12-00-00
****
******