📄 lcd_drive.c
字号:
/*********************************************************************************************************************************************
*文件名称: LCD_12864_drive.c
*作 者: lixin
*版 本: Version1.0
*说 明: CTM12864液晶驱动程序
*修改记录: 2007年8月11号
**********************************************************************************************************************************************/
#include "config.h"
//接口定义
/*P0.0-P0.7为数据线*/
#define LCD12864_RS 0x00000100 //P0.8对应寄存器选择,为1选择数据寄存器,为0选择指令寄存器
#define LCD12864_RW 0x00000200 //P0.9对应读写信号线,高电平时进行读操作,低电平时进行写操作
#define LCD12864_EN 0x00000400 //P0.10对应使能端E,当E端从高电平跳变成低电平时液晶模块执行命令
#define LCD12864_RST 0x00000800 //P0.11对应12864的RST端,复位端,高电平有效
#define LCD12864_CS1 0x00001000 //P0.12对应12864的CS1端,为1时选中左半屏
#define LCD12864_CS2 0x00002000 //P0.13对应12864的CS2端,为1时选中右半屏
//定义CTM12864/LCM12864的命令字
#define LCD12864_DISP_ON 0x3f //打开12864显示
#define LCD12864_DISP_OFF 0x3e //关闭12864显示
#define LCD12864_START_ROW 0xc0 //显示起始行0,可以用LCM12864_START_ROW+x设置起始行(x<64)
#define LCD12864_PAGE_START_ADDR 0xb8 //页起始地址,可以用LCM12864_PAGE_START_ADDR+x设置当前页(x<8)
#define LCD12864_COL_START_ADDR 0x40 //列起始地址,可以用LCM12864_COL_START_ADDR+x设置当前列(x<64)
//定义CTM12864/LCM12864的状态屏蔽码
#define LCD12864_STATUS_BUSY 0x80 //LCD12864忙状态屏蔽位
#define LCD12864_STATUS_DISP_OFF 0x20 //LCD12864显示关闭状态屏蔽位
#define LCD12864_STATUS_RST 0x10 //LCD12864复位状态屏蔽位
#define DATA_CON_DIR 0x000000ff //控制数据输入输出方向
#define LINE_CON_DIR 0x00003f00 //P0.8控制LCD12864_RS,P0.9控制LCD12864_RW,P0.10控制LCD1602_EN为输出,
//P0.11对应12864的RST端,/P0.12对应12864的CS1端,P0.13对应12864的CS2端
//函数声明
void LPC2104_init(void); //LPC2104初始化
void LCD12864_Write_cmd(uint8 command); //写命令
void LCD12864_Write_data(uint8 data); //写数据
uint8 LCD12864_Read_Data(void); //从LCD12864中读出数据
uint8 LCD12864_Read1Byte_X_Y(uint8 x,uint8 y); //从LCD12864指定点读取一字节数据
void LCD12864_Write1Byte_X_Y(uint8 x,uint8 y,uint8 LCD12864_data); //向LCD12864指定点写入一字节数据
void LCD12864_Clear_Screen(void); //清屏
void LCD12864_Frame(void); //在LCD12864上显示最大尺寸的边框在LCD12864上显示最大尺寸的边框
void LCD12864_Disp_Bitmap(uint8 t,uint8 *bitmap); //显示图像
void LCD12864_Disp_Char_x_16(uint8 t,uint8 b, uint8 LCD12864_page,uint8 LCD12864_col,uint8 *Char_x_16); //显示汉字
void LCD12864_init(void); //LCD12864初始化
void Delay(uint32 count); //延时函数
void ReadStatus(void); //等待忙函数
/*********************************************************************************************************************************************
// 字符/图像定义库
// 文字: 欢
// 宋体12; 此字体对应的点阵为:宽x高=16x16
// 纵向取模,字节倒序
**********************************************************************************************************************************************/
uint8 huan1[]={
0x0C,0x6C,0xEC,0x8C,0xFC,0x3C,0x40,0x70,0x3F,0xCF,0xCC,0x0C,0x3C,0x3C,0x00,0x00,
0x10,0x38,0x1C,0x07,0x07,0x4C,0x60,0x30,0x18,0x0F,0x07,0x0C,0x18,0x30,0x20,0x00,
};
// 文字: 迎
// 宋体12; 此字体对应的点阵为:宽x高=16x16
// 纵向取模,字节倒序
uint8 ying2[]={
0x60,0x66,0xEE,0xE8,0x00,0xFE,0xFE,0x07,0x03,0xFE,0xFE,0x06,0xFE,0xFE,0x00,0x00,
0x40,0x60,0x3F,0x1F,0x30,0x67,0x67,0x62,0x60,0x6F,0x6F,0x62,0x67,0x67,0x60,0x00
};
/*********************************************************************************************************************************************
// ASCII字模的数据表
// 码表从0x20~0x7e
// 字库:Asc8X16E.dat 纵向取模下高位
**********************************************************************************************************************************************/
uint8 nAsciiDot[] = // ASCII
{
0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00, // -D-
0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,
0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00, // -y-
0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00,
0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00, // -1-
0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,
0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00, // -2-
0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00, // -8-
0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00, // -6-
0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00, // -4-
0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,
};
/*********************************************************************************************************************************************
// Bitmap点阵数据表
// 图片: C:\..?doyleee.bmp,纵向取模下高位 ,数据排列:从左到右从上到下
// 图片尺寸: 128 * 64
**********************************************************************************************************************************************/
uint8 doyleee[] = // ???
{
0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x81,0xF1,0xF1,0xF1,0x71,0x31,
0x31,0x71,0xF1,0xF1,0xE1,0xC1,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x81,0xF1,0xF1,0xF1,0x71,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,
0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x7F,0x00,
0x00,0xF0,0xFC,0xFE,0xFE,0x0F,0x03,0x03,
0x07,0xFF,0xFE,0xFE,0xF8,0x00,0xE0,0xE0,
0xE0,0xE0,0x00,0x03,0x3F,0xFF,0xFF,0xFC,
0xC0,0xF0,0xFE,0x3F,0x0F,0x03,0x00,0xF0,
0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xF0,0xFC,
0xFE,0xFE,0x3F,0x33,0x33,0x33,0x3F,0x3F,
0x3E,0x38,0x00,0x00,0xF0,0xFC,0xFE,0xFE,
0x3F,0x33,0x33,0x33,0x3F,0x3F,0x3E,0x38,
0x00,0x00,0xF0,0xFC,0xFE,0xFE,0x3F,0x33,
0x33,0x33,0x3F,0x3F,0x3E,0x38,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
0x8E,0x8F,0x8F,0x8F,0x8C,0x8C,0x8C,0x8C,
0x8E,0x8F,0x87,0x87,0x83,0x81,0x80,0x80,
0x80,0x81,0x87,0x87,0x8F,0x8E,0x8C,0x8C,
0x8F,0x87,0x87,0x83,0x80,0x80,0x80,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xF3,0x7F,0x3F,
0x0F,0x03,0x00,0x00,0x00,0x00,0x0E,0x0F,
0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x07,
0x07,0x0F,0x0E,0x0C,0x0C,0x0F,0x07,0x03,
0x01,0x00,0x00,0x00,0x01,0x07,0x07,0x0F,
0x0E,0x0C,0x0C,0x0F,0x07,0x03,0x01,0x00,
0x00,0x00,0x01,0x07,0x07,0x0F,0x0E,0x0C,
0x0C,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x00,0x00,0xFC,
0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x00,0xF0,
0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x40,
0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x10,
0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x18,
0x1C,0x84,0xC4,0x7C,0x38,0x00,0x00,0xB8,
0xFC,0x64,0xC4,0xFC,0xB8,0x00,0x00,0xE0,
0xF0,0x3C,0x2C,0xE4,0xC0,0x00,0x00,0x80,
0xFC,0x7C,0x00,0xF0,0xF0,0x00,0x00,0xFC,
0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,
0xFC,0x04,0x04,0x1C,0x18,0x00,0x00,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x07,0x04,0x06,0x03,0x01,0x00,0x20,0x23,
0x27,0x34,0x1C,0x0F,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x07,0x04,0x00,0x00,0x06,
0x07,0x05,0x04,0x04,0x04,0x00,0x00,0x03,
0x07,0x04,0x04,0x07,0x03,0x00,0x00,0x03,
0x07,0x04,0x04,0x07,0x03,0x00,0x00,0x01,
0x01,0x01,0x01,0x07,0x07,0x01,0x00,0x07,
0x07,0x04,0x04,0x04,0x04,0x00,0x00,0x03,
0x07,0x04,0x04,0x07,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,
0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,
0x00,0x20,0x20,0xF0,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,
0x10,0x10,0x90,0x50,0xF0,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x83,
0x86,0x8C,0x8C,0x86,0x83,0x81,0x80,0x80,
0x88,0x88,0x88,0x8F,0x8F,0x88,0x88,0x88,
0x80,0x80,0x8C,0x8C,0x80,0x80,0x87,0x8F,
0x8A,0x89,0x88,0x88,0x8F,0x87,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF
};
/*********************************************************************************************************************************************
*函数名称: void Delay(uint32 count)
*函数功能: 延时
*入口参数: i,i越大,延时越久
*出口参数: 无
*备 注: 无
**********************************************************************************************************************************************/
void Delay(uint32 count)
{
uint32 i,j;
for(i = 0 ; i < count; i++)
for(j = 0; j < 125; j++);
}
/*********************************************************************************************************************************************
*函数名称: uint8 ReadStatus(void)
*函数功能: 判断液晶是否忙的子程序
*入口参数: i,i越大,延时越久
*出口参数: 无
*备 注: 无
**********************************************************************************************************************************************/
void ReadStatus(void)
{
IOSET = 0x000000ff;
IODIR = LINE_CON_DIR;
IOCLR = LCD12864_EN;
IOCLR = LCD12864_RS; //LCD12864_RS为0,选择指令寄存器
IOSET = LCD12864_RW; //LCD12864_RW为1,执行读操作
IOSET = LCD12864_EN; //LCD12864_EN高电平有效
Delay(2);
IOCLR = LCD12864_EN;
while(IOPIN&LCD12864_STATUS_BUSY); //检测忙标志位
IODIR = DATA_CON_DIR|LINE_CON_DIR;
}
/*********************************************************************************************************************************************
*函数名称: void LCD12864_Write_cmd(uint8 command)
*函数功能: 写命令
*入口参数: command,指令码
*出口参数: 无
*备 注: 无
**********************************************************************************************************************************************/
void LCD12864_Write_cmd(uint8 command)
{
ReadStatus(); //检测忙标志位
IOSET = command;
IOCLR = command^0xff;
IOCLR = LCD12864_EN;
IOCLR = LCD12864_RS; //LCD12864_RS为0,选择指令寄存器
IOCLR = LCD12864_RW; //LCD12864_RW为0,执行写操作
IOSET = LCD12864_EN; //LCD12864_EN下降沿有效
Delay(2);
IOCLR = LCD12864_EN;
}
/*********************************************************************************************************************************************
*函数名称: void LCD12864_Write_data(uint8 data)
*函数功能: 写数据
*入口参数: dat,数据
*出口参数: 无
*备 注: 无
**********************************************************************************************************************************************/
void LCD12864_Write_data(uint8 data)
{
ReadStatus(); //检测忙标志位
IOSET = data;
IOCLR = data^0xff;
IOCLR = LCD12864_EN;
IOSET = LCD12864_RS; //LCD12864_RS为1,选择数据寄存器
IOCLR = LCD12864_RW; //LCD12864_RW为0,执行写操作
IOSET = LCD12864_EN; //LCD12864_EN下降沿有效
Delay(2);
IOCLR = LCD12864_EN;
}
/*********************************************************************************************************************************************
*函数名称: uint8 LCD12864_Read_Data(void)
*函数功能: 从12864中读出数据
*入口参数: 无
*出口参数: 读出的数据
*备 注: 无
**********************************************************************************************************************************************/
uint8 LCD12864_Read_Data(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -