缘由单片机点阵显示数字和汉字,定时器20毫秒刷新一次-嵌入式-CSDN问答
#include<reg52.h>//头文件
//unsigned char js=0;
bit k=0;
unsigned char code CHARCODE[21][8]={
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, /*0*/{0x00,0x00,0x21,0x7f,0x01,0x00,0x00,0x00}, /*1*/
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, /*2*/{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, /*3*/
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, /*4*/{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, /*5*/
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, /*6*/{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, /*7*/
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, /*8*/{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, /*9*/
{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, /*P*/{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, /*R*/
{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, /*E*/{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, /*C*/
{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, /*H*/{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, /*I*/
{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, /*N*/{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00}, /*中*/
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //方形
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //铜钱形
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //三角形
};
void ZhongDuanSheZhi()
{
TH0+=0Xf7;/*定时器赋初值,定时2.5ms触发中断,自动补偿方式*/
TL0+=0X00;
TMOD=0X01;
TR0=1;
ET0=1; //开启定时器
EA=1; //全局中断开关
}
void main()
{
unsigned char wei=0,Xd=0,ww=0,zt=0, ys=0;
ZhongDuanSheZhi();
while(1)
{
if(k)//20毫秒刷新
{
P2=CHARCODE[wei][7-Xd];
if(!(ww*=2))++ww;
P3=~ww;
while(++ys);P3=255;
if(++Xd>7){Xd=0;++zt;}
k=0;
}
if(zt>40)//切换速度
{
zt=0;
if(++wei>20)wei=0;
}
}
}
void ZhongDuan() interrupt 1
{
k=1;
TH0=0Xf7;
TL0=0X00;
}