9、数码管动态显示
- 项目目标
- 了解数码管动态显示原理,掌握其编程方法。
- 知识要点
- 数组、元素、利用数组实现查表。
- 局部变量和全局变量的作用域、可见性。
1、项目分析
- 通过演示数码管动态显示的操作过程,穿插讲解以下知识点:数组、元素、利用数组实现查表。局部变量和全局变量的作用域、可见性等。
2、技术准备
1、 数码管动态显示理论知识
复习:1位数码管和单片机的连接,其上显示1位十进制数的方法。
问题的提出:
如何显示4位十进制数?
- 用4个1位数码管拼成。
4个1位数码管和单片机如何连接
a、静态显示的连接方式、静态显示的优缺点(优点:不需要动态刷新;缺点:占用IO口线多)。
b、动态显示的连接方式(所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效)
c、动态显示的优缺点(缺点:需要动态刷新;优点:占用IO口线少)。
4位及4位以上比较适合用动态显示,为了方便使用,市售的4位一体数码管,内部已经按动态显示的连接方式连好了。
2、动态扫描的原理
- 在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?
- 动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像看的电影是有一帧一帧的画面显示的,当速度够快的时候看到它就是动态的。当显示数码管的速度够快的时候,也就可以看到它们是同时显示了。
3、数码管的动态显示原理
- 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
- 选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
- 动态显示的亮度比静态显示的亮度低,所以在选择限流电阻时应小于静态显示电路中电阻值。
- 总结
- 所谓的动态显示:轮流向各位数码管送出段选和位选,由于人眼的视觉残留作用,使人感觉好像各位数码管同时在显示。
- 所谓的动态显示:轮流向各位数码管送出段选和位选,由于人眼的视觉残留作用,使人感觉好像各位数码管同时在显示。
3、项目实施
项目1 一位数码管动态显示
实验需求:
- 第1位数码管从 0 - 9 循环显示
实验分析
字符 h g f e d c b a 十六进制 0 0 0 1 1 1 1 1 1 0x3f 1 0 0 0 0 0 1 1 0 0x06 2 0 1 0 1 1 0 1 1 0x5b 3 0 1 0 0 1 1 1 1 0x4f 4 0 1 1 0 0 1 1 0 0x66 5 0 1 1 0 1 1 0 1 0x6d 6 0 1 1 1 1 1 0 1 0x7d 7 0 0 0 0 0 1 1 1 0x07 8 0 1 1 1 1 1 1 1 0x7f 9 0 1 1 0 1 1 1 1 0x6f 实验代码
#include<reg52.h> //头文件包含特殊功能寄存器的定义 sbit pos1 = P2^4; sbit pos2 = P2^5; sbit pos3 = P2^6; sbit pos4 = P2^7; // 显示数值表0-9 unsigned char code dofly_table[10] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; void Delay(unsigned int t); //函数声明 void main() { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 pos1 = 1; pos2 = 0; pos3 = 0; pos4 = 0; while (1) { //主循环 for (i = 0; i < 10; i++) { //加