前言
数码管作为显示的部件,在小家电中得以广泛的应用
一、数码管动态扫描的应用和原理?
如果根据一个数码管是8位的话,只用单独的I/O来控制,需要用到32+4个I/O,显然这样比较浪费单片机的资源。
通常条件下,人眼的识别连贯图像的速度是24帧/秒,也就是1000毫秒/24帧,大约为40ms(毫秒)。所以我们可以利用这个人眼观看影像时,产生的视觉延迟。(来欺骗大脑)
二、案例
1.软件方案
代码如下(示例):
unsigned char u8Led_Cache[4]; //用来显示的数码管数据的缓存
void Scan_Led(unsigned char data)
{
if(data & 0x01) LED_A_ON;
else LED_A_OFF;
if(data & 0x02) LED_B_ON;
else LED_B_OFF;
if(data & 0x04) LED_C_ON;
else LED_C_OFF;
if(data & 0x08) LED_D_ON;
else LED_D_OFF;
if(data & 0x10) LED_E_ON;
else LED_E_OFF;
if(data & 0x20) LED_F_ON;
else LED_F_OFF;
if(data & 0x40) LED_G_ON;
else LED_G_OFF;
if(data & 0x80) LED_DP_ON;
else LED_DP_OFF;
}
//中断函数
DEFINE_ISR(Timer1_2ms,0x10)//2ms触发,16M主频
{
static unsigned char i=0;
COM1_OFF; COM2_OFF;
COM3_OFF; COM4_OFF;//消隐
Scan_Led(u8Led_Cache[i]);
if(i == 0) COM1_ON;
else if(i == 1) COM2_ON;
else if(i == 2) COM3_ON;
else if(i == 3) COM4_ON;
if(i < 4) ++i;
else i=0;
Clean_A=0; Clean_P=0; //清除中断标志
}
这里需要把GRID段关闭,然后把SEG段打开,然后再打开GRID段,操作不当会造成数码管虚影。
2.硬件方案
原理图如下:
4个数码管共用SEG段,在不同的时间段打开不同的GRID段。 (注意数码管的共阴共阳问题)
总结
本人抱着学习的心态 , 欢迎大家指教 , 无论是代码或者电路方面的疑问或者存在错误 , 本人乐意解答和学习,欢迎加本人QQ 243700588