嵌入式之数码管动态扫描


前言

数码管作为显示的部件,在小家电中得以广泛的应用


一、数码管动态扫描的应用和原理?

如果根据一个数码管是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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值