📄 lcd_drive.c
字号:
#include "config.h"
#include "LCDCONF.H"
/*
PG160128A的连接方式
PG160128A管脚 LPC2104管脚
FG GND
VSS NC
VDD NC
CON NC
WR P0.29
RD P0.30
CE GND
C/D P0.31
RST VCC
D0 P0.21
D1 P0.22
D2 P0.23
D3 P0.24
D4 P0.25
D5 P0.26
D6 P0.27
D7 P0.28
FS1 NC
*/
//Added By Rein Lee at 2008-07-6
/* 定义总线起始的GPIO,即D0对应的GPIO值(P0.21) */
#define BUS_NO 21
/* 输出总线数据宏定义 */
#define OutData(dat) IODIR = IODIR |(0xff<<BUS_NO); IOCLR = 0xff<<BUS_NO; IOSET = (dat&0xff)<<BUS_NO
#define InData() IODIR = IODIR &~(0x000000ff<<BUS_NO);temp = (uint8)((IOPIN&(0xFFFFFFFF))>>BUS_NO)
/* 定义READ控制 */
#define LCM_RD 30
#define LCM_UNREAD() IO0SET = 1<<LCM_RD
#define LCM_READ() IO0CLR = 1<<LCM_RD
/* 定义WRITE控制 */
#define LCM_WR 29
#define LCM_UNWRITE() IO0SET = 1<<LCM_WR
#define LCM_WRITE() IO0CLR = 1<<LCM_WR
/* 定义C/D#控制 */
#define LCM_CD 31
#define LCM_COM() IO0SET = 1<<LCM_CD
#define LCM_DATA() IO0CLR = 1<<LCM_CD
//End of change
/*T6963的功能设置*/
#define LCD_CUR_POS 0x21 //光标位置设置(只有设置到有效显示地址并打开显示才看到),双参数(D1水平位置,D2垂直位置)
#define LCD_CGR_POS 0x22 //CGRAM偏置地址设置(用来增加自己的符号),双参数(D1低5位有效,D2=00)
#define LCD_ADR_POS 0x24 //地址指针位置(设置读写操作打针)
//显示区域设置指令
#define LCD_TXT_STP 0x40 //文本区首址(从此地址开始向屏幕左上角显示字符)
#define LCD_TXT_WID 0x41 //文本区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点数)
#define LCD_GRH_STP 0x42 //图型区首址(从此地址开始向屏幕左上角显示点,((有等进一步确认))为文本方式显示时,显示为文本显示特性
#define LCD_GRH_WID 0x43 //图形区宽度(设置显示宽度,N/6式N/8,其中N为X轴的点数)
//显示方式设置指令,当CG(D3)为0启用CGROM
#define LCD_MOD_OR 0x80 //显示方式:逻辑或
#define LCD_MOD_XOR 0x81 //显示方式:逻辑异或
#define LCD_MOD_AND 0x83 //显示方式:逻辑与
#define LCD_MOD_TCH 0x8C //显示方式:文本
//显示开关设置指令,(D0,D1,D2,D3)=1/0 <==========> (光标闪烁,光标显示,文本显示,图形显示)启用/禁用
#define LCD_DIS_SW 0x90 //显示开关设置
//光标开头设置指令
#define LCD_CUR_SHP 0xA0 //光标型形状选择:0xA0-0xA7代表光标占的行数
//自动读写设置指令
#define LCD_AUT_WR 0xB0 //自动写设置
#define LCD_AUT_RD 0xB1 //自动读设置
#define LCD_AUT_OVR 0xB2 //自动读写结束
//数据一次读写设置指令
#define LCD_INC_WR 0xC0 //数据一次写,地址加1
#define LCD_INC_RD 0xC1 //数据一次读,地址加1
#define LCD_DEC_WR 0xC2 //数据一次写,地址减1
#define LCD_DEC_RD 0xC3 //数据一次读,地址减1
#define LCD_ZER_WR 0xc4 //数据一次写,地址不变
#define LCE_ZER_RD 0xc5 //数据一次读,地址不变
//屏读设置指令
#define LCD_SCN_RD 0xE0 //屏读,屏读只能在图形显示区内;该指令是把屏上的内容取出来作为数据使用.
//屏拷贝
#define LCD_SCN_CP 0xE8 //屏拷贝,该指令将屏上当前地址指针(图形)处开妈的一行合成显示内容拷贝到相对应的图形显示区的一级单元
//位操作指令
#define LCD_BIT_OP 0xF0 //该指令可将显示缓冲区单无的某位清零或置位.D0-D1---定义D0-D7位;D3--1为置位,D3--0为复位
//Rein Add at 2008-07-06
extern void LCD_PORT_Init(void)
{
uint8 i;
// 设置引脚连接模块
PINSEL1 &= ~(3 << (2 * (LCM_WR - 16)));
PINSEL1 &= ~(3 << (2 * (LCM_RD - 16)));
PINSEL1 &= ~(3 << (2 * (LCM_CD - 16)));
for (i = BUS_NO; i < (BUS_NO+8); i++){
PINSEL1 &= ~(3 << (2 * (i-16)));
}
// 设置I/O为输出方式
IODIR = IODIR|(1<<LCM_RD)|(1<<LCM_WR)|(1<<LCM_CD);
}
//End of Change
//Read Data
uint8 LCD_READ_A1(void)
{
uint8 temp;
IODIR = IODIR &~(0x000000ff<<BUS_NO);
LCM_COM();
LCM_READ();
temp = (uint8)((IO0PIN)>>BUS_NO);
LCM_UNREAD();
return(temp);
}
//Write Command
void LCD_WRITE_A1(int Byte)
{
LCM_UNREAD();
LCM_COM();
LCM_WRITE();
OutData(Byte);
LCM_UNWRITE();
}
//Write Data
void LCD_WRITE_A0(int Byte)
{
LCM_UNREAD();
LCM_DATA();
LCM_WRITE();
OutData(Byte);
LCM_UNWRITE();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -