- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.2 部分软件设计
3.2.3 显示子程序
动态显示程序框图如图所示。 显示程序的要点有两个: 一是代码转换。 因为直接驱动 LED显示器的是字形码,而人们习惯的是 0、1、2、?、 F 等字符,因此,必须将待显示的字符转换成字形码。 转换用查表的方法进行。 二是通过软件实现逐位轮流点亮每个 LED。
为了实现代码转换, 首先开辟一个显示缓冲区, 将待显示的字符预先存放在缓冲区中。由于有 4 位 LED显示器,故不妨假设显示缓冲区长度为 4 个字节。显示缓冲区地址为 DIS0~DIS3 ,DIS0 单元与最左边一位 LED相对应, DIS3 单元与最右边一位 LED相对应。
开 始
8051 初始化
动态显示初始化
送位选字
查段选表
段选码送入
延时 1mS
指向下个显示缓冲单元
显示下一位
3 位显示完?
结 束
图 3-3
显示子程序方框图
程序清单如下:
DIS: ORG
0500H
MOV
A
,
MOV
DPTR
,#7F00H
MOVX
@DPTR
,A
MOV
R0
, #78H
MOV
R3
, #7FH
MOV
A
,R3
LD: MOV
DPTR
,#7F01H
MOVX
@DPTR, A
INC
DPTR
MOV
A
,@R0
ADD
A
,#0DH
MOVC
A
,@ DPTR
ACALL
DLY
MOV
A
,R3
JNB
A
,R0
RR
A
,LD1
MOV
R3
,A
INC
R0
AJMP
LD0
LD1: SJMP
LD1
DSEG: DB
3FH
, 06H,5BH,4FH,66H, 6DH
7DH
,07H,7FH, 6FH
DLY: MOV
R7
,#02H
DL: MOV
R6
,#0FFH
DL1: DJNZ
R6
, DL1
DJNZ
R7
,DL
RET
3.2.4 键盘子程序
键盘扫描子程序框图如图
开 始
有键闭合吗?
调用延时子程序
两次调用
延时子程序
确有键闭合吗
判断闭合键号
闭合键释放吗
键号 →A
返 回
图 3-4 键盘扫描子程序框图
键盘扫描子程序如下:
KEY: ORG
ACALL
JNZ
ACALL
AJMP
K1: ACALL
ACALL
ACALL
JNZ
AJMP
K2: MOV
MOV
K3: MOV
MOV
MOVX
INC
INC
MOVX
JB
MOV
0440H
KS
K1
DIR
KEY
DIR
DIR
KS
K2
KEY
R2 , #0FEH
R4 , #00H
DPTR ,#PA
A ,R2
@DPTR,A
DPTR
DPTR
A ,@ DPTR
ACC.0 , L1
A ,#00H
;
;调用 KS判别是否有键按下
;有键按下转移
;无键按下,调延时子程序
;
;加长延时时间,消除键抖动
;
;调用 KS子程序,再次判别
有无键按下
;有键按下,转逐列扫描
;误读键,返回
;首列扫描字送 R2
;首列号送 R4
; A 口地址送 DRTR
;
;列扫描字送 8155A口
;指向 8155C口
;
;读取行扫描值
;第 0 行无键按下,转查第 1 行
;第 0 行有键按下,该行的行首键号
#00H
送
A
L1:
AJMP
JB
MOV
LK
ACC .1 ,L2
A ,#08H
#08H
;转求键号
;第 1 行无键按下,转查第 2 行
;第 1 行无键按下,该行的行首键号
送 A
L2:
AJMP
JB
MOV
LK
ACC .2 ,L3
A ,#10H
;转求键号
;第 2 行无键按下,转查第 3 行
;第 2 行有键按下, 该行的行首键号
#10H
送
A
L3:
AJMP
JB
MOV
LK
ACC.3 , NEXT
A ,#18H
;转查键号
;第 3 行无键按下,转查下一列
;第 3 行有键按下,该行的行首键号
#18H
送
LK:
K4:
ADD PUSH ACALL ACALL JNZ
A
A , R4
ACC
DIR
KS
K4
;形成键释放
;未释放,等待
;键释放,弹出堆栈送
;键扫描结束,返回
;修改列号
ACC
POP
ACC
;
RET
NEXT:INC
R4
;
MOV
A
, R2
;
JNB
ACC.7
,KEY
;8 列扫描完返回 KEY
RL
A
;未扫描完,扫描字左移一位,
变为下列扫描字
MOV
R2
,A
;扫描字暂存 R2
AJMP
K3
;
KS: MOV
DPTR
,#PA
; A 口地址送 DPTR
MOV
A
, #00H
;
MOVX
@DPTR ,A
;令扫描字 00H 送 A 口
INC
DPTR
;指向 C口
INC
DPTR
;
MOVX
A
,@
原创力文档


文档评论(0)