定时器动态扫描数码管LED矩阵显示

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-15 14:45:50
/*   LED分布
     1
 2       3
     4
 5       6
     7   
*/ 
//阳极 码  阴极取反
// 0~f 数码管 ,不带点
const u8 table1[]={
	0x77,0x24,0x5d,0x6d,
	0x2e,0x6b,0x7b,0x25,
	0x7f,0x2f,0x3f,0x7a,
	0x53,0x7c,0x5b,0x1b
};
// 0~f 数码管 ,带点
const u8 table2[]={
	0xf7,0xa4,0xdd,0xed,
	0xae,0xeb,0xfb,0xa5,
	0xff,0xaf,0xbf,0xfa,
	0xd3,0xfc,0xdb,0x9b
}; 
DisplaydData[0]= ~table[NowTime.hour/10];
DisplaydData[1]= ~table[NowTime.hour%10];	   
DisplaydData[2]= ~table[NowTime.minute/10];
DisplaydData[3]= ~table[NowTime.minute%10];
DisplaydData[4]= ~table[NowTime.second/10];
DisplaydData[5]= ~table[NowTime.second%10];
DisplaydData[6]= ~0x00;

宏定义部分

#define  LEDGroupSum	   7	
extern U8 BlinkingBit;  //闪烁位 bit 为1则闪烁
extern U8 DisplaydData[LEDGroupSum]; //LED阴极控制

显示函数

void Display(void)
{	
	static U8 DisplayBit = 0; //POERTB[6:0]
	DisplayONEGroupLED(DisplayBit); //DisplayBit=x x代表显示的哪一组LED 
	DisplayBit++;
	if(DisplayBit>LEDGroupSum -1) DisplayBit= 0;
}

static void DisplayONEGroupLED(U8 i) 
{
	LEDNegative = 0xff; //消隐
	if((BlinkingBit& (0x01<<i))&&1==flag.Blinking)LEDNegative = 0xff;//对应LED组闪烁
	else LEDNegative = DisplaydData[ i ];
	LEDPositive &= 0x80; //bit[6:0]置0
	if(i<LEDGroupSum) LEDPositive |= 0x01<<i;//对应bit置1 bit[5:0]
}

定时器中断中 2ms一次

if(250==Count_2ms_Blinking){   //500ms定时
	Count_2ms_Blinking = 0;
	flag.Blinking = ~flag.Blinking;//闪烁标志
}
	
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!