📄 main.c
字号:
/************http://hi.baidu.com/echoas***************
程序:LCD12864自定义显示字符(最多显示4个)
内容:ASCII码显示、自带字库显示(8192个)、自定义显示字符(4个)。
软件:keil uVision4
液晶:QYLCD12864HZ1(带字库)
作者:大海橡树
整理日期:2010-11-28 11:00
修改:无
备注:有什么错误的地方,欢迎网友们到空间留言
O(∩_∩)O~
************http://hi.baidu.com/echoas*****************/
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int //定义一下,方便使用
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7; //液晶的三个控制端
//sbit PSB=P2^4;//1---8位或4位并口方式;0---串口方式。单片机上电高电平,选择的是并口方式
//繁体中文字“龍”
uchar table[]={0x10,0x80,0x08,0x80,0x7E,0xFC,0x24,0x80,0x18,0xFC,0xFF,0x04,0x00,0xFC,0x3E,0x80,
0x22,0xF8,0x3E,0x80,0x22,0xF8,0x3E,0x80,0x22,0xFA,0x22,0x82,0x2A,0x82,0x24,0x7E};
//一个星星、一个月亮
unsigned char code zk[]={0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f,
0x3e,0x1f, 0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0,0x0f,0xc0,
};
//小人
uchar code table2[]={0x03,0xC0,0x04,0x20,0x04,0x20,0x03,0xC0,0x0C,0x30,0x14,0x28,0x14,0x28,0x14,0x28,
0x14,0x28,0x17,0xE8,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x0E,0x70,0x0E,0x70};
//喇叭
uchar code table3[]={0x00,0x39,0x00,0x6A,0x00,0xA8,0x01,0x29,0x7E,0x2A,0xFC,0x28,0xFC,0x29,0xCC,0x2A,
0xCC,0x28,0xFC,0x29,0xFC,0x2A,0x7E,0x28,0x01,0x29,0x00,0xAA,0x00,0x68,0x00,0x38};
uchar code table4[]="LCD12864";
uchar code table5[]="自定义显示字符";
uchar code table6[]="大海橡树";
void delay(uint i) //延时函数
{
while(--i);
}
void read_busy() //读忙标志 最高位为1则busy,不能进行读写操作
{
RS=0;
RW=1;
EN=1; //看时序
while(P0 & 0x80);
EN=0;
}
void write_LCD_command(uchar value) //写命令函数
{
read_busy(); //每次读写都要进行读忙标志
RS=0;
RW=0;
delay(200);
EN=1; //EN从1--0锁存数据
P0=value;
delay(200);
EN=0;
}
void write_LCD_data(uchar value) //写数据函数
{
read_busy();
RS=1;
RW=0;
delay(200);
EN=1; //EN从1--0锁存数据
P0=value;
delay(200);
EN=0;
}
void init_LCD() //8位并口方式LCD1864初始化函数
{
delay(4000); //等待时间>40ms
write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
delay(100); //等待时间>100us
write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
delay(37); //等待时间>37us
write_LCD_command(0x0C);//显示设定:整体显示、游标关、不反白
delay(100); // 等待时间>100us
write_LCD_command(0x01);//清屏指令
delay(10000); //等待时间>10ms
write_LCD_command(0x06);//进入点设定:地址指针加1
}
/*=============================================
自定义汉字函数:CGRAM自定义显示字符
地址 显示编码
0x40 0x0000
0x50 0x0002
0x60 0x0004
0x70 0x0006
共可显示四个自定义字符!
显示自定义字符前,先要设定显示的位置,否则会乱码
==============================================*/
void CGRAM()
{
uchar i;
write_LCD_command(0x30);//基本指令操作
write_LCD_command(0x40);//设定CGRAM字符的位置
for(i=0;i<16;i++)
{
write_LCD_data(table[i*2]);
write_LCD_data(table[i*2+1]);//送显示数据到CGRAM区中
}
write_LCD_command(0x50);
for(i=0;i<16;i++)
{
write_LCD_data(zk[i*2]);
write_LCD_data(zk[i*2+1]);
}
write_LCD_command(0x60);
for(i=0;i<16;i++)
{
write_LCD_data(table2[i*2]);
write_LCD_data(table2[i*2+1]);
}
write_LCD_command(0x70);
for(i=0;i<16;i++)
{
write_LCD_data(table3[i*2]);
write_LCD_data(table3[i*2+1]);
}
}
void main()
{
uchar num;
init_LCD();
while(1)
{
write_LCD_command(0x80);
for(num=0;num<8;num++)
{
write_LCD_data(table6[num]);
}
write_LCD_command(0x84);
for(num=0;num<8;num++)
{
write_LCD_data(table4[num]);
}
write_LCD_command(0x90);
for(num=0;num<14;num++)
{
write_LCD_data(table5[num]);
}
CGRAM();
write_LCD_command(0x98);
write_LCD_data(0x00);
write_LCD_data(0x00);//第一个自定义显示字符编码为:0x0000
write_LCD_command(0x99);
write_LCD_data(0x00);
write_LCD_data(0x02);//第一个自定义显示字符编码为:0x0002
write_LCD_command(0x9A);
write_LCD_data(0x00);
write_LCD_data(0x04);//第一个自定义显示字符编码为:0x0004
write_LCD_command(0x9B);
write_LCD_data(0x00);
write_LCD_data(0x06);//第一个自定义显示字符编码为:0x0006
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -