第四讲:数码管的动态显示原理和应用实现(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出。
目录
一、预备知识
二、动态显示
三、让第1、2、3个数码管显示123
一、预备知识
在我们学习数码管的动态显示之前,我们先来学习一个程序,就是让不同数码管显示不同的内容,当然,由于锁存器的存在,我们不能同时给两个数码管的段选赋值不同的内容,这样达不到我们想要的结果,我们可以间隔1s显示,所以,现在我要写一个程序,就是让6个数码管间隔1s,依次显示数字1~6,可能意思表达不清楚,就是第1秒时,第一个数码管显示1,其他不显示,第2秒时,第二个数码管显示2,其他不显示,依次类推,当第六个数码管显示6之后,又让第一个数码管从1开始。
这里我们仍然使用定时器来实现1s间隔。
同时,我们仿照数码管段选显示的编码表,对位选也创建了一个编码表。
具体代码如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={ //段选编码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={ //位选编码表
0xfe,0xfd,0xfb,
0xf7,0xef,0xdf};
sbit wela = P2^7;
sbit dula = P2^6;
uchar count,num1,num2;
void main()
{count = 0; //计数num1 = 0;num2 = 0;TMOD = 0x01;TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256;EA = 1;ET0 = 1;TR0 = 1;while(1); //等待中断产生
}void timer0() interrupt 1
{TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256;count++; //每次中断,计数值加1if(count == 20)//每过1s{count = 0;//计数值清0num1++; //段选值加1if(num1 == 7)//将段选范围限制在1~6num1 = 1;dula = 1;P0 = table[num1];dula = 0;wela = 1;P0 = table2[num2];wela = 0;num2++; //位选值加1if(num2 == 6)//将位选范围限制在1~6num2 = 0;}
}
然后我们修改间隔时间,通过修改定时器的初值,以及计数值count,让间隔时间从1s到500ms,再到100ms、10ms、5ms,其中观察数码管的显示情况,可以看到,当间隔时间达到5ms时,由于人的视觉暂留以及发光管的余晖,六个数码管上同时分别显示着1~6。
二、动态显示
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
我感觉实际电路中应该基本都是使用这种动态显示的连接方式。限流电阻的话由于使用了锁存器,锁存器的输出电流是足够的。
三、让第1、2、3个数码管显示123
如图所示
在实际工程中,像数码管动态显示,我们并不会用到定时器进行延时,一是对时间的精确度要求不高,二是可以将资源留给其他功能,一般都是自己编写一个delay函数,软件定时,利用delay函数进行延时。
代码思路:
这里我们其实仿照的也是预备知识里讲的那个程序,即对单个的数码管进行段选位选,让其显示出内容后,delay一段时间(上面的则是定时器间隔一段时间),然后对下一个数码管继续进行段选位选。基本思路就是这样,其实也是第二段内容中动态显示的原理,一种轮流向各个数码管赋值的思想。
然后在下面的程序中,为了使代码规范化,让显示的代码包装在一个函数中,这里只是让前3个数码管显示内容,实际上也可以扩展让6个数码管能同时显示不同的数字。
其中的变量temp用来存放所要显示的数字,由于temp是uchar型的变量,最大值是255,所以数码管显示的最大内容也是255,如果temp赋值大于255,则数码管的显示内容不是temp的值。可以用uint来定义temp变量。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit wela = P2^7;
sbit dula = P2^6;
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge);
uchar bai,shi,ge,temp;
void main()
{temp = 123; //想要显示的内容bai = temp/100; //百位shi = temp%100/10; //十位ge = temp%10; //个位while(1){display(bai,shi,ge);//调用显示函数}
}void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}void display(uchar bai,uchar shi,uchar ge)
{dula = 1; //段选P0 = table[bai]; //送入百位的编号dula = 0; wela = 1; //位选P0 = 0xfe; //第一位(即百位)的位选编号wela = 0;delay(5);dula = 1; //同理P0 = table[shi];dula = 0;wela = 1;P0 = 0xfd;wela = 0;delay(5);dula = 1;P0 = table[ge];dula = 0;wela = 1;P0 = 0xfb;wela = 0;delay(5);
}
第四讲:数码管的动态显示原理和应用实现(郭天祥)相关推荐
- 第七讲:串口通讯原理及操作流程(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.计算机串行通信基础 1.并行通信 2.串行通信 ①异步通信 ②同步通信(了解即可) ③串 ...
- 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)
说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...
- 【Keil5 C51】AT89C52 数码管的动态显示
数码管的动态显示原理 第一个数码管显示0,1s后第二个数码管显示1,直到第六个数码管显示5后又重新开始 #include <reg52.h>#define uint unsigned in ...
- 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...
- 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示
一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...
- tm1650中文资料_[STM8入门资料]第53讲 TM1650 LED数码管驱动芯片工作原理
刘洋[剑齿虎]STM8开发板学习笔记 第53讲TM1650 LED数码管驱动芯片工作原理 目 录 53.1 特性描述 TM1650是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路.内部 ...
- 四、共阳数码管的动态显示
目录 1.什么是 静态显示和动态显示? 2.数码管的动态显示 1.什么是 静态显示和动态显示? ①静态显示:COM1~4都是由P0控制,例如:P0给8,则COM1~4都是显示8: 如果要显示2018: ...
- STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现
这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...
- SLAM十四讲笔记1
文章目录 ch02 初识SLAM ch02-01 经典视觉SLAM框架 ch02-02 SLAM问题的数学表述 ch03 三维空间刚体运动 ch03.01 旋转矩阵:点和向量,坐标系 01 向量a在线 ...
最新文章
- Linux服务器信息检测Shell脚本
- PowerDesigner如何导出建表sql脚本(转)
- JavaScriptWindow使用对象
- 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
- 《Cortex-M0权威指南》之体系结构---嵌套中断控制器(NVIC)
- linux7telnet测试通是提示如何,如何优雅的使用telnet测试端口连通性
- 精灵图(雪碧图)一招解决定位难问题,再也不用猜位置或者ps测距离了
- 康涅狄格大学计算机科学排名,2019美国硕士研究生cs专业前100排名出炉,四校共坐榜首!...
- win7利用映射网络驱动器功能管理网站FTP空间
- 网络游戏客户端延迟处理
- 笛卡尔坐标变换: UVA1602
- 把泛型传给泛型方法。
- oracle 10g 与11g的几点常用区别
- nginx的卸载与安装详细步骤
- tinycore php,Tiny Core Linux 显示中文的方法
- js解析\遍历json数据中所有的键和值
- 西行漫记(14):慌神了
- 把一个字典的键值对加入到另一个字典中dict.update(dict2)
- Mac/Windows/Linus操作系统简析
- Java中如何注册协议