#include <reg51.h>
#include <intrins.h>
// 建立数字0-9的点阵字模表
void Delay(int Times);
unsigned char code Table[]=
{
0x08,0x1c,0x2a,0x49,0x08,0x08,0x08,0x00,
0x1c,0x2a,0x49,0x08,0x08,0x08,0x00,0x08,
0x2a,0x49,0x08,0x08,0x08,0x00,0x08,0x1c,
0x49,0x08,0x08,0x08,0x00,0x08,0x1c,0x2a,
0x08,0x08,0x08,0x00,0x08,0x1c,0x2a,0x49,
0x08,0x08,0x00,0x08,0x1c,0x2a,0x49,0x08,
0x08,0x00,0x08,0x1c,0x2a,0x49,0x08,0x08,
0x00,0x08,0x1c,0x2a,0x49,0x08,0x08,0x08
};
unsigned char i ,k, num; // 定义i为字模行号,k为显示时间,num为字号
unsigned char Scl; // 行选通信号
void main()
{
Scl = 0x01; // 显示从第一行开始
num = 0;
i =0;
k = 0;
TMOD = 0x01; // 定义定时器T 定时器方式1下
TH0 = 0xf6; // 设置时间常数
TL0 = 0x3c;
TR0 = 1; // 启动定时器T0
EA = 1; // 总中断允许
ET0 = 1; // 定时器T0 中断允许
while(1); // 等待定时中断
}
void LED_Display() interrupt 1
{
unsigned char j;
TH0 = 0xc1; // 重新装入时间常数
TL0 = 0x10;
P1 = Table[num*8+i]; // 向P1 发送行显示码
Delay(50);
if(++i == 8) i =0; // 若为最后一行,行计数值回零
if(++k ==100) // 定义每一个数字的显示时间
{ k = 0x00;
if(++num == 8) num = 0; // 如果显示的是最后一个数字,数字计数值回零
}
P0=Scl; // 发出选通行信号
//Delay(100);
Scl = Scl<<1; // 选择下一行
j++;
if(j == 8) // 如果是最后一行,回到第一行
{ Scl = 0x01;
j = 0;
} }
void Delay(int Time_ms)//延时子程序
{
int i;
unsigned char j;
for(i=0;i<Time_ms;i++)
{
for(j=0;j<110;j++)
{
}
}
}