#include<reg51.h> //头文件;声明
#include<intrins.h>
#define uchar unsigned char //uchar全部替换为unsigned char
#define uint unsigned int //同上
#define data1 P0 //宏定义,data1全部替换为p0
#define data2 P2 //同上
sbit s1=P3^6; //定义用符号s1来表示p3.6引脚
bit zxgd; //正向滚动
uint alt=0,net=0,sl=384; //S1=16(LED方阵大小)*2*字数,两半个黑屏算一字。
bit mode;
uchar code tab[]={ //将组存放在ROM里,不可更改,为节省RAM.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//半个黑屏,视觉缓冲
0x40,0x00,0x40,0x00,0x47,0xFF,0x47,0xFF,0x44,0x32,0x7F,0xE2,0x7F,0xC2,0x44,0x02,
0x44,0x02,0x7F,0xC2,0x7F,0xE2,0x44,0x22,0x47,0xFF,0x47,0xFF,0x40,0x00,0x40,0x00,/*"西",0*/
/* (16 X 16 , 宋体, 加粗 ) */
0x01,0x00,0x09,0x01,0x39,0x01,0x31,0x21,0x21,0x63,0x21,0xF2,0xAF,0x96,0xEF,0x1C,
0x61,0x08,0x21,0x3C,0x21,0xF4,0x21,0xC6,0x29,0x03,0x39,0x01,0x31,0x00,0x01,0x00,/*"安",1*/
/* (16 X 16 , 宋体, 加粗 ) */
0x20,0x04,0x21,0x06,0x21,0x06,0x3F,0xFC,0x3F,0xF8,0x21,0x08,0x21,0x0A,0x7F,0x22,
0x7F,0x22,0x49,0x22,0x7F,0xFE,0x7F,0xFE,0x49,0x22,0x7F,0x22,0x7F,0x22,0x00,0x02,/*"理",2*/
/* (16 X 16 , 宋体, 加粗 ) */
0x00,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x3F,0xFC,
0x3F,0xFC,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x00,0x04,/*"工",3*/
/* (16 X 16 , 宋体, 加粗 ) */
0x04,0x01,0x04,0x01,0x04,0x03,0x04,0x06,0x04,0x0C,0x04,0x38,0x04,0xF0,0xFF,0xC0,
0xFF,0xC0,0x04,0xF0,0x04,0x38,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x01,0x04,0x01,/*"大",4*/
/* (16 X 16 , 宋体, 加粗 ) */
0x02,0x20,0x0E,0x20,0x8C,0x20,0xE9,0x20,0x69,0x20,0x09,0x22,0x89,0x23,0xE9,0x7F,
0x69,0x7E,0x09,0xE0,0x19,0xA0,0x39,0x20,0xE8,0x20,0xCA,0x20,0x0E,0x20,0x0C,0x20,/*"学",5*/
/* (16 X 16 , 宋体, 加粗 ) */
0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x11,0x10,0x11,0x10,0x11,0x10,0xFF,0xFE,
0xFF,0xFF,0x11,0x11,0x11,0x11,0x11,0x11,0x1F,0xF9,0x1F,0xF9,0x00,0x0F,0x00,0x0F,/*"电",6*/
/* (16 X 16 , 宋体, 加粗 ) */
0x04,0x00,0x0C,0x00,0x3A,0x00,0xF2,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,
0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2B,0xF0,0x2B,0xFC,0x20,0x0E,0x20,0x0F,0x00,0x0F,/*"气",7*/
/* (16 X 16 , 宋体, 加粗 ) */
0x00,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x3F,0xFC,
0x3F,0xFC,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x00,0x04,/*"工",8*/
/* (16 X 16 , 宋体, 加粗 ) */
0x24,0x10,0x24,0x70,0x25,0xE0,0x7F,0xFF,0xFF,0xFF,0xC4,0xE0,0x44,0x62,0x7C,0x92,
0x7C,0x92,0x44,0x92,0x44,0xFE,0x44,0xFE,0x44,0x92,0x7C,0x92,0x7C,0x92,0x00,0x82,/*"程",9*/
/* (16 X 16 , 宋体, 加粗 ) */
0x02,0x20,0x0E,0x20,0x8C,0x20,0xE9,0x20,0x69,0x20,0x09,0x22,0x89,0x23,0xE9,0x7F,
0x69,0x7E,0x09,0xE0,0x19,0xA0,0x39,0x20,0xE8,0x20,0xCA,0x20,0x0E,0x20,0x0C,0x20,/*"学",10*/
/* (16 X 16 , 宋体, 加粗 ) */
0x00,0x00,0x7F,0xFF,0x7F,0xFF,0x5E,0x30,0x7B,0xF0,0x69,0xE1,0x38,0x83,0x34,0x8E,
0x24,0xFC,0xA4,0xF0,0xE4,0x80,0x64,0xFC,0x24,0xFE,0x2C,0x82,0x38,0x8E,0x30,0x8E,/*"院",11*/
/* (16 X 16 , 宋体, 加粗 ) */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//半个黑屏,视觉缓冲
};
void delay(uint z) //延时子函数,执行次数为z*110,时间为z ms(毫秒)。
{
uchar x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
void xianshi() //显示函数
{
uchar aa,i;
for(i=0;i<16;i++)
{
P1=i; //列扫描
data1=tab[net+aa]; //取出上8行数据输出
aa++;
data2=tab[net+aa]; //取出下8行数据输出
aa++;
delay(5); //延时
data1=0; //清屏
data2=0; //清屏
P1=0x00; //消除余辉
if(aa>30) aa=0; //字模地址
}
}
void main() //主函数
{
ET1=1; //使能定时器0
EA=1; //开启总中断
TR1=1; //开始计数
while(1) //无限循环
{
xianshi(); //调用显示函数
if(s1==0) //检测按键
{
delay(30); //延时消抖
TR1=~TR1; //按下暂停 ,暂按继续
while(!s1)xianshi();
delay(30);
}
}
}
void timer1() interrupt 3 //定时器中断
{
alt++; //根据计算机周期实现滚动速率控制
if(alt==10) //到一定的时间加以实现左移
{
alt=0;
net=net+2; //控制闪烁跨越距离
if(net>sl) //字移动数量
net=0;
}
}