说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出。

目录

一、预备知识

二、动态显示

三、让第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. 第七讲:串口通讯原理及操作流程(郭天祥)

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.计算机串行通信基础 1.并行通信 2.串行通信 ①异步通信 ②同步通信(了解即可) ③串 ...

  2. 第五讲:独立键盘、矩阵键盘的检测原理及实现(郭天祥)

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 目录 一.键盘的分类 二.独立键盘的识别 三.一个读取独立按键状态的程序 四.矩阵键盘的识别 五. ...

  3. 【Keil5 C51】AT89C52 数码管的动态显示

    数码管的动态显示原理 第一个数码管显示0,1s后第二个数码管显示1,直到第六个数码管显示5后又重新开始 #include <reg52.h>#define uint unsigned in ...

  4. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  5. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  6. tm1650中文资料_[STM8入门资料]第53讲 TM1650 LED数码管驱动芯片工作原理

    刘洋[剑齿虎]STM8开发板学习笔记 第53讲TM1650 LED数码管驱动芯片工作原理 目 录 53.1 特性描述 TM1650是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路.内部 ...

  7. 四、共阳数码管的动态显示

    目录 1.什么是 静态显示和动态显示? 2.数码管的动态显示 1.什么是 静态显示和动态显示? ①静态显示:COM1~4都是由P0控制,例如:P0给8,则COM1~4都是显示8: 如果要显示2018: ...

  8. STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现

    这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...

  9. SLAM十四讲笔记1

    文章目录 ch02 初识SLAM ch02-01 经典视觉SLAM框架 ch02-02 SLAM问题的数学表述 ch03 三维空间刚体运动 ch03.01 旋转矩阵:点和向量,坐标系 01 向量a在线 ...

最新文章

  1. Linux服务器信息检测Shell脚本
  2. PowerDesigner如何导出建表sql脚本(转)
  3. JavaScriptWindow使用对象
  4. 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
  5. 《Cortex-M0权威指南》之体系结构---嵌套中断控制器(NVIC)
  6. linux7telnet测试通是提示如何,如何优雅的使用telnet测试端口连通性
  7. 精灵图(雪碧图)一招解决定位难问题,再也不用猜位置或者ps测距离了
  8. 康涅狄格大学计算机科学排名,2019美国硕士研究生cs专业前100排名出炉,四校共坐榜首!...
  9. win7利用映射网络驱动器功能管理网站FTP空间
  10. 网络游戏客户端延迟处理
  11. 笛卡尔坐标变换: UVA1602
  12. 把泛型传给泛型方法。
  13. oracle 10g 与11g的几点常用区别
  14. nginx的卸载与安装详细步骤
  15. tinycore php,Tiny Core Linux 显示中文的方法
  16. js解析\遍历json数据中所有的键和值
  17. 西行漫记(14):慌神了
  18. 把一个字典的键值对加入到另一个字典中dict.update(dict2)
  19. Mac/Windows/Linus操作系统简析
  20. Java中如何注册协议

热门文章

  1. 不仅仅是更小的成人大脑——通过新生儿大脑成像了解后期的神经发育情况
  2. linux安装为知笔记
  3. 企业微信自定义客户画像
  4. im即时通讯聊天软件,完整的一套即时通讯IM源码
  5. 如何购买合适的笔记本
  6. Python基础之pyautogui模块(详细总结鼠标键盘操作)
  7. 超融合平台中折腾linux(ubuntu/centos)虚拟机
  8. msxml6.10.1129.0
  9. Python计算机视觉——第四章 照相机模型与增强现实
  10. Material+Icons