/* 名称:按键控制 8X8LED 点阵屏显
示图形
说明:每次按下K1时,会使8X8LED
点阵屏循环显示不同图形。
本例同时使用外部中断和定
时中断。
*/
#includereg51.h>
#includeintrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//待显示图形编码
ucharcodeM[][8]=
{
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //图3
};
uchari,j;
//主程序
voidmain()
{
P0=0xff;
P1=0xff;
TMOD=0x01; //T0方式1
TH0=(65536-2000)/256;//2ms定时
TL0=(65536-2000)%256;
IT0=1; //下降沿触发
IE=0x83; //允许定时器0、外部0中断
i=0xff; //i的初值设为0xff,加1后将从0开始
while(1);
}
//T0中断控制点阵屏显示
voidShow_Dot_Matrix()interrupt1
{
TH0=(65536-2000)/256;//恢复初值
TL0=(65536-2000)%256;
P0=0xff; //输出位码和段码
P0=~M[i][j];
P1=_crol_(P1,1);
j=(j+1)%8;
}
//INT0中断(定时器由键盘中断启动) voidKey_Down()interrupt0 { P0=0xff; P1=0x80; j=0; i=(i+1)%3; //i在0,1,2中取值,因为只要3个图形 TR0=1; } 扩展阅读:8X8LED 点阵显示数字程序