数码bai管其实是由发光二极管组成,有共du阴极和共阳极之分,对于共阳极来说,zhi一位数码管由dao8个二极管组成,他们的阳极接在一起接+5v电源,而各个阴极与某个端口,如p1的8个引脚相连,当某个引脚输出低电平的时候数码管对应的二极管亮。 用引脚输出高低电平来控制数码管的8个子管的亮灭,达到数字和小数点显示的效果,通常要给每个数字做一个转换表,以便在编程的时候忽略转换过程,达到快速编程的目的,转换表一般采用枚举的方式,具体转换数字和你电路里面的连接方式有关系,用二进制写出来,再换算成16进制就好了。 数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。 |
你这个图数码管显示P0口输入段码,显示数码管具体数字;P2^0--P2^4显示位码,就是显示哪一位数码管亮,如果数码管位数多的话可以加一个译码器。 |
数码管部分使用共阳数码管,SMG1、2、3、4分别接数码管的第一位至第四位的公共端,然后A、B……G接数码管的七个笔画,DP是小数点,用排阻把他们上拉到5V电源端使其在所有笔画在单片机未输出低电平时保持高电位。和数码管的公共端保持一样的电平,数码管不亮。当SGM电平输出高电平,单片机的P0口输出对应的笔画输出低电平,那在数码管的笔画间产生电压差使数码管点亮。 举例:当SGM1端为高电平,P0口的P0^1 P0^2输出的是低电平,对应数码管的第一位的B和C笔画点亮,那就会在第一位显示1。比如要显示数字3,就要同时点亮A B C D G等5个笔画的LED,就要P0口的P0^0; P0^1; P0^2; P0^3; P0^6; 输出低电平。如此类推。 ![]() (图片来源于网络) 对照上边的数码管电路会更好理解些。 另外仿真图可以工作,但实际使用这样的接法就有不合理的地方,一般的单片机管脚直接驱动LED数码管电流都供不上,所以在位驱动的地方一般都会使用三极管扩流。或者使用诸如ULN2003那种驱动IC对段供电进行驱动。 ![]() (图片来源于网络) 数码管的驱动有很多种硬件接法,比如245缓冲器,595串转并驱动……,楼主先理解你自己发的仿真电路后再行研究。 |
再补充一下,P0口“不能显示高电平”【这个说法可能不大准确】(可以仿真的时候看是灰色的),所以需要上拉电阻的帮助。希望有所帮助😅 |
这个数码管是共阳极数码管,所以写程序的时候用共阳极数码管段码表(当然也可以用共阴极数码管段码表,只是写程序的时候需要取反了),数码管的更具体原理可以百度,和led其实很像。 A-G和DP是段码位,用于显示数字和字母还有小数点;1-4是位码,用于选择哪个数码管亮。两个合在一起使用需要用到动态扫描。 动态扫描简单的意思就是通过位码先选择哪个数码管亮,再发送相应的段码显示需要显示的数字字母及小数点;通过通过延时来取决于数码管闪烁的频率,只要延时恰当(小于肉眼可以看见的闪烁频率)即可认为是数码管无闪烁。希望能有所帮助😅 |