220 likes | 366 Views
第 3 章 数码管显示. 3.1 概述. 3.1.1 LED 数码管简介. 对于 0.5 吋(对角线尺寸) LED 数码管,每段对应一个发光管. 3.1.2 数字和字符的数码管显示图样. 3.1.3 共阳和共阴数码管. 共阳极:点亮时加高电平. 共阴极:点亮时加低电平. 段码:高电平驱动. 段码:低电平驱动. 3.2 数码管显示. 3.2.4 静态显示和动态显示. 静态显示 每个数码管有独立的驱动电路,亮度高电路复杂,编程容易。. 3 位共阳极数码管静态显示. 公共极直接接 +5V 电源. 独立的段码驱动电路.
E N D
第3章 数码管显示 3.1 概述 3.1.1 LED 数码管简介 对于0.5吋(对角线尺寸)LED 数码管,每段对应一个发光管
3.1.3 共阳和共阴数码管 共阳极:点亮时加高电平 共阴极:点亮时加低电平 段码:高电平驱动 段码:低电平驱动
3.2 数码管显示 3.2.4 静态显示和动态显示 静态显示每个数码管有独立的驱动电路,亮度高电路复杂,编程容易。 3位共阳极数码管静态显示 公共极直接接+5V电源 独立的段码驱动电路 (在“串口应用”讲解)
3.2.4 静态显示和动态显示 动态显示 所有数码管的段码共有一套驱动电路采用扫描显示。亮度稍低,电路简单,编程复杂, CPU实时扫描显示占用CPU的时间。 以4位共阳极数码管动态显示为例 ▶视频
送1的段码 送2的段码 送4的段码 送3的段码 共阳极数码管动态显示“1234”的过程(位扫描) 一个扫描周期 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
使用公共教室,必须先下课,再上课,有一个“间隙”,否则会怎样?使用公共教室,必须先下课,再上课,有一个“间隙”,否则会怎样? 消隐——扫描切换时,先灭掉“当前显示的数码管”,然后送下一位的段码,再点亮下一位数码管
依次驱动(扫描)公共极 动态显示电路 8路OC反相器,驱动电流>100mA(267页) 外接感性负载(电动机/继电器)时,接负载电源 3/8在内部是接在一起的,所以可任意接一个就可以了 相对应的段码接在一起 排电阻,作用限流
为了正确显示段码与位码必须同步! 动态显示 反相 0 1 0 101 P2口送“8的反相”的段码 P0口“位”码 00000001 00000001 00000001 00000001 11111110 同时送“8”段码:00000001,哪一个显示“8”呢? 反相器
消隐 消隐信号 0 1 0 0 0 0 101 101 111 消隐信号 00000001 00000001 00000001 00000001 11111110 无论段码如何,因为所有阳极都是低电平,所以全灭
编写程序程 C语言知识:宏(47页) 宏定义的一般格式: #define 宏名 字符串或数字 宏定义就是用宏名代替一个字符串,也就是简单的替换。 不是必须的,但更便于编写、修改、理解程序。 上述宏定义后 P_duan和P2就是等效的,好处是: 读程序时,P_duan的意义更清晰,表示段码驱动端口的意思。 如果想改为其他端口,只需修改宏定义即可,而不必“修改程序”。
C语言知识:一维数组(56页) 为了便于访问将同一类型数据的有序集合——数组。 数组的定义方式为: 类型数组名[常数]; 这两数组均为一组常数定义为code,存储在程序存储器(ROM)中,定义为data,存储在内存中,是不合理的!!
复 制 段码表的获取可通过“LED段码查询”实现。
将x的千/百/十/个位的段码存入nx[]中 动态显示x的千/百/十/个位 “取余”
填写“显示数组”程序 将x的千/百/十/个位的段码存入nx[]中 “取余” X=1234
利用循环语句填写“显示数组”程序及框图 i=0 i<4? ☞? 否 是 取出X的最低位 X除以10 i++ 先处理最低位比较方便,特别是使用循环语句时,也节省内存 。处理完个位,就可以”舍掉”个位(除以10)…… X=1234 显示数组:nx[4]={千位,百位,十位,个位}
动态显示程序 ☞程序框图
i=0 (显示千位) 执行必要的程序 i<4? 否 是 消隐 先送i位的段码 再送i位的位码 (扫描i位) 显示i位延时 i+1(下一位) i=0,1,2,3时,分别显示千/百/十/个位
i=0 (显示千位) 执行必要的程序 i<4? 否 是 消隐 先送i位的段码 再送i位的位码 (扫描i位) 显示i位延时 i+1(下一位) 再次进入for循环——动态显示 i=4时,跳出for循环 执行必要的程序,对于本例,没有任何其他程序,只有动态显示功能
i=0 (显示千位) 执行必要的程序 i<4? 处于消隐状态,所以位的COM无效 否 是 消隐 先送i位的段码 再送i位的位码 (扫描i位) 显示i位延时 i+1(下一位) 动态显示:必须反复执行 虽然送出第i位的段码但位码送出之前,仍处于消隐状态,第i位不亮。 程序执行到这儿,才显示第i位的数字 ☞交换一下会怎样?
这两个“动作”能否交换次序? 结论:不可以,这就是“序” i=0 (显示千位) 执行必要的程序 i<4? 否 是 消隐 先送i位的位码 (扫描i位) 再送i位的段码 显示i位延时 i+1(下一位) 第i位的COM有效,点亮了第i位,而第i位的段码没有送出,这样就把第(i-1)的数字瞬间显示在了第i位上啦,起不到消隐的目的。 程序执行到这儿,才将第i位的数字显示第i位上 ▶视频