📄 c_lcd19264_driver.c
字号:
/****************************************************************************
* 文 件 名:c_lcd19264driver.c
* 版 本: V1.0
* 功 能:字符液晶模块驱动程序,采用模拟总线方式工作。
* 连 接:
* D0 -- P0.8 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.15 // DB7
*
* R/S -- P0.2 // RS
* R/W -- P0.3 // RW
* E -- P0.4 // E
* CS1 -- P0.5 //CS1
* CS2 -- P0.6 //CS2
* CS3 -- P0.7 //CS3
* R/W 为0进行写操作,为1时进行读操作
* D/I 为1表示数据传送,为0表示命令传送
* E 读写脉冲
*
* 作者:黄振升
* 日期:2005/10/31
*---------------历史版本信息-------------------------------------------------
* 修 改 人: 黄振升
* 版 本: V1.1
* 日 期: 2007.1.20
* 描 述:
****************************************************************************/
#include "config.h"
#if LCD19264_INTERFACE_EN >0
/***********************************************************************************************
*** 数字用字库
*********************************************************************************************/
uint8 const Number[] =
{/*0 */
0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,
0x02,0x02,0x01,0x00,
/*1 */
0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0x00,0x00,
/*2 */
0x18,0x84,0x44,0x44,0x38,0x00,0x03,0x02,
0x02,0x02,0x02,0x00,
/*3 */
0x88,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,
0x02,0x02,0x01,0x00,
/*4 */
0xC0,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,
0x00,0x03,0x00,0x00,
/*5 */
0x3C,0x14,0x14,0x14,0xE4,0x00,0x01,0x02,
0x02,0x02,0x01,0x00,
/*6 */
0xF0,0x28,0x24,0x24,0xC8,0x00,0x01,0x02,
0x02,0x02,0x01,0x00,
/*7 */
0x04,0x04,0x04,0xE4,0x1C,0x00,0x00,0x00,
0x03,0x00,0x00,0x00,
/*8 */
0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,
0x02,0x02,0x01,0x00,
/*9 */
0x38,0x44,0x44,0x44,0xF8,0x00,0x01,0x02,
0x02,0x01,0x00,0x00
};
uint8 const dot[]=
{
/*. */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00
};
uint8 const zero[]=
{/*. */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00
};
unsigned char const V[12] = {
/*V */
0x00,0x30,0xC0,0x00,0xC0,0x30,0x00,0x00,
0x01,0x02,0x01,0x00
};
uint8 const ynumber[] = { //8*16数值库
/*0 */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*1 */
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*2 */
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*3 */
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*4 */
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*5 */
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*6 */
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*7 */
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*8 */
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*9 */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*X */
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,
/*. */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
0x00,0x00,0x00,0x00
};
uint8 const ynumber16b[] = {
/*0 */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*1 CHAR_31 */
0x00,0x00,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x10,0x00,0x00,0x00,
/*2 CHAR_32 */
0x00,0x30,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x00,0x18,0x14,0x13,0x10,0x08,0x00,
/*3 CHAR_33 */
0x00,0x00,0x10,0x08,0x88,0x78,0x00,0x00,
0x00,0x00,0x10,0x20,0x20,0x11,0x0E,0x00,
/*4 CHAR_34 */
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
0x00,0x03,0x02,0x02,0x02,0x1F,0x02,0x00,
/*5 CHAR_35 */
0x00,0x00,0x70,0x48,0xC8,0x88,0x00,0x00,
0x00,0x10,0x10,0x20,0x10,0x0F,0x00,0x00,
/*6 CHAR_36 */
0x00,0x00,0xE0,0x90,0x88,0x80,0x00,0x00,
0x00,0x07,0x18,0x20,0x20,0x19,0x06,0x00,
/*7 CHAR_37 */
0x00,0x10,0x08,0x08,0x88,0x78,0x00,0x00,
0x00,0x00,0x00,0x18,0x07,0x00,0x00,0x00,
/*8 CHAR_38 */
0x00,0x00,0x78,0x88,0x88,0x78,0x00,0x00,
0x00,0x0C,0x12,0x21,0x21,0x1E,0x00,0x00,
/*9 CHAR_39 */
0x00,0x60,0x98,0x08,0x08,0xF8,0xC0,0x00,
0x00,0x00,0x21,0x12,0x09,0x07,0x00,0x00,
/*A CHAR_41 */
0x00,0x00,0xC0,0x28,0xF0,0x00,0x00,0x00,
0x00,0x1C,0x03,0x02,0x03,0x1F,0x10,0x00,
/*B CHAR_42 */
0x00,0x00,0xF8,0x08,0x88,0x88,0x70,0x00,
0x00,0x00,0x1F,0x11,0x10,0x11,0x1E,0x00,
/*C CHAR_43 */
0x00,0xE0,0x18,0x08,0x08,0x08,0x38,0x00,
0x00,0x0F,0x18,0x20,0x20,0x10,0x08,0x00,
/*D CHAR_44 */
0x00,0xF8,0x08,0x08,0x08,0x18,0xF0,0x00,
0x00,0x1F,0x10,0x10,0x10,0x18,0x0F,0x00,
/*E CHAR_45 */
0x00,0x00,0xF8,0x88,0x88,0xD8,0x00,0x00,
0x00,0x00,0x1F,0x10,0x10,0x11,0x18,0x00,
/*F CHAR_46 */
0x00,0x00,0xF8,0x88,0x88,0x88,0x08,0x00,
0x00,0x00,0x1F,0x00,0x00,0x01,0x00,0x00
};
//16进制字库
uint8 const NONE[] = { //10权开方表
/*. */
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,
};
uint32 const SQURE10[] = { //10权开方表
1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000
};
/***********************************************************************************************
*** 外围接口,定义
*********************************************************************************************/
#define DISPON 0X3f //显示ON
#define DISPOFF 0X3e //显示0FF
#define DISPFIRST 0Xc0 //显示起始行定义
#define SETX 0X40 //x定位指令(页)
#define SETY 0XB8 //x定位指令(页)
#define Lcdbusy 0x80 //LCM忙判断标志
/***********************************************************************************************
*** 显示边界位置
*********************************************************************************************/
#define MODL 0X00 //左区 40.
#define MODM 0X40 //左区和中区边界
#define MODR 0X80 //中区和右区边界
#define LCMLIMIT 0XC0 //显示右区边界
/***********************************************************************************************
*** 定义全局变量
*********************************************************************************************/
uint8 X,Y,WR_Data; //列,行,输出数据
uint8 xy; //画线标志
uint32 LCDreset_flage; //长时间液晶没有启动,液晶复位
uint32 test;
/***********************************************************************
* 名 称:LCd19264_DispIni()
* 功 能:LCd19264显示初始化
* 入口参数:无
* 出口参数:无
* 说明 :占用
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.16 // DB7
***********************************************************************/
void LCD19264_Init(void)
{
PINSEL0 &= 0x003FFFFF;//根据需要修改
PINSEL1 &= 0xFFFF0000;
//IO0DIR =IO0DIR &0xff << LCD19264_BusLSB |1 << LCD19264_E |1 << LCD19264_RS | 1 << LCD19264_DI;
IO0DIR =IO0DIR |(0xFF << LCD19264_BusLSB) |(1 << LCD19264_E ) |(1 << LCD19264_DI)|(1 << LCD19264_RW) |( 1 << LCD19264_CS1)|( 1 << LCD19264_CS2)|( 1 << LCD19264_CS3);
LCD19264_BusData(0XFF);
LCD19264_BusData(0XF0);
LCD19264_SCS1();
LCD19264_SCS2();
LCD19264_SCS3();
LCD19264_SDI();
LCD19264_SRW();
LCD19264_SE();
//LCD19264_Writecommand_L(DISPOFF);//关闭显示
//LCD19264_Writecommand_M(DISPOFF);
//LCD19264_Writecommand_R(DISPOFF);
LCD19264_Writecommand_L(DISPON);//打开显示
LCD19264_Writecommand_M(DISPON);
LCD19264_Writecommand_R(DISPON);
LCD19264_Writecommand_L(DISPFIRST);//定义显示起始行为零
LCD19264_Writecommand_M(DISPFIRST);//定义显示起始行为零
LCD19264_Writecommand_R(DISPFIRST);//定义显示起始行为零
LCD19264_Cls(); //清屏
//清屏
X = 0;
Y = 0;
LCD19264_Fix_point(); //定位,坐标00
}
/***********************************************************************
* 名 称:LCd19264_Busy()
* 功 能:LCd19264左中右读忙子程序群,兼作选择HD61202用
* 入口参数:无
* 出口参数:无
* 说明 :占用
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.16 // DB7
***********************************************************************/
void Lcd19264_Busy(void)
{
uint32 i,reset_flage;
IO0DIR =IO0DIR & ~(0xFF << LCD19264_BusLSB) ; //设成输入方式
DelayNS(1);
LCD19264_CE(); //拉低电平
LCD19264_CDI(); //命令
LCD19264_SRW(); //读
LCD19264_SE(); //使能
test = LCD19264_BusData_Read();
for(i=0;i<108000;i++)
{
reset_flage = 1;
if ( (LCD19264_BusData_Read() & Lcdbusy)==0)
{
reset_flage = 0;
break;//等待忙完
}
}
if(reset_flage == 1) LCDreset_flage = 1; //重新初始化液晶
IO0DIR =IO0DIR | (0xFF << LCD19264_BusLSB) ; //重新设成输出方式
//DelayNS(1);
LCD19264_CE(); //禁能
}
void lcd19264busy_L(void)
{
LCD19264_CCS1() ;LCD19264_SCS2();LCD19264_SCS3();//清零选择左区
//DelayNS(1);
Lcd19264_Busy();
}
void lcd19264busy_M(void)
{
LCD19264_SCS1() ;LCD19264_CCS2();LCD19264_SCS3();//清零选择中区
//DelayNS(4);
Lcd19264_Busy();
}
void lcd19264busy_R(void)
{
LCD19264_SCS1() ;LCD19264_SCS2();LCD19264_CCS3();//清零选择右区
//DelayNS(4);
Lcd19264_Busy();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -