单片机_汇编编程_并行口驱动数码管显示
时间:2017/9/28
# 一、任务描述
通过汇编编程,通过单片机的IO口,直接输出驱动数码管,从而实现在数码管上,依次从0到9进行循环显示。
# 二、任务实现
## 2.1 硬件连接
目前的硬件线路如下:
主控芯片: STC 89C52
输入引脚: 无
输出引脚: P0.0 - P0.6 驱动共阳数码管
工作频率: 12MHz
[图 8_并行口驱动LED进行显示_IO]
## 2.2 分析命题
这次主要的功能如下:
1. 数据有次序的进行显示 <-- 涉及到了调用延时的功能
2. 发送的字符串信号是不同的 <-- 需要进行数据的查表
## 2.3 确定算法
该算法的主要实现方式是,先通过将数据写入数据表,然后依次地读取数据表中的数据,将其通过端口,将其发送到共阳数码管中,从而驱动数码管进行对应的显示。
## 2.4 流程图
[图 8_并行口驱动LED进行显示_流程图]
## 2.5 程序
```
ORG 00H
START:
MOV R1, #00H ; 设置寄存器指向起始处
NEXT:
MOV A, R1 ; 给寄存器赋初值
MOV DPTR, #TABLE ; 指向数据表
MOVC A, @A+DPTR ; 进行提取数据
MOV P0, A ; 数据输出
LCALL DELAY ; 进行延时
INC R1 ; 计数减一
CJNE R1, #10, NEXT ; 当计数器的计数满10个,则跳转
LJMP START
DELAY:
MOV R5, #100 ; 原先是20,现为了使得显示的更好些,将数值改为100,延时1ms左右
D2:
MOV R6, #20
D1:
MOV R7, #248
DJNZ R7, $
DJNZ R6, D1
DJNZ R5, D2
RET
TABLE: ; 针对于共阳发光二极管,单片机的上拉能力弱,但是下拉能力比上拉要强一些
DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
END
```
# 三、总结
这个实现的效果,在仿真软件上,貌似效果不怎么样,而在这个实际的开发板上,显示出来的效果还是挺不错的。
# 参考资料
[1] 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html