點陣的動畫顯示之左右移動

EricsT發表於2024-11-10

250ms左移


#include <reg52.h>

unsigned char code LedChar[] = 
{
	0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7
};

unsigned char code image[30][8] = 
{
	{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
	{ 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F },
	{ 0xFF, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F },
	{ 0xFF, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F },
	{ 0xFF, 0x0F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x0F },
	{ 0xFF, 0x87, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0x87 },
	{ 0xFF, 0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3 },
	{ 0xFF, 0xE1, 0x73, 0x73, 0x73, 0xF3, 0xF3, 0xE1 },
	{ 0xFF, 0x70, 0xB9, 0xB9, 0xB9, 0x79, 0xF9, 0xF0 },
	{ 0xFF, 0x38, 0xDC, 0xDC, 0xDC, 0xBC, 0x7C, 0xF8 },
	{ 0xFF, 0x9C, 0x6E, 0xEE, 0xEE, 0xDE, 0xBE, 0x7C },
	{ 0xFF, 0xCE, 0x37, 0xF7, 0xF7, 0xEF, 0xDF, 0x3E },
	{ 0xFF, 0x67, 0x9B, 0xFB, 0xFB, 0xF7, 0x6F, 0x9F },
	{ 0xFF, 0x33, 0xCD, 0xFD, 0xFD, 0x7B, 0xB7, 0xCF },
	{ 0xFF, 0x99, 0x66, 0x7E, 0x7E, 0xBD, 0xDB, 0xE7 },
	{ 0xFF, 0xCC, 0xB3, 0xBF, 0xBF, 0xDE, 0xED, 0xF3 },
	{ 0xFF, 0xE6, 0xD9, 0xDF, 0xDF, 0xEF, 0xF6, 0xF9 },
	{ 0xFF, 0x73, 0x6C, 0x6F, 0x6F, 0x77, 0x7B, 0xFC },
	{ 0xFF, 0x39, 0x36, 0x37, 0x37, 0x3B, 0x3D, 0x7E },
	{ 0xFF, 0x9C, 0x9B, 0x9B, 0x9B, 0x9D, 0x1E, 0x3F },
	{ 0xFF, 0xCE, 0xCD, 0xCD, 0xCD, 0xCE, 0x0F, 0x1F },
	{ 0xFF, 0x67, 0x66, 0x66, 0x66, 0x67, 0x07, 0x0F },
	{ 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x87 },
	{ 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3 },
	{ 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xE1 },
	{ 0xFF, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE0, 0xF0 },
	{ 0xFF, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF0, 0xF8 },
	{ 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
	{ 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
	{ 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF }
};							

void main(void)
{
	TMOD = 0x01;//定時器0設定為模式1

	TH0 = 0xFC;//設定定時器0初始值,0.001s
	TL0 = 0x67;

	EA= 1;//中斷總使能
	ET0 = 1;//定時器0中斷總使能

	TR0 = 1;//啟動定時器0
		
	while(1);
}

void interrupt0() interrupt 1
{
	static unsigned char i = 0;
	static unsigned char index = 0;
	static unsigned char tmr = 0;

	TH0 = 0xFC;//設定定時器0初始值,0.001s
	TL0 = 0x67;

	P0 = 0xFF;//消除顯隱

	if (250 == tmr)
	{
		tmr = 0;

		index++;
		if (30 == index)
			index = 0;
	}

	tmr++;

	P1 = LedChar[i];
	P0 = image[index][i];

	i++;
	if (8 == i)
		i = 0;
}

250ms右移


#include <reg52.h>

unsigned char code LedChar[] = 
{
	0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7
};

unsigned char code image[30][8] = 
{
	{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
	{ 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F },
	{ 0xFF, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F },
	{ 0xFF, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F },
	{ 0xFF, 0x0F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x0F },
	{ 0xFF, 0x87, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0x87 },
	{ 0xFF, 0xC3, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3 },
	{ 0xFF, 0xE1, 0x73, 0x73, 0x73, 0xF3, 0xF3, 0xE1 },
	{ 0xFF, 0x70, 0xB9, 0xB9, 0xB9, 0x79, 0xF9, 0xF0 },
	{ 0xFF, 0x38, 0xDC, 0xDC, 0xDC, 0xBC, 0x7C, 0xF8 },
	{ 0xFF, 0x9C, 0x6E, 0xEE, 0xEE, 0xDE, 0xBE, 0x7C },
	{ 0xFF, 0xCE, 0x37, 0xF7, 0xF7, 0xEF, 0xDF, 0x3E },
	{ 0xFF, 0x67, 0x9B, 0xFB, 0xFB, 0xF7, 0x6F, 0x9F },
	{ 0xFF, 0x33, 0xCD, 0xFD, 0xFD, 0x7B, 0xB7, 0xCF },
	{ 0xFF, 0x99, 0x66, 0x7E, 0x7E, 0xBD, 0xDB, 0xE7 },
	{ 0xFF, 0xCC, 0xB3, 0xBF, 0xBF, 0xDE, 0xED, 0xF3 },
	{ 0xFF, 0xE6, 0xD9, 0xDF, 0xDF, 0xEF, 0xF6, 0xF9 },
	{ 0xFF, 0x73, 0x6C, 0x6F, 0x6F, 0x77, 0x7B, 0xFC },
	{ 0xFF, 0x39, 0x36, 0x37, 0x37, 0x3B, 0x3D, 0x7E },
	{ 0xFF, 0x9C, 0x9B, 0x9B, 0x9B, 0x9D, 0x1E, 0x3F },
	{ 0xFF, 0xCE, 0xCD, 0xCD, 0xCD, 0xCE, 0x0F, 0x1F },
	{ 0xFF, 0x67, 0x66, 0x66, 0x66, 0x67, 0x07, 0x0F },
	{ 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x87 },
	{ 0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3 },
	{ 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC0, 0xE1 },
	{ 0xFF, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE0, 0xF0 },
	{ 0xFF, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF0, 0xF8 },
	{ 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
	{ 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF8, 0xFC },
	{ 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF }
};							

void main(void)
{
	TMOD = 0x01;//定時器0設定為模式1

	TH0 = 0xFC;//設定定時器0初始值,0.001s
	TL0 = 0x67;

	EA= 1;//中斷總使能
	ET0 = 1;//定時器0中斷總使能

	TR0 = 1;//啟動定時器0
		
	while(1);
}

void interrupt0() interrupt 1
{
	static unsigned char i = 0;
	static unsigned char index = 29;
	static unsigned char tmr = 0;

	TH0 = 0xFC;//設定定時器0初始值,0.001s
	TL0 = 0x67;

	P0 = 0xFF;//消除顯隱

	if (250 == tmr)
	{
		tmr = 0;

		if (0 == index)
			index = 30;
		index--;

	}

	tmr++;

	P1 = LedChar[i];
	P0 = image[index][i];

	i++;
	if (8 == i)
		i = 0;
}

相關文章