12864液晶屏驱动程序
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned char BMPheight;
BMPwith=*PicData;
PicData++;
BMPheight=(*PicData)/8;
PicData++;
//BMPLen=BMPheight/8*BMPwith
for(BMPheightLen=0;BMPheightLen<BMPheight;BMPheightLen++)
Series = Series << 1;
}
}
/***********************************
** 函数名称: Write_Data
** 功能描述: 传送数据
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/
//图像反色显示 0 否 1是
bit LCD_DisplayReserve_Driver;
//定义LCD显示的全局变量
#define CS_Port P3_0
#define A0_Port P3_1
#define SI_Port P3_2
{
switch (PIN)
{
case CS :
CS_Port=1;
break;
case A0 :
A0_Port=1;
break;
case SI :
SI_Port=1;
break;
case SCL :
SCL_Port=1;
break;
case RST :
RST_Port=1;
void LCD_setCharpos_Driver(unsigned char Lx,unsigned char Ly)
{
//当前像素显示位置
Lcd_CurrentX=Lx*16;
Lcd_CurrentY=Ly*2;
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
//图像反色显示 0 否 1是
if (LCD_DisplayReserve_Driver==0)
{
Write_Data(*PicData);
}
else
{
Write_Data(~(*PicData));
}
PicData++;
};
}
//显示一个Unicode
void LCD_disp_Putchar_Driver(unsigned int uChar)
PicData++;
};
}
}
void LCD_disp_DisplayImage_Driver(unsigned char * PicData,unsigned char PicLen) //信息显示
{
for(;PicLen>0;PicLen--)
{
#define SCL_Port P3_3
#define RST_Port P3_4
enum PINDefine{CS,A0,SI,SCL,RST};
//设置某一位
void SETBit(unsigned char PIN)
{
** 函数名称: Write_Instruction
** 功能描述: 传送命令
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/
void Write_Instruction(unsigned char cmd)
//串口移位输出
//--------------------------------------------------------------------------
void LCDShiftWrite(char datain)
{
unsigned char i;
unsigned char Series,Temp;
Write_Instruction((0x0f&Lx));
}
//设置像素显示坐标(y:0-7)
void LCD_setposY_Driver(unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
}
*/
//设置字符位置(x:0-8,y:0-3)
/*
控制器:st7565
串行驱动方式,唯一要注意的一点就是WR和RD这两个引脚虽然用不到,但是要接地,
否则无法正常显示。当时调了很久。不知道其他厂家的是否也这样。
*/
#include <AT89X52.H>
#include <INTRINS.H>
#include "LCD_Driver.h"
break;
}
}
//清某一位
void CLRBit(unsigned char PIN)
{
switch (PIN)
{
case CS :
CS_Port=0;
break;
case A0 :
A0_Port=0;
break;
case SI :
SI_Port=0;
break;
{
Write_Data(value);
}
}
}
//显示BMP图片
void LCD_DisplayBMP_Driver(unsigned char *PicData) //信息显示
{
unsigned char BMPwithLen,BMPheightLen;
unsigned char BMPwith;
Series = datain;
for(i=8;i>0;i--)
{
CLRBit(SCL); //SCL=0
Temp=Series & 0x80;
if(Temp)
{
SETBit(SI);//SI=1
}
else
{
CLRBit(SI);//SI=0
}
SETBit(SCL); //SCL=1
//设置像素显示坐标(x:0-127,y:0-7)
void LCD_setpos_Driver(unsigned char Lx,unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
Write_Instruction((0x10|(Lx>>4)));
{
CLRBit(CS); //CS=0
CLRBit(A0); //A0=0,命令
LCDShiftWrite(cmd);
SETBit(CS); //CS=1;
return;
}
//==============================================================================高一级函数
if (LCD_DisplayReserve_Driver==0)
{
Write_Data(*PicData);
}
else
{
Write_Data(~(*PicData));
}
void Write_Data(unsigned char dat)
{
CLRBit(CS); //CS=0
SETBit(A0); //A0=1,数据
LCDShiftWrite(dat);
SETBit(CS); //CS=1;
return;
}
/***********************************
}
//清屏
void LCD_CLS_Driver(char value)
{
unsigned char i,n;
for(i=0;i<9;i++)
{
LCD_setpos_Driver(0,i);
for(n=0;n<128;n++)
{
Lcd_CurrentY++;
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
for(BMPwithLen=0;BMPwithLen<BMPwith;BMPwithLen++)
{
//图像反色显示 0 否 1是
{
unsigned int i;
unsigned char *p;
if(uChar<128)
{
//for(i=0;i != ENGLISHCHARNUMBER;i++)
//{
//if(uChar==EnglishCode[i][0])
//}
//}
}
else
{
for(i=0;i!=GB_ZK_NUM;i++)
{
if(uChar==(GB_16[i].Index[0]*256+GB_16[i].Index[1]))
case SCL :
SCL_Port=0;
break;
case RST :
RST_Port=0;
break;
}
}
/***********************************
** 函数名称: Delay
** 功能描述: 延时时间=(n*9+17)*12/F
** 输 入: n
//字库
#include "hzk.h"
//当前字符显示的位置
//unsigned char Lcd_Charcter_CurrentX,Lcd_Charcter_CurrentY;
//当前像素显示位置
unsigned char Lcd_CurrentX,Lcd_CurrentY;
//{
p=(uChar-0x20)*(ENGLISHCHARLegth)+&nAsciiDot[0];
LCD_disp_DisplayImage_Driver(p, ENGLISHCHARLegth/2);
Lcd_CurrentY++;
Lcd_CurrentY--;
Lcd_CurrentX+=8;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
//break;
** 输 出 : 无
** 全局变量:无
** 调用模块: 无
******************************************/
void LCD_DelayMS(unsigned int n)
{
while(n--);
return;
}
//----------------------------------------------------
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
LCD_disp_DisplayImage_Driver(p+(ENGLISHCHARLegth/2),(ENGLISHCHARLegth/2));
Write_Instruction((0x0f&Lx));
Lcd_CurrentX=Lx;
Lcd_CurrentY=Ly;
}
/*
//设置像素显示坐标(x:0-127)
void LCD_setposX_Driver(unsigned char Lx)
{
Write_Instruction((0x10|(Lx>>4)));
BMPwith=*PicData;
PicData++;
BMPheight=(*PicData)/8;
PicData++;
//BMPLen=BMPheight/8*BMPwith
for(BMPheightLen=0;BMPheightLen<BMPheight;BMPheightLen++)
Series = Series << 1;
}
}
/***********************************
** 函数名称: Write_Data
** 功能描述: 传送数据
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/
//图像反色显示 0 否 1是
bit LCD_DisplayReserve_Driver;
//定义LCD显示的全局变量
#define CS_Port P3_0
#define A0_Port P3_1
#define SI_Port P3_2
{
switch (PIN)
{
case CS :
CS_Port=1;
break;
case A0 :
A0_Port=1;
break;
case SI :
SI_Port=1;
break;
case SCL :
SCL_Port=1;
break;
case RST :
RST_Port=1;
void LCD_setCharpos_Driver(unsigned char Lx,unsigned char Ly)
{
//当前像素显示位置
Lcd_CurrentX=Lx*16;
Lcd_CurrentY=Ly*2;
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
//图像反色显示 0 否 1是
if (LCD_DisplayReserve_Driver==0)
{
Write_Data(*PicData);
}
else
{
Write_Data(~(*PicData));
}
PicData++;
};
}
//显示一个Unicode
void LCD_disp_Putchar_Driver(unsigned int uChar)
PicData++;
};
}
}
void LCD_disp_DisplayImage_Driver(unsigned char * PicData,unsigned char PicLen) //信息显示
{
for(;PicLen>0;PicLen--)
{
#define SCL_Port P3_3
#define RST_Port P3_4
enum PINDefine{CS,A0,SI,SCL,RST};
//设置某一位
void SETBit(unsigned char PIN)
{
** 函数名称: Write_Instruction
** 功能描述: 传送命令
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/
void Write_Instruction(unsigned char cmd)
//串口移位输出
//--------------------------------------------------------------------------
void LCDShiftWrite(char datain)
{
unsigned char i;
unsigned char Series,Temp;
Write_Instruction((0x0f&Lx));
}
//设置像素显示坐标(y:0-7)
void LCD_setposY_Driver(unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
}
*/
//设置字符位置(x:0-8,y:0-3)
/*
控制器:st7565
串行驱动方式,唯一要注意的一点就是WR和RD这两个引脚虽然用不到,但是要接地,
否则无法正常显示。当时调了很久。不知道其他厂家的是否也这样。
*/
#include <AT89X52.H>
#include <INTRINS.H>
#include "LCD_Driver.h"
break;
}
}
//清某一位
void CLRBit(unsigned char PIN)
{
switch (PIN)
{
case CS :
CS_Port=0;
break;
case A0 :
A0_Port=0;
break;
case SI :
SI_Port=0;
break;
{
Write_Data(value);
}
}
}
//显示BMP图片
void LCD_DisplayBMP_Driver(unsigned char *PicData) //信息显示
{
unsigned char BMPwithLen,BMPheightLen;
unsigned char BMPwith;
Series = datain;
for(i=8;i>0;i--)
{
CLRBit(SCL); //SCL=0
Temp=Series & 0x80;
if(Temp)
{
SETBit(SI);//SI=1
}
else
{
CLRBit(SI);//SI=0
}
SETBit(SCL); //SCL=1
//设置像素显示坐标(x:0-127,y:0-7)
void LCD_setpos_Driver(unsigned char Lx,unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
Write_Instruction((0x10|(Lx>>4)));
{
CLRBit(CS); //CS=0
CLRBit(A0); //A0=0,命令
LCDShiftWrite(cmd);
SETBit(CS); //CS=1;
return;
}
//==============================================================================高一级函数
if (LCD_DisplayReserve_Driver==0)
{
Write_Data(*PicData);
}
else
{
Write_Data(~(*PicData));
}
void Write_Data(unsigned char dat)
{
CLRBit(CS); //CS=0
SETBit(A0); //A0=1,数据
LCDShiftWrite(dat);
SETBit(CS); //CS=1;
return;
}
/***********************************
}
//清屏
void LCD_CLS_Driver(char value)
{
unsigned char i,n;
for(i=0;i<9;i++)
{
LCD_setpos_Driver(0,i);
for(n=0;n<128;n++)
{
Lcd_CurrentY++;
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
for(BMPwithLen=0;BMPwithLen<BMPwith;BMPwithLen++)
{
//图像反色显示 0 否 1是
{
unsigned int i;
unsigned char *p;
if(uChar<128)
{
//for(i=0;i != ENGLISHCHARNUMBER;i++)
//{
//if(uChar==EnglishCode[i][0])
//}
//}
}
else
{
for(i=0;i!=GB_ZK_NUM;i++)
{
if(uChar==(GB_16[i].Index[0]*256+GB_16[i].Index[1]))
case SCL :
SCL_Port=0;
break;
case RST :
RST_Port=0;
break;
}
}
/***********************************
** 函数名称: Delay
** 功能描述: 延时时间=(n*9+17)*12/F
** 输 入: n
//字库
#include "hzk.h"
//当前字符显示的位置
//unsigned char Lcd_Charcter_CurrentX,Lcd_Charcter_CurrentY;
//当前像素显示位置
unsigned char Lcd_CurrentX,Lcd_CurrentY;
//{
p=(uChar-0x20)*(ENGLISHCHARLegth)+&nAsciiDot[0];
LCD_disp_DisplayImage_Driver(p, ENGLISHCHARLegth/2);
Lcd_CurrentY++;
Lcd_CurrentY--;
Lcd_CurrentX+=8;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
//break;
** 输 出 : 无
** 全局变量:无
** 调用模块: 无
******************************************/
void LCD_DelayMS(unsigned int n)
{
while(n--);
return;
}
//----------------------------------------------------
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
LCD_disp_DisplayImage_Driver(p+(ENGLISHCHARLegth/2),(ENGLISHCHARLegth/2));
Write_Instruction((0x0f&Lx));
Lcd_CurrentX=Lx;
Lcd_CurrentY=Ly;
}
/*
//设置像素显示坐标(x:0-127)
void LCD_setposX_Driver(unsigned char Lx)
{
Write_Instruction((0x10|(Lx>>4)));