LCD12864字符显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/********************************************************
LCD12864字符显示
********************************************************/
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int //宏定义
/*****LCD接口定义*****/
sbit LCD_RS = P2^0; //1:输入数据;0:输入命令
sbit LCD_RW = P2^1; //1:读数据0:写数据
sbit LCD_EN = P2^2; //LCM使能端
//sbit LCD_PSB = P2^3; //串并口选择1:并口模式; 0:串口模式;
#define LCD_DATA P1 //LCD总线端口
/*****LCD功能初始化指令*****/
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80
/*****汉字地址表*****/
uchar code addr_tab[]={ //便于根据汉字坐标求出地址
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
/*****n(ms)延时子程序*****/
void delayms(uint t) //约延时n(ms)
{
uint i;
while(t--)
{
for(i=0;i<150;i++);
}
}
/*****等待LCD忙*****/
void WaitBusy(void) //延时一小段时间,等待LCD空闲{
uchar i=5;
while(i--);
}
/*****写指令代码*****/
void Lcd_WriteCmd(uchar cmdcode)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = cmdcode;
LCD_EN = 0;
}
/*****写数据*****/
void Lcd_WriteData(uchar dispdata)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = dispdata;
// WaitBusy();
// WaitBusy();
// WaitBusy();
LCD_EN = 0;
}
/*****初始化LCD*****/
void Lcd_Init()
{
// LCD_PSB = 1;
delayms(50);
Lcd_WriteCmd(0x30); //选择基本指令集
delayms(1);
delayms(1);
WaitBusy();
Lcd_WriteCmd(0x30); //选择8bit数据流
delayms(1);
delayms(1);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delayms(1);
delayms(1);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H delayms(20);
}
/*****显示汉字*****/
void hanzi_Disp(uchar x,uchar y,uchar code *s)
{ //x、y为汉字坐标
Lcd_WriteCmd(addr_tab[8*x+y]); //写地址
delayms(1);
while(*s>0)
{
Lcd_WriteData(*s);delayms(1); //写数据
s++;
}
}
/*****显示图片(显示Gdram内容)*****/
/*绘图显示的步骤
1 关闭绘图显示功能
2 先将垂直的坐标(Y)写入绘图RAM地址
3 再将水平的位元组坐标(X)写入绘图RAM地址
4 将D15-D8写入RAM中
5 将D7-D0写入到RAM中