液晶显示的驱动程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
//坐标写入
void wrPosition(void)
{
LCD_SendComm(SFunSetE);
LCD_SendComm(lcdPosY);
LCD_SendComm(lcdPosX);
LCD_SendComm(SFunSetB);
}
//函数功能:全屏显示图形
//bmpCls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)
通常我们用的液晶显示都是4*16的字符/汉字显示:这里介绍4*16的液晶字符显示驱动程序!
//ms延时
void lcd_DelayMs (uint ms)
{
uchar i;
while (ms)
{
for (i = 0; i < 254; i++);
ms--;
}
}
//串行数据输入一字节
void LCD_SendByte(uchar s_data)
delay(300);
lcd_DelayMs(1);
LCD_SendComm(SEntryMode); //0000,0010 DDRAM地址归位
lcd_DelayMs(1);
LCD_SendComm(SOrigin); //1000,0000设定DDRAM 7位地址000,0000到地址计数器AC
LCD_SendComm(SOrigin);
delay(150);
}
//显示字符串X:行Y:列
void lcd_DispString(uchar X, Y, uchar *msg )
{
Set_Cursor(X, Y);
while (*msg != '\0')
{
LCD_SendData(*msg++);
//函数功能:字符反白显示
//输入参数:
//返回值:
//---------------------------------------------------------
void lcd_ConvertChar (uchar CX, CY, width)
{
lcd_DispPhoto(OFF,ON);
{
basicBlock = 16;
wrPosition ();
for (; basicBlock != 0; basicBlock--)
{
if (bmpCls == OFF)
{
LCD_SendData (*bmp++);
}
else if (bmpCls == ON)
{
LCD_SendData (0x00);
{
X = 0x90;
}
else if (X == 2)
{
X = 0x88;
}
else if (X == 3)
{
X = 0x98;
}
Y = X + Y;
LCD_SendComm(Y);
}
//清除屏幕
void lcd_Clear(void)
{
LCD_SendComm(SClear);
lcd_DelayMs(30);
{
if (line<4)
{
lcd_ConvertChar(line,0,16);
Set_Cursor(line,7);
}
}
//初始化
void LCD_init(void)
{
SCS=0;
lcd_DelayMs(30);
SCS=1;
SCS=1;
SCLK=0;
lcd_DelayMs(40);
LCD_SendComm(SFunSetE); //功能设置,一次送8位数据,功能设定(扩充指令)
delay(80);
}
//数据输入
void LCD_SendData(uchar send_data)
{
LCD_SendByte(0xFA & 0xFF); // 1 1 1 1 1 RW=0 RS=1 0
delay(1);
LCD_SendByte(send_data & 0xF0); //send D7 D6 D5 D4 0 0 0 0
}
}
lcdPosY++;
}
lcdPosX = 0x88;
}
LCD_SendComm(SFunDrawOn);
LCD_SendComm(SFunSetB);
}
//---------------------------------------------------------
//函数原形:void lcd_ConvertChar (uchar CX, CY, width)
{
if (halfLineCnt > 16)
{
LCD_SendData(0x00);
}
else
{
LCD_SendData (0xff);
}
}
lcdPosY++;
}
LCD_SendComm(SFunDrawOn);
LCD_SendComm(SFunSetB);
}
//---------------------------------------------------------
{
delay(1);
LCD_SendByte(0xF8 & 0xFF); //send 1 1 1 1 1 RW=0 RS=0 0
delay(1);
LCD_SendByte(comm_data & 0xF0); //send D7 D6 D5 D4 0 0 0 0
delay(1);
LCD_SendByte((comm_data & 0x0F)<<4); //send D3 D2 D1 D0 0 0 0 0
lcd_DelayMs(1);
//LCD_SendComm(0x04); //点设定,显示字符/光标从左到右移位,DDRAM地址加一
lcd_DelayMs(1);
// LCD_SendComm(0x0f); //显示设定,开显示,显示光标,当前显示位反白闪动
lcd_DelayMs(5);
}
lcdPosY = 0x80;
if (CX == 0)
{
CX = 0x80;
halfLineCnt = 16;
}
else if (CX == 1)
{
CX = 0x80;
halfLineCnt = 32;
}
else if (CX == 2)
{
CX = 0x88;
halfLineCnt = 16;
}
else if (CX == 3)
{
CX = 0x88;
halfLineCnt = 32;
}
lcdPosX = CX + CY;
for (; halfLineCnt != 0; halfLineCnt--)
{
basicBlock = width;
wrPosition();
for (;basicBlock != 0; basicBlock--)
{
uchar i;
SID=0;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(s_data & 0x80);
delay(1);
SCLK=1;
delay(1);
s_data<<=1;
delay(1);
SCLK=0;
delay(1);
}
}
//命令输入
void LCD_SendComm(uchar comm_data)
void lcd_DispPhoto (uchHale Waihona Puke Baidur *bmp, uchar bmpCls)
{
lcdPosX = 0x80;
halfScr = 2;
for (;halfScr != 0; halfScr--)
{
lcdPosY = 0x80;
halfLineCnt = 32;
for (;halfLineCnt != 0; halfLineCnt--)
//函数原形:void lcd_LineChoose (uchar line)
//函数功能:选中某行反白显示
//输入参数:
//返回值:
//---------------------------------------------------------
void lcd_LineChoose (uchar line)
delay(300);
LCD_SendComm(SFunSetB); //功能设置,一次送8位数据,基本指令集
delay(300);
LCD_SendComm(SDispOn); //0000,1100整体显示,游标off,游标位置off
delay(300);
LCD_SendComm(SClear); //0000,0001清DDRAM
delay(1);
LCD_SendByte((send_data & 0x0F)<<4); //send D3 D2 D1 D0 0 0 0 0
delay(80);
}
//设定光标位置
void Set_Cursor(uchar X, Y)
{
if (X == 0)
{
X = 0x80;
}
else if (X == 1)
相关文档
最新文档