⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_drive.c

📁 可以实现GUI的图形显示,含有全部源码
💻 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 + -