/***************************************************************/
//液晶字体处理部分
typedef struct typFNT_GB16
{
char Index[2];
char Mask[32];
};
code
struct typFNT_GB16 GB_16[]=
{
"李",//0
{
0x01,0x00,0x01,0x00,0x7F,0xFC,0x03,0x80,0x05,0x40,0x09,0x30,0x31,0x0E,0xDF,0xE4,
0x00,0x80,0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
},
"菁",//1
{
0x04,0x40,0xFF,0xFE,0x05,0x40,0x3F,0xF8,0x01,0x00,0x1F,0xF0,0x01,0x00,0xFF,0xFE,
0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x30
},
"川",//2
{
0x10,0x04,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,
0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x04,0x40,0x00
},
"带",//3
{
0x09,0x10,0x09,0x10,0x7F,0xFE,0x09,0x10,0x09,0x10,0x7F,0xFE,0x41,0x04,0x81,0x08,
0x1F,0xF0,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x50,0x11,0x20,0x01,0x00,0x01,0x00
},
"温",//4
{
0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,
0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00
},
"度",//5
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04
},
"传",//6
{
0x10,0x40,0x18,0x48,0x17,0xFC,0x20,0x40,0x20,0x80,0x60,0x84,0xAF,0xFE,0x20,0x80,
0x21,0x08,0x23,0xFC,0x20,0x08,0x21,0x10,0x20,0xA0,0x20,0x40,0x20,0x20,0x00,0x00
},
"感",//7
{
0x00,0x50,0x00,0x48,0x3F,0xFC,0x20,0x40,0x3F,0x48,0x20,0x48,0x2F,0x30,0x29,0x20,
0x4F,0x32,0x40,0x4A,0x80,0x06,0x09,0x08,0x28,0x84,0x28,0x16,0x67,0xF0,0x00,0x00
},
"器",//8
{
0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00
},
"的",//9
{
0x10,0x80,0x10,0x80,0x20,0x80,0x7C,0xFC,0x45,0x04,0x45,0x04,0x46,0x04,0x7C,0x84,
0x44,0x44,0x44,0x64,0x44,0x24,0x44,0x04,0x7C,0x04,0x44,0x28,0x40,0x10,0x00,0x00
},
"数",//10
{
0x08,0x20,0x49,0x30,0x2A,0x20,0x1C,0x20,0xFF,0x7E,0x1C,0x44,0x2B,0x44,0x48,0xC4,
0x08,0x28,0xFF,0x28,0x12,0x10,0x34,0x10,0x0C,0x28,0x32,0x4E,0xC0,0x84,0x00,0x00
},
"字",//11
{
0x02,0x00,0x01,0x00,0x3F,0xFC,0x20,0x04,0x40,0x08,0x1F,0xE0,0x00,0x40,0x00,0x80,
0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
},
"示",//12
{
0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,
0x11,0x20,0x11,0x10,0x21,0x08,0x41,0x0C,0x81,0x04,0x01,0x00,0x05,0x00,0x02,0x00
},
"波",//13
{
0x20,0x40,0x10,0x40,0x10,0x40,0x07,0xFE,0x84,0x44,0x54,0x40,0x54,0x40,0x17,0xF8,
0x25,0x08,0x24,0x90,0xE4,0x90,0x24,0x60,0x28,0x60,0x28,0x98,0x31,0x0E,0x26,0x04
},
"器",//14
{
0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00
},
"设",//15
{
0x40,0x00,0x21,0xF0,0x31,0x10,0x21,0x10,0x01,0x10,0x01,0x10,0xE2,0x0E,0x25,0xF8,
0x21,0x08,0x21,0x08,0x20,0x90,0x20,0x90,0x28,0x60,0x30,0x90,0x23,0x0E,0x0C,0x04
},
"计",//16
{
0x40,0x20,0x20,0x20,0x30,0x20,0x20,0x20,0x00,0x20,0xF3,0xFE,0x10,0x20,0x10,0x20,
0x10,0x20,0x10,0x20,0x10,0x20,0x12,0x20,0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20
},
"者",//17
{
0x01,0x00,0x01,0x08,0x3F,0xEC,0x01,0x10,0x01,0x20,0x7F,0xFE,0x00,0x80,0x03,0x00,
0x07,0xF8,0x1C,0x08,0xE4,0x08,0x07,0xF8,0x04,0x08,0x04,0x08,0x07,0xF8,0x04,0x08
},
"2",//18
{
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00
},
"0",//19
{
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x42,0x00,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00
},
"0",//20
{
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x42,0x00,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00
},
"7",//21
{
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x44,0x00,0x44,0x00,0x08,0x00,0x08,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00
},
"1",//22
{
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00
},
"2",//23
{
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00
},
"/",//24
{
0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,
0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x00,0x00
} ,
"当",//25
{
0x00,0x80,0x10,0x90,0x08,0x98,0x0C,0x90,0x08,0xA0,0x00,0x80,0x3F,0xFC,0x00,0x04,
0x00,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x3F,0xFC,0x00,0x04,0x00,0x00
} ,
"前",//26
{
0x08,0x10,0x06,0x18,0x04,0x20,0xFF,0xFE,0x00,0x00,0x3E,0x08,0x22,0x48,0x3E,0x48,
0x22,0x48,0x22,0x48,0x3E,0x48,0x22,0x48,0x22,0x48,0x2A,0x08,0x24,0x28,0x00,0x10
},
"温",//27
{
0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,
0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00
},
"度",//28
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04
}};
/*************************************************************/
#include<reg51.h>//头文件
#include<ziku.c>//包含字库.c
#include <absacc.h>//好汉.h
#include <intrins.h>//包含.h
#define uchar unsigned char//char宏定义
#define uint unsigned int//int宏定义
/**************************************************************
*12864液晶的定义(T6963驱动) *
***************************************************************/
sbit REST = P2^0;//复位脚
sbit C_D = P2^1;//L:data H:code
sbit C_E = P2^2;//Chip enable signal, active"L"
sbit R_D = P2^3;//read signal, active"L"
sbit rw= P2^4;//write signal, active"L"
#define width 15 //显示区宽度
#define Graphic 1
#define TXT 0
#define LcmLengthDots 128
#define LcmWidthDots 64
/**************************12864液晶的相关函数**********************/
void delay_nms(uint i)//延时函数
{
while(i)
i--;
}
void write_com(uchar com)//对液晶写一个指令
{
C_E = 0;
C_D = 1;
R_D = 1;
P0=com;
W_R = 0;// write
_nop_();
W_R = 1;// disable write
C_E = 1;
C_D = 0;
}
int sadsa;
void write_dat(uchar dat)//对液晶写一个数据
{
C_E=0;
C_D=0;
R_D=1;
P0=dat;
W_R=0;
_nop_();
W_R=1;
C_E=1;
C_D=1;
}
void write_dc(uchar com,uchar dat) //写一个指令和一个数据
{
write_date(dat);
write_commond(com);
}
//写两个数据和一个指令
void write_ddc(uchar com,uchar dat1,uchar dat2)
{
write_date(dat1);
write_date(dat2);
write_commond(com);
}
//LCD初始化函数
void F12864_init(void)
{
REST=0;
delay_nms(2000);//压实一大段时间
REST=1;//高电平复位
write_ddc(0x40,0x00,0x00); //设置文本显示区首地址
write_ddc(0x41,128/8,0x00); //设置文本显示区宽度
write_ddc(0x42,0x00,0x08); //设置图形显示区首地址0x0800
write_ddc(0x43,128/8,0x00); //设置图形显示区宽度
write_commond(0xA0); //设置光标形状 8x8方块
write_commond(0x80); //显示方式设置 文本and图形(异或)
write_commond(0x92); //设置光标
write_commond(0x9F); //显示开关设置 文本开,图形开,光标闪烁关
}
//**************************//清显示存储器函数
void F12864_clear(void)
{
unsigned int i;
write_ddc(0X24,0x00,0x00); //置地址指针为从零开始
write_commond(0xb0); //自动写
for(i = 0;i < 128 * 64 ;i++)write_date(0x00); // 清一屏
write_commond(0xb2); // 自动写结束
write_ddc(0x24,0x00,0x00); // 重置地址指针
}
//设定显示的地址
void goto_xy(uchar x,uchar y,uchar mode)
{
uint temp;
temp = 128 / 8 * y + x;
if(mode)//mode = 1为Graphic
{ //如果图形模式要加上图形区首地址0x0800
temp = temp + 0x0100;
}
write_ddc(0x24,temp & 0xff,temp / 256); //地址指针位置
}
//显示一个ASCII码函数
void Putchar(uchar x,uchar y,uchar Charbyte)
{
goto_xy(x,y,TXT);
write_dc(0xC4,Charbyte-32); //数据一次读写方式 //查字符rom
}
void display_string(uchar x,uchar y,uchar *p)
{
while(*p != 0)
{
if(x > 15 ) //自动换行 128*64
{
x = 0;
y++;
}
Putchar(x,y,*p);
++x;
++p;
}
}
//显示一串汉字,j = k + n为(n为要显示的字的个数),k为选择从哪个字开始
void dprintf_hanzi_string_1(struct typFNT_GB16 code *GB_16,uint X_pos,uint Y_pos,uchar j,uchar k)
{
unsigned int address;
unsigned char m,n;
while(k < j)
{
m = 0;
address = LcmLengthDots / 8 * Y_pos + X_pos + 0x0800;
for(n = 0;n < 16;n++) //计数值16
{
write_ddc(0x24,(uchar)(address),(uchar)(address>>8)); //设置显示存储器地址
write_dc(0xc0,GB_16[k].Mask[m++]); //写入汉字字模左部
write_dc(0xc0,GB_16[k].Mask[m++]); //写入汉字字模右部
address = address + 128/8; //修改显示存储器地址,显示下一列(共16列)
}
X_pos += 2;
k++;
}
}
void main()//主函数
{
F12864_init();//初始化12864
F12864_clear();//清屏12864
while(1)//循环
{
dprintf_hanzi_string_1(GB_16,0,0,10,3);//带温度传感器的
//dprintf_hanzi_string_1(GB_16,3,18,15,10);// 数字示波器
dprintf_hanzi_string_1(GB_16,1,18,18,15);// 设计者
display_string(7,3,":2008/5");
}
}