单片机--点亮数码管
本文于 1108 天之前发表,文中内容可能已经过时。
经过几个晚上的初步学习,我渐渐结合起来一年前学习的微机原理的一些知识。虽然不一定能搞懂,但是现在确实是通过看原理图、看引脚,逐渐掌握了一点东西。本篇记录在点亮单片机数码管中遇到的问题。
1、动态数码管
原理:动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
位选就是数码管位置(亮灭)的选择;段选就是数码管笔段(亮灭)的选择。
共阳和共阴:
简单来讲,共阴数码管就是把com端接地,其他要点亮的某段就接高电平;共阳数码管,就把com接高电平,其他需要点亮的某段就接地。
LED代码表
这个表很有用,编程的时候需要对照着它来摘取段选码。需要注意的是,段选码是十六进制的,因此编程时需要写成
0x3F
类似的格式。引脚图:
当我们需要从头开始开发的时候,我们需要一个引脚图,如下所示。
段选信号:单片机的P00-P07这8个IO口控制的是数码管的段选信号,因此所有数码管的段选都是一样的。
位选信号:上面COM口连接的是非常重要的位选信号,为了节约IO口,单片机会通过38译码器来转换,通过查阅74HC138译码器得知对应的IO口为P22/P23/P24。
2、程序实现
1 | typedef unsigned char u8; |
code的作用:code的作用是告诉单片机,定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改。因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。
1 | void digdisplay()//全部点亮,一次 |
要注意delay的大小,如果delay太大会造成类似于流水灯的效果。
P0=0x00
这句经过实测没有影响。
参考资料:
1、数码管的段选和位选是什么意思? https://www.uyuyao.com/zuoye/5576154
2、数码管共阳和共阴是什么意思?https://www.zhihu.com/question/39882534
3、C语言中的“code”是什么意思啊?https://zhidao.baidu.com/question/106734427.html
赞赏是不耍流氓的鼓励