动态数码管的原理及其显示

51单片上的数码管是由八个“8”构成,如图:

每个“8”都是由八个LED灯构成的,一共有八个“8”,一共32个LED,那如何控制对应的LED,组成想要的字符呢?

那就要了解数码管的电路图了,如图


 

图中的DIG就是所谓的“8”,DIG接阳极(12、9、8、6引口),11、7、4、2、10、5、3引口接阴极,DIG对应数码管图中的com。比如你要在第一个“8”中点亮“1”,先要点亮“8”中的b、c段,我们称之为位选,选择com1,称之为位选。

位选的a、b、c、d、e、f、g、dp要与M74HC573MIR有关,要开的话,则Y7C要为1,即译码器Y7为0,P2为1110 0000即0xe0

同理Y6为0,P2为1100 0000即0xc0

注意:DIG只能够一个一个显示的,那如何显示是一连串的字符能?

动态显示方法:
利用人眼“视觉残留”,依次点亮单个数码管,使人感觉8个数码管同时点亮!
【推荐】单个数码管显示时间为1ms或者2ms

显示0123456789可以通过STCAI-ISP中的范例程序,将其定义为数组,即可将十六进制对应为十进制,但是需要注意的是各数字是共阴极取法,要取反即加“~”

#include <STC15F2K60S2.H>
#include<intrins.h>


unsigned char cnt_shift=0;
void vDevice_ctrl(unsigned char P0data,unsigned char P2data)
{
	P0=P0data;
	P2=P2data;
	P2=0;
}
void Timer2_Init(void)		//1??@12.000MHz
{
	AUXR |= 0x04;			//?????1T??
	T2L = 0x20;				//???????
	T2H = 0xD1;				//???????
	AUXR |= 0x10;
	IE2 |= 0x04;                    //????2??
   EA = 1;
}
unsigned char smg_code[8]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07};
void smg_display()
{
	static unsigned char i=0;
		vDevice_ctrl(~smg_code[i],0xe0);
		vDevice_ctrl(0x01<<i,0xc0);
		i=(i+1)%8;

	

}
void vSystem_init()
{
	vDevice_ctrl(0,0xa0);

}
void main()
{
	vSystem_init();
	Timer2_Init();
	while(1)
	{
	
	
	}



}

void t2int() interrupt 12          
{
	cnt_shift++;
	smg_display();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值