#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//sbit SH_CP=P2^0;
//sbit DS=P2^1;
sbit ST_CP=P2^1;
sbit EN_154=P2^0;
uchar code testtab[] = // 顺向、逐列、阴码
{
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
uchar code Tabinit[]= //初始化显示数组,检测是否有灯坏
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //16
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //16
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
} ;
uchar code PEAK_LOGO[]=
{
//匹克LOGO+ "PEAK"
0x00,0x00,0x00,0x18,0x00,0x38,0x00,0x78,0x00,0xF8,0x01,0xD8,0x03,0x98,0x07,0x18,
0x0E,0x18,0x1C,0x18,0x0E,0x18,0x07,0x18,0x03,0x98,0x01,0xD8,0x00,0xD8,0x00,0x58,
0x00,0x18,0x00,0x08,0x20,0x02,0x3F,0xFE,0x3F,0xFE,0x20,0x42,0x20,0x40,0x20,0x40,
0x20,0x40,0x30,0xC0,0x1F,0x80,0x0F,0x00,0x00,0x00,0x20,0x02,0x3F,0xFE,0x3F,0xFE,
0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x30,0x86,0x00,0x00,0x00,0x02,
0x00,0x0E,0x00,0x3E,0x00,0xF2,0x03,0xC0,0x0F,0x40,0x3C,0x40,0x0F,0x40,0x03,0xC0,
0x00,0xF2,0x00,0x3E,0x00,0x0E,0x00,0x02,0x00,0x00,0x20,0x02,0x3F,0xFE,0x3F,0xFE,
0x21,0xC2,0x03,0x60,0x06,0x30,0x2C,0x1A,0x38,0x0E,0x30,0x06,0x20,0x02,0x00,0x00,
};
uchar code PEAK[ ]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //16 空白
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //16
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
//匹克LOGO+ "PEAK"
0x00,0x00,0x00,0x18,0x00,0x38,0x00,0x78,0x00,0xF8,0x01,0xD8,0x03,0x98,0x07,0x18,
0x0E,0x18,0x1C,0x18,0x0E,0x18,0x07,0x18,0x03,0x98,0x01,0xD8,0x00,0xD8,0x00,0x58,
0x00,0x18,0x00,0x08,0x20,0x02,0x3F,0xFE,0x3F,0xFE,0x20,0x42,0x20,0x40,0x20,0x40,
0x20,0x40,0x30,0xC0,0x1F,0x80,0x0F,0x00,0x00,0x00,0x20,0x02,0x3F,0xFE,0x3F,0xFE,
0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x30,0x86,0x00,0x00,0x00,0x02,
0x00,0x0E,0x00,0x3E,0x00,0xF2,0x03,0xC0,0x0F,0x40,0x3C,0x40,0x0F,0x40,0x03,0xC0,
0x00,0xF2,0x00,0x3E,0x00,0x0E,0x00,0x02,0x00,0x00,0x20,0x02,0x3F,0xFE,0x3F,0xFE,
0x21,0xC2,0x03,0x60,0x06,0x30,0x2C,0x1A,0x38,0x0E,0x30,0x06,0x20,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //作为空格
//I CAN PLAY
0x00,0x00,0x00,0x00,0x20,0x02,0x3F,0xFE,0x3F,0xFE,0x20,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0xF8,0x1C,0x1C,
0x38,0x0E,0x30,0x06,0x30,0x06,0x30,0x06,0x30,0x06,0x18,0x0C,0x0C,0x18,0x00,0x00,
0x00,0x02,0x00,0x0E,0x00,0x3E,0x00,0xF2,0x03,0xC0,0x0F,0x40,0x38,0x40,0x38,0x40,
0x0F,0x40,0x03,0xC0,0x00,0xF2,0x00,0x3E,0x00,0x0E,0x00,0x02,0x00,0x00,0x00,0x02,
0x3F,0xFE,0x3F,0xFE,0x1C,0x02,0x0E,0x00,0x07,0x80,0x01,0xE0,0x00,0x70,0x00,0x38,
0x20,0x1C,0x3F,0xFE,0x3F,0xFE,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// I CAN
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x20,0x02,0x3F,0xFE,0x3F,0xFE,0x20,0x42,0x20,0x40,0x20,0x40,0x30,0xC0,0x39,0xC0,
0x1F,0x80,0x0F,0x00,0x00,0x00,0x3F,0xFE,0x3F,0xFE,0x00,0x06,0x00,0x06,0x00,0x06,
0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x0E,0x00,0x3E,
0x00,0xF2,0x03,0xE0,0x0F,0x20,0x3C,0x20,0x0F,0x20,0x03,0xE0,0x00,0xF2,0x00,0x3E,
0x00,0x0E,0x00,0x02,0x20,0x00,0x30,0x00,0x38,0x00,0x2C,0x00,0x06,0x00,0x03,0x02,
0x01,0xFE,0x01,0xFE,0x03,0x02,0x06,0x00,0x2C,0x00,0x38,0x00,0x30,0x00,0x20,0x00,// PLAY
} ;
//字模提取格式:顺向、逐列、阴码 MICROSOFT SANS SERIF 字宽32 字高25 MATRIX-8X8-GREEN 右旋90度 上下翻转
// MATRIX-8X8-RED 左旋90度 上下翻转
void delay_us(uchar i) //微秒级延时
{
while(i--);
}
void delay_ms(unsigned int ms)//毫秒级延时
{
uchar j;
while(ms--)
for(j=0;j<123;j++);
}
/*
void WriteByte(uchar dat) //写入一个字节
{
uchar k;
for(k=0;k<8;k++)
{
dat=dat>>1;
DS=CY;
SH_CP=0;
SH_CP=1;
}
} */
void Disp_Ser(uchar dat) //串口发送程序
{
SBUF=dat;
while(TI==0);
TI=0;
}
void Disp_Tab(uchar *p,uchar n) //数组显示程序,包括左右移动显示
{
uchar num;
uchar temp=0;
for(num=n;num<16+n;num++) //+N移动字符
{
// Disp_Ser(*(p+2*(num+64)+1)); //显示高位Q8-Q15
// Disp_Ser(*(p+2*(num+64)+0)); //显示低位Q0-Q7
Disp_Ser(*(p+2*(num+48)+1)); //显示高位Q8-Q15
Disp_Ser(*(p+2*(num+48)+0)); //显示低位Q0-Q7
Disp_Ser(*(p+2*(num+32)+1)); //显示高位Q8-Q15
Disp_Ser(*(p+2*(num+32)+0)); //显示低位Q0-Q7
Disp_Ser(*(p+2*(num+16)+1)); //显示高位Q8-Q15
Disp_Ser(*(p+2*(num+16)+0)); //显示低位Q0-Q7
Disp_Ser(*(p+2*num+1)); //显示高位Q8-Q15
Disp_Ser(*(p+2*num+0)); //显示低位Q0-Q7
P1=temp;
EN_154=0;
ST_CP=0;
ST_CP=1;
delay_us(100);
temp++;
EN_154=1;
if(temp==16) //显示完一组,又从新开始
temp=0;
}
}
void Disp_Init(uchar *p)
{
uchar n;
for(n=0;n<65;n++) //n++左移
// for(m=0;m<2;m++) //重复显示多次,肉眼才能分辨
// {
Disp_Tab(p,n);
// }
for(n=64;n>0;n--) //n--右移
//for(m=0;m<2;m++) //重复显示8次
//{
Disp_Tab(p,n);
//}
}
void Disp_Static(uchar *p) //静态显示
{
uchar i;
for(i=0;i<40;i++)
Disp_Tab(p,0) ;
}
void Disp_LED(uchar *p) //动态显示
{
uchar n,m;
for(n=0;n<144;n++) //
for(m=0;m<4;m++) //重复显示8次
{
Disp_Tab(p,n);
}
}
uint CROL_16(uint m,uchar n) //16位数据循环移位程序,m为数据,n为移位位数
{
uint result;
result=m>>n;
m=m<<16-n;
result=result|m;
return result;
}
uchar yiwei_L(uint a,uint b,uchar numb)
{
uint c;
c=(a<<8)+b; //注意:这里移位要打括号
c=CROL_16(c,numb); //循环右移1位
b=(uchar)(c);
return b;
}
uchar yiwei_H(uint a,uint b,uchar numb)
{
uint c;
c=(a<<8)+b; //注意:这里移位要打括号
c=CROL_16(c,numb); //循环右移1位
a=c>>8; //移位后的高8位
a=(uchar)(a);
return a;
}
void Disp_Updown(uchar *p)//上下移动函数
{
uchar num,k,numb;
uint a1,b1,a2,b2,a3,b3,a4,b4;
uchar temp=0;
for(numb=0;numb<16;numb++) //numb=移动行数
for(k=0;k<10;k++)
for(num=0;num<16;num++) //+N移动字符
{
// a1=*(p+2*(num+64)+1);
// b1=*(p+2*(num+64));
a1=*(p+2*(num+48)+1);
b1=*(p+2*(num+48));
a2=*(p+2*(num+32)+1);
b2=*(p+2*(num+32));
- 1
- 2
前往页