基于C语言在8×8点阵上实现 I LOVE U 的动态显示

基于C语言在点阵上实现 I LOVE U 的动态显示。
本程序是基于STC-51开发板电路实现的。

#include

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

code unsigned char image[] = {		
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF,
0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,
0x99,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};      //图片字模表

void main()
{
	ENLED = 0;		
	ADDR3 = 0;		//使能U4(74HC138),选择点阵

	TMOD = 0x01;	 //设置T0为模式1
	TH0 = 0xfc;
	TL0 = 0x67;		 //设置定时初值为0xFC67,定时为1ms
	TR0 = 1;	     //打开定时器T0

	EA = 1;			 //打开总中断
	ET0 = 1;		 //打开T0中断

	while(1);
}

 //定时器T0中断,发生中断时更新图片
void InterruptTimer0() interrupt 1
{
	static unsigned char i = 0;     //点阵行号
	static unsigned char index = 0;	 //动态图片编号
	static unsigned char tmr = 0;    //用于200ms定时(每200ms更新一张图片)
	
	TH0 = 0xFC;
	TL0 = 0x67;	   //定时溢出时,重新赋值,保证每次定时为1ms

	P0 = 0xFF;	  //点阵消隐
	switch(i)
	{
		case 0 : ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;i++;P0 = image[0+index];break; //使第0行点阵数码管正极为高电平,通过P0点亮需要点亮的部分
		case 1 : ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;i++;P0 = image[1+index];break;
		case 2 : ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;i++;P0 = image[2+index];break;
		case 3 : ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;i++;P0 = image[3+index];break;
		case 4 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;i++;P0 = image[4+index];break;
		case 5 : ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;i++;P0 = image[5+index];break;
		case 6 : ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;i++;P0 = image[6+index];break;
		case 7 : ADDR2 = 1;ADDR1 = 1;ADDR0 = 1;i=0;P0 = image[7+index];break;
		default : break;
	}

	tmr++;
	if(tmr>=250)
	{
		tmr = 0;
		index++;
		if(index==33)
		{
			index = 0;
		}
	}
} 

显示效果如图所示:
基于C语言在8×8点阵上实现 I LOVE U 的动态显示_第1张图片
基于C语言在8×8点阵上实现 I LOVE U 的动态显示_第2张图片
基于C语言在8×8点阵上实现 I LOVE U 的动态显示_第3张图片
基于C语言在8×8点阵上实现 I LOVE U 的动态显示_第4张图片
基于C语言在8×8点阵上实现 I LOVE U 的动态显示_第5张图片

你可能感兴趣的:(C语言,编程)