四位数码管
关键词: stm32 滴答时钟 数码管 四位数码管
主要内容:
- 数码管原理
- 四位数码管
- 驱动程序
- 测试程序
文档参考:
最新地址: https://taotaodiy-mcu.readthedocs.io/en/latest/sensor/digit.html
数码管原理
数码管主要用来显示数据。
数码管内部实际上就是8个发光二极管,我通过给A-H编号的发光二极管给高低不同的电平,最终使得数码管显示不同的字符。
如图所示,数码管分共阴(即发光二极管阴极连到一起)还是共阳(即发光二极管阳极连到一起)。
比如说我们希望,数码管显示5这个数字。那我们的思路是什么呢?
首先我们想要的效果应该是这样:
也就是,通过电路和程序控制数码管的A,F,G,C,D这五个发光二极管发光即可。
上图已经对数码管用A-H进行了排序,如果用0/1来表示发光二极管的亮灭,
5这个数字就可以得到下面的一串有序编码。
#对应的数码管编号
H G F E D C B A
#共阴二极管亮为1,灭为0
0 1 1 0 1 1 0 1 --> 0x6b
这样就得到一个编码,0x6b,
是的,数码管原理就是如此,我们给他这样一个编码就能在数码管上显示5
共阳数码管则相反
#共阳二极管亮为0,灭为1
1 0 0 1 0 0 1 0 --> 0x92
对于单个数码管我们就可以得出 0-f 的编码,如下。
#共阳数码管编码
unsigned int DIGIT_ANODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0~f
#共阴数码管编码
unsigned int DIGIT_CATHODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~f
多位数码管
上面是单个数码管的显示原理和数码管编码由来,当我们需要同时显示一段数据的时候就需要多段数码管,也就是多个数码管的组合。
这就存在一个问题,一个数码管需要8个IO来控制,那么再加几个数码管,不就把IO占用光了吗?
于是就有了位选,数码管通用八根段选,使用位选来控制单个数码管显示。
当然这样还是比较费IO,于是就有了各种数码管控制芯片。
文章开头的图片是一个四位数码管,使用TM1637来控制显示,下面是它的显示和控制原理。
数码管编码
这里的四位数码管唯一不一样的地方就是中间多了两个点,主要是为了显示时间,有那种闪烁的效果。
显示数