//设计时空科技测试程序
//一般12864显示字符和汉字程序
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
sfr CLK_DIV =0x97;
sfr P1M1 =0x91;
sfr P1M0 =0x92;
sfr P3M1 =0xB1;
sfr P3M0 =0xB2;
sbit CS1= P1^4;
sbit R_S= P1^2;
sbit RES= P1^3;
sbit SCK= P1^1;
sbit SDA= P1^0;
bit Flage1=0;
void LcdInit();
void Clear();
void Delayms(uint ms);
void Comwrite(uchar cmd);
void Datwrite(uchar dat);
void disp_ch(unsigned char c,uCol,uPage);
void Setadd(uchar xl,uchar yl);
void disp_str(unsigned char *p,unsigned char uCol,uPage);
unsigned char CurOffset;
/*
#define LEFT 0
#define RIGHT 1
#define CMD 0
#define DATA 1
*/
#define ASC_CHR_WIDTH 8
#define ASC_CHR_HEIGHT 12
typedef struct typFNT_ASC16
{
char Index[1];
char Msk[16];
};
code struct typFNT_ASC16 ASC_16[] =
{
"1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
"2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
"3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
"4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00,
"5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
"6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
"7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,
"8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
"9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,
"0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
};
#define ASC_HZ_WIDTH 16
//#define ASC_HZ_HEIGHT 12
typedef struct typFNT_GB16
{
char Index[2];
char Msk[32];
};
code struct typFNT_GB16 GB_16[] = {
"液", 0x10,0x22,0x64,0x0C,0x80,0x04,0xC4,0x34,0x05,0xC6,0xBC,0x24,0x24,0xE6,0x04,0x00,
0x04,0x04,0xFE,0x01,0x02,0x01,0xFF,0x42,0x21,0x16,0x08,0x15,0x23,0x60,0x20,0x00,
"晶", 0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x80,0x00,0x00,
0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,
"模", 0x10,0x10,0xD0,0xFF,0x94,0x14,0xE4,0xBF,0xA4,0xA4,0xA4,0xBF,0xF4,0x26,0x04,0x00,
0x04,0x03,0x00,0xFF,0x08,0x89,0x8B,0x4A,0x2A,0x1E,0x2A,0x2A,0x4B,0xC8,0x48,0x00,
"块", 0x20,0x20,0x20,0xFF,0x20,0x20,0x10,0x10,0xFF,0x10,0x10,0x10,0xF8,0x10,0x00,0x00,
0x08,0x18,0x08,0x0F,0x84,0x46,0x22,0x1A,0x07,0x0A,0x12,0x22,0x43,0xC2,0x42,0x00,
"卖", 0x00,0x20,0x24,0x24,0x64,0xA4,0xA4,0x3F,0xA4,0x24,0x24,0x26,0xA4,0x60,0x00,0x00,
0x08,0x08,0x89,0x8A,0x4E,0x48,0x29,0x18,0x0F,0x18,0x28,0x68,0xC8,0x0C,0x08,0x00,
"场", 0x10,0x10,0xFF,0x10,0x10,0x42,0x42,0xE2,0x52,0x4A,0xC6,0x42,0x42,0xE0,0x40,0x00,
0x08,0x18,0x0F,0x44,0x24,0x10,0x0C,0x43,0x20,0x18,0x47,0x80,0x40,0x3F,0x00,0x00,
"千", 0x80,0x80,0x84,0x84,0x84,0x84,0x84,0xFC,0x82,0x82,0x83,0x82,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
"山", 0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,
0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,
"鸟", 0x00,0x00,0x00,0xFC,0x04,0x16,0x65,0x04,0x84,0x04,0xFE,0x04,0x00,0x00,0x00,0x00,
0x10,0x10,0x10,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x5A,0x92,0x42,0x3F,0x02,0x00,
"飞", 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xA2,0x10,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x41,0x83,0x60,0x00,
"绝", 0x20,0x30,0x28,0xA7,0x60,0x30,0x20,0xF0,0x28,0x27,0xF4,0x2C,0x24,0xF0,0x20,0x00,
0x22,0x66,0x23,0x12,0x12,0x12,0x00,0x7F,0x82,0x82,0x83,0x82,0x82,0x87,0xE0,0x00,
"万", 0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0xE4,0x44,0x06,0x04,0x00,
0x00,0x80,0x40,0x20,0x10,0x0E,0x01,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,
"径", 0x00,0x10,0x88,0xC4,0x23,0x80,0x82,0x42,0x22,0x12,0x1A,0x26,0x62,0x40,0xC0,0x00,
0x02,0x01,0x00,0xFF,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x60,0x40,0x00,
"人", 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0xC0,0x40,0x00,
"踪", 0x00,0x7E,0x22,0xE2,0x3E,0x10,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0xB4,0x0C,0x00,
0x20,0x7E,0x20,0x3F,0x12,0x12,0x21,0x19,0x45,0x81,0x7F,0x01,0x05,0x09,0x31,0x00,
"灭", 0x02,0x02,0x82,0x72,0x02,0x02,0x02,0xFE,0x02,0x82,0x42,0x22,0x32,0x03,0x02,0x00,
0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x04,0x08,0x10,0x20,0x60,0x20,0x00,
"孤", 0x00,0x02,0x02,0xF2,0x8A,0x46,0xFC,0x04,0xF4,0x04,0x02,0xFA,0x03,0x02,0x00,0x00,
0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0x20,0x3F,0x20,0x70,0x0F,0x30,0x60,0x20,0x00,
"舟", 0x80,0x80,0x80,0xFC,0x84,0x86,0x95,0xE4,0x84,0x84,0x84,0xFE,0x84,0xC0,0x80,0x00,
0x00,0x40,0x20,0x1F,0x00,0x00,0x02,0x0C,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
"蓑", 0x04,0x14,0x14,0xD4,0x5F,0x54,0x54,0x5C,0x54,0x54,0x5F,0xD4,0x14,0x96,0x04,0x00,
0x41,0x41,0x21,0x17,0xFD,0x45,0x25,0x0D,0x15,0x25,0x25,0x57,0xC9,0x41,0x01,0x00,
"笠", 0x10,0x90,0x88,0x87,0x8C,0x94,0xA6,0xD4,0x88,0x87,0x8C,0x94,0xC4,0x86,0x04,0x00,
0x00,0x40,0x40,0x40,0x42,0x4C,0x70,0x40,0x60,0x58,0x46,0x40,0x40,0x60,0x40,0x00,
"翁", 0x10,0x10,0x90,0x88,0xA4,0xB3,0xA8,0x24,0xA0,0xB3,0xA4,0x88,0xD0,0x90,0x10,0x00,
0x00,0x00,0x22,0x14,0x48,0x80,0x7F,0x00,0x22,0x14,0x48,0x80,0x7F,0x00,0x00,0x00,
};
uchar code Hanzi[]={
0xFF,
};
void Display(unsigned char sda,unsigned char sda1)
{
unsigned char i,j,k=0;
for(i=0;i<8;i++)
{
Comwrite(0xb0+k);
Comwrite(0x10);
Comwrite(0x00);
for(j=0;j<64;j++)
{ Datwrite(sda);
Datwrite(sda1);
}
k++;
}
}
/*
void Hanzi_Disp(void)
{
unsigned char i,j,k=0;
for(i=0;i<8;i++)
{
Comwrite(0xb0+k);
Comwrite(0x10);
Comwrite(0x04);
for(j=0;j<128;j++)
{Datwrite(Hanzi[i*128+j]);
}
k++;
}
}
*/
void main()
{
P1M1=0x00;
P1M0=0xff;
P3M1=0x00;
P3M0=0xff;
CLK_DIV=0x02;
LcdInit();
// while(1)
// {
// Clear();
/* Display(0xff,0xff);
Delayms(5000);
Display(0x55,0xaa);
Delayms(5000);
Display(0x00,0xff);
Delayms(5000);
Display(0xaa,0xaa);
Delayms(5000);
Display(0x55,0x55);
Delayms(5000);
//Hanzi_Disp();Delayms(5000);
Clear();
disp_str("液晶模块卖场",0,0);
disp_str("液晶模块卖场",0,2);
disp_str("液晶模块卖场",0,4);
disp_str("液晶模块卖场",0,6);
Delayms(4000);Delayms(4000); */
// Clear();
//Flage1=0;
//disp_str("液晶模块卖场卖场",0,0);
//disp_str("液晶模块卖场",0,2);
// disp_str("液晶模块卖场",0,4);
//Comwrite(0xd4);
// Delayms(50000);Delayms(50000);
// }
while(1)
{
Clear();
Display(0xff,0xff);
Delayms(5000);
Display(0x55,0xaa);
Delayms(5000);
Display(0x00,0xff);
Delayms(5000);
Display(0xaa,0xaa);
Delayms(5000);
Display(0x55,0x55);
Delayms(5000);
//Hanzi_Disp();Delayms(5000);
Clear();
disp_str("模块",0,0);Delayms(1000);
disp_str("模块",96,0);Delayms(1000);
disp_str("模块",48,3);Delayms(1000);
disp_str("模块",96,0);Delayms(1000);
disp_str("模块",0,6);Delayms(1000);
disp_str("模块",96,6);Delayms(1000);
Delayms(4000);Delayms(4000);
Clear();
Flage1=0;
disp_str("液晶模块卖场",0,0);
disp_str("液晶模块卖场",0,2);
disp_str("液晶模块卖场",0,4);
disp_str("012345678901234",0,6);
Delayms(5000);Delayms(5000);
}
}
void Delayms(uint ms)
{
uchar j;
while(ms--)
for(j=0;j<=20;j++);
}
void Comwrite(uchar cmd)
{
uchar data i,j;
CS1=0;
R_S=0;
SCK=1;
for(i=0;i<8;i++)
{
j=cmd;
SCK=0;
SDA=cmd&0x80;
SCK=1;
cmd=j<<1;
}
CS1=1;
// R_S=1;
}
void Datwrite(uchar dat)
{
uchar data i,j;
CS1=0;
R_S=1;
SCK=1;
for(i=0;i<8;i++)
{
j=dat;
SCK=0;
SDA=dat&0x80;
SCK=1;
dat=j<<1;
}
CS1=1;
// R_S=0;
}
void Clear()
{
unsigned char i,j,m=0;
for(i=0;i<8;i++)
{
Setadd(0,i);
for(j=0;j<128;j++)
Datwrite(0x00);
}
}
void Setadd(uchar xl,uchar yl)
{ uchar i;
xl+=4;
i=(xl+0)&0x0f;
xl=(xl>>4)+0x10;
Comwrite(0xb0+yl);
Comwrite(xl);
Comwrite(i);
}
void LcdInit()
{
RES=0;
Delayms(50);
RES=1;
Delayms(20);
Comwrite(0xaf); //
Comwrite(0x40); // lcd@hotlcd.com
Comwrite(0xa0);
Comwrite(0xa6);
Comwrite(0xa4);
Comwrite(0xa2);
Comwrite(0xc8);
Comwrite(0x2f);
Comwrite(0x20);
Comwrite(0x81); //
/* Comwrite(0xe2);
Comwrite(0xA2);
Comwrite(0xA1);
Comwrite(0xc0);
Comwrite(0x2c);
Comwrite(0x2e);
Comwrite(0x2F);
Comwrite(0x81); //
Comwrite(0x20);
Comwrite(0x22);
Comwrite(0xAF); //
Comwrite(0x40); // */
Clear();
}
void disp_ch(unsigned char c,uCol,uPage)
{
unsigned char k,j,ch_w;
unsigned char width;
unsigned char len;
len=sizeof(ASC_16)/sizeof(ASC_16[0]);
for(k=0;k<len;k++)
{
if(c == ASC_16[k].Index[0] ) break;
}
if(k<len)
{
if(c=='-'||c==':')
width=ASC_CHR_WIDTH-2;
else if(c=='|')
width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
else
width=ASC_CHR_WIDTH;
Setadd(uCol,uPage);
for(j=0;j<width;j++)
{
ch_w=ASC_16[k].Msk[j];
Datwrite(ch_w);
}
Setadd(uCol,uPage+1);
for(j=0;j<width;j++)
{
ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
Datwrite(ch_w);
}
}
}
void disp_hz(unsigned char *hz,uCol,uPage)
{
unsigned char k,j,ch_w;
//sizeof 用来求一个变量或者一种类型所占用的字节数
for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
{
if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
break;
}
Setadd(uCol,uPage);
for(j=0;j<ASC_HZ_WIDTH;j++)
{
ch_w=GB_16[k].Msk[j];
Datwrite(ch_w);
}
Setadd(uCol,uPage+1);
for(j=0;j<ASC_HZ_WIDTH;j++)
{
ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
Datwrite(ch_w);
}
}
void disp_str(unsigned char *p,unsigned char uCol,uPage)
{
unsigned char i=0;
while(p>0)
{
if(p < 128)
{
disp_ch(p,uCol,uPage);
uCol+=8;
}
else
{
disp_hz(&p,uCol,uPage);
uCol+=16;
i++;
}
if(Flage1==1) Delayms(200);
i++;
}
} |