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

📄 lcd_control.c

📁 驾驶员考试电桩考试系统的车载程序
💻 C
📖 第 1 页 / 共 2 页
字号:
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CommandChanelOpen()
{
	//#define 	_RS			0x00000001	//A0	P3.0	//1:指令寄存器	0:数据寄存器
	//#define 	_CS1 		0x02000000	//CS1	P3.25	//片选1; 1=被选中
	IO3SET = _RS;//0x08000000; // RS	1:指令寄存器
	IO3CLR = _CS1;//0x00000100; // CS1	1=被选中
}
/****************************************************************************
* 名称:ChanelClose() 内部函数
* 功能:使LCD模块处于读写通道关闭状态
* 入口参数:无
* 出口参数:无
****************************************************************************/
void ChanelClose()
{
	//#define 	_CS1 		0x02000000	//CS1	P3.25	//片选1; 1=被选中
	IO3SET = _CS1;//0x00000100; // CS1	1=被选中
}

//---------------------------------------------------
//==========================================================
/*------------------写控制寄存器参数------------------------------*/
/****************************************************************************
* 名称:write_com() 内部函数
* 功能:写控制寄存器参数
* 入口参数:unsigned char reg  	寄存器地址
			unsigned char ptr	寄存器内容
* 出口参数:无
****************************************************************************/
void write_com(unsigned char reg,unsigned char ptr)
{
//while(BUSY){}
	LcdBusDelay(100);

//E=0;
	IO1CLR = _EN;
	OutPutData(reg);
	LcdBusDelay(50);
//CS1=0;	//cs
	IO3SET = _CS1;
//RS=1;	//读写指令 寄存器
	IO3SET = _RS;
//RW=0;	//PIN wirte is 0
	IO3CLR = _RW;
//E=1;	//PIN is 1 
	IO1SET = _EN;

	LcdBusDelay(50);
	IO1CLR = _EN;
//RW=1;	//PIN wirte is 1
	LcdBusDelay(10);
	IO3SET = _RW;
	
//while(BUSY){}
//P1=ptr;
	LcdBusDelay(100);
	OutPutData(ptr);
//E=0;
	LcdBusDelay(10);
	IO1CLR = _EN;
//CS1=0;
//	LcdBusDelay(100);
	IO3SET = _CS1;
//CS2=1;
//RS=1;
//	LcdBusDelay(100);
	IO3SET = _RS;
//RW=0;
//	LcdBusDelay(100);
	IO3CLR = _RW;
//INT=0;
//E=1;
//	LcdBusDelay(100);
	IO1SET = _EN;
//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
//RW=1;
//	LcdBusDelay(100);
	IO3SET = _RW;
}
	
//==========================================================
/*------------------写控制寄存器参数------------------------------*/
/****************************************************************************
* 名称:write_com() 内部函数
* 功能:写控制寄存器参数
* 入口参数:unsigned char reg  	寄存器地址
			unsigned char ptr	寄存器内容
* 出口参数:无
****************************************************************************/
unsigned char read_com(unsigned char reg)
{
	uint8 u8Return;
	//while(BUSY){}
	//P1=cmd;
	LcdBusDelay(100);
	OutPutData(reg);
	//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
	//CS1=0;
	IO3SET = _CS1;
	//RS=1;
	IO3SET = _RS;
	//RW=0;
	IO3CLR = _RW;
	//E=1;
	IO1SET = _EN;
	//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
	//RW=1;
	IO3SET = _RW;

	//while(BUSY){}
	//P1=0xFF;
	LcdBusDelay(100);
	OutPutData(0xFF);
	//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
//CS1=0;
	IO3SET = _CS1;
//RS=1;
	IO3SET = _RS;
//RW=1;
	IO3SET = _RW;
//INT=0;
//E=1;
	IO1SET = _EN;
//res=P1;
	LcdBusDelay(50);
	u8Return = InputData();
//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
//RW=1;
	IO3SET = _RW;
	
	return u8Return;
}
/*-------------------写数据到LCD----------------------------*/
/****************************************************************************
* 名称:write_data() 内部函数
* 功能:写数据存储区
* 入口参数:unsigned char Dispdata  	要写的数据
* 出口参数:无
****************************************************************************/
void write_data(unsigned char Dispdata)
{
//while(BUSY){}
//P1=Dispdata;
	LcdBusDelay(100);
	OutPutData(Dispdata);
//E=0;
	LcdBusDelay(50);
	IO1CLR = _EN;
//CS1=0;
	IO3SET = _CS1;
//RS=0;
	IO3CLR = _RS;
//RW=0;
	IO3CLR = _RW;
//E=1;
	IO1SET = _EN;
	LcdBusDelay(50);
	IO1CLR = _EN;
}
/*************清除屏幕汉字*********/
/****************************************************************************
* 名称:clearhz() 外部函数
* 功能:清除屏幕汉
* 入口参数:unsigned char Dispdata  	要写的数据
* 出口参数:无
****************************************************************************/
void clearhz(void)
{
	unsigned char i;
	write_com(0x60,0x00);
	write_com(0x70,0x00);
	for(i=0;i<120;i++)
	{
	//	write_data(0xBC);
		write_data(0x0A0);
	//	write_data(0xAA);
		write_data(0x0A1);
	}
}
/********************光标显示*************************/
/****************************************************************************
* 名称:CursorDisplayOn() 外部函数
* 功能:光标显示打开
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CursorDisplayOn(void)
{
	write_com(0x10,0x2f);
}
/****************************************************************************
* 名称:CursorDisplayOff() 外部函数
* 功能:光标显示关闭
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CursorDisplayOff(void)
{
	write_com(0x10,0x28);
}
/*********************设定光标位置*********************/
/****************************************************************************
* 名称:Position_Cursor() 外部函数
* 功能:光标显示
* 入口参数:unsigned char x   光标的X位置  数值范围 0 ~ 29
			unsigned char y   光标的Y位置  数值范围 0 ~ 127
* 出口参数:无
****************************************************************************/
void Position_Cursor(unsigned char x,unsigned char y)
{
	write_com(0x60,x);
	write_com(0x70,y);
}
/****************************************************************************
* 名称:puthz() 外部函数
* 功能:在光标(X,Y)处显示汉字hzcode(字型码)
* 入口参数:unsigned char x      光标的X位置 数值范围 0 ~ 29
			unsigned char y      光标的Y位置 数值范围 0 ~ 127
			unsigned int hzcode  汉字编码
* 出口参数:无
****************************************************************************/
void puthz(unsigned char x,unsigned char y,unsigned int hzcode)
{
	unsigned char ph,pl;
	ph=(unsigned char)(hzcode>>8);
	pl=(unsigned char)hzcode;
	write_com(0x60,x);
	write_com(0x70,y);
	write_data(ph);
	write_data(pl);
}
/****************************************************************************
* 名称:Bright_Set() 外部函数
* 功能:液晶屏亮度控制
* 入口参数:unsigned char p      亮度值 数值范围 0~31
* 出口参数:无
****************************************************************************/
void Bright_Set(unsigned char p)
{
	unsigned char ptr;
	ptr=p|0x20;
	write_com(0xD0,ptr);
}
/****************************************************************************
* 名称:init_lcd() 外部函数
* 功能:初始化LCD屏
* 入口参数:无
* 出口参数:无
****************************************************************************/
	uint8 u8Test;

void init_lcd(void)
{
	Lcd_PinSet_PINSEL2();
	Lcd_PinSet_Dir();
//	testLCD_interface();
//	testLCD_interface();
//		testLCD_interface();
//			testLCD_interface();
				
	LcdBusDelay(100);
	ResetLCD();
	LcdBusDelay(500);
	write_com(0x00,0xCD);	// CD=1100 1101 (11:正常电源模式,D3=1:显示模式为交字模式,写入资料被视为GB/BIG/ASCII
							// D2=1:屏幕打开  D1=0:正常显示 D0=1:正常显示
							//D7-D6:电源模式(Power Mode)
							//		11:正常模式(Normal Mode),控制器的所有功能都可以使用(Available) 。
							//		10:等待模式(Standby Mode),只有DRAM与ROM的存取功能被禁止,其他功能都可以使用,LCD亦照常工作。
							//		01:睡眠模式(Sleep Mode),除了允许寄存器的读写外,其他LCD显示与DDRAM、ROM的存取将被禁止。
							//		00:关闭模式(Off Mode),除了唤醒(Wake-Up)电路工作处,其他功能都被禁止.当Wake-Up电路被触发,控制器将进入正常模式。
							//D5:软体重置,所有寄存器回到初始值,但是RAM的内容不会被清除。1:重置所有寄存器,0:无作用
							//D4:设定自动重置功能,当此位元处于致能(设为1)时,若控制器无法在2毫秒内得到一完整指令或资料时,则控制器会忽视这个指令或资料。
							//		1:致能自动重置功能,0:禁能自动重置功能
							//D3:选择显示工作模式
							//		1:交字模式,写入的资料被视为是GB/BIG/ASCII等字码。
							//		0:绘图模式,写入的资料被视为是Bit-Map的模式。
							//D2:设定荧幕显示为开启或关闭,此位元用来控制连接到LCD驱动器界面的”DISP_OFF”信号
							//		1:DISP_OFF” 信号输出High(荧幕显示开启)
							//		0:DISP_OFF” 信号输出Low(荧幕显示关闭)
							//D1:闪烁模式选择
							//		1:整个荧幕闪烁,闪烁时间由寄存器[80h]BTR来设定
							//		0:正常显示
							//D0:荧幕反白显示选择
							//		1:正常显示
							//		0:全荧幕反白显示,DDRAM内的资料会被全部反相。
	write_com(0x08,0x73);	// 0X73=0111 0011 D6=1:CLK OUT 使能控制 D5=1:工作视窗 D4=1:INT 和BUSY 高电平
							// D1D0=11:8MHz
	write_com(0x10,0x2f);	//光标显示 0x2F=0010 1111 D5=1:直接存储资料于DDRAM中,D4=0:非粗体
							//D3=1:光标自动移位。D2=1:设置光标ON。D1=1:光标闪烁。D0=1:光标宽度
							//D7:光标自动移位设定,此位元用来设定当资料读出DDRAM时,光标是否自动移位,1:致能,0:禁能
							//D6:中/英文字对齐,1:致能,0:禁能,此功能能仅在文字模式时有效,可以将全形与半形混合显示时作对齐调整。
							//D5:储存当前资料(正相/反相)于 DDRAM
							//		1:直接储存资料于DDRAM中
							//		0:存入相反的资料于DDRAM中
							//D4:设定粗体字型(仅文字模式适用),1:粗体字型,0:正常字型
							//D3:光标自动移位设定,此位元用来设定当资料写入DDRAM时,光标是否自动移位,
							//		如果此位元被Enable,则不论在文字或是绘图模式,光标都会自动移位。,1:致能,0:禁能
							//D2:光标显示On/Off设定,1:设定光标 On,0:设定光标 Off
							//D1:光标闪烁控制,1:光标闪烁,闪烁时间由寄存器[80h]BTR来决定,0:光标不闪烁
							//D0:设定光标宽度
							//		1:会随着输入的资料而变动光标宽度,当资料为半型时,光标为一个位元组宽度(8个Pixel),当资料为全型时,光标为二个位元组宽度(16个Pixel)。
							//		0:光标固定为一个位元组的宽度(8个Pixel)
							
	write_com(0x18,0x20);	//D7-D4:设定光标高度。D3-D0:设定行距。
	write_com(0x10,0x2b);//光标隐藏

	write_com(0x20,0x1D);	//D5-D0:设定工作视窗的右边界:29
	write_com(0x30,0x7f);	//D7-D0:设定工作视窗的下边界:127
	write_com(0x40,0x00);	//D5-D0:设定工作视窗的左边界:0
	write_com(0x50,0x00);	//D7-D0:设定工作视窗的上边界:0

	write_com(0x28,0x1D);	//D5-D0:设定显示视窗的右边界:(240/8)-1 = 29
	write_com(0x38,0x80);	//D7-D0:设定显示是窗的下边界: 128-1 = 127
	write_com(0x48,0x00);	//D5-D0:设定显示视窗的左边界:00
	write_com(0x58,0x00);	//D7-D0:设定显示视窗的上边界:00

	write_com(0x60,0x00);	//D5-D0:设定光标Segment位址
	write_com(0x70,0x00);	//D7-D0:设置光标Common位址
	write_com(0x90,0x1D);	//D7-D0:Shift Clock Control Register
	write_com(0xB0,0x27);	//D5-D0:设定行 (Column)位址中断,假如光标位置X寄存器(CPXR)=INTX,中断发生

	write_com(0xB8,0xEF);	//D7-D0:设定列 (Row)位址中断,假如光标位置Y寄存器(CPXR)=INTY,中断发生
	write_com(0xA0,0x08);	//D7:忙碌状况指示
							//		1:控制器为忙碌状态,MCU需暂时等候到忙碌状态终止。
							//		0:控制器为关置状态,随时可接受MCU存取。
							//D6:触摸屏中断标志位
							//		1:触触摸屏有侦测到接触(Touch)
							//		0:触摸屏未侦测到接触
							//D5:光标行(Column)状态
							//		1:光标的Column等于寄存器[B0h]INTX
							//		0:光标的Column不等于寄存器[B0h]INTX
							//D4:光标列(Column)状态
							//		1:光标的列等于寄存器[B8h]INTY
							//		0:光标的列不等于寄存器[B8h]INTY
							//D3:忙碌中断屏蔽
							//		1:使能BUSY去产生中断输出
							//		0:禁能BUSY去产生中断输出
							//D2:触摸屏中断屏蔽
							//		1:如果触摸屏被侦测到,则产生中断输出。
							//		0:如果触摸屏被侦测到,则不产生中断输出。
							//D1:寄存器[B0h]INTX是否发生中断
							//		1:使能INTX中断
							//		0:禁能INTX中断
							//D0:设定寄存器[B8h]INTY是否发生中断
	write_com(0xC0,0xF0);	//D7:触摸屏功能启动,1:禁能,0:致能
							//D6:触摸屏资料输出,1:禁能触摸屏资料输出,0:使能触摸屏资料输出
							//D5:保留
							//D4:触控状态位元指示,1:触控未发生。0:触控发生
							//D3-D0:触摸屏控制位元
							//		Bit3 = 0  Switch SW3 OFF, Bit3 = 1  Switch SW3 ON
							//		Bit2 = 0  Switch SW2 OFF, Bit2 = 1  Switch SW2 ON
							//		Bit1 = 0  Switch SW1 OFF, Bit1 = 1  Switch SW1 ON
							//		Bit0 = 0  Switch SW0 OFF, Bit0 = 1  Switch SW0 ON
	write_com(0xD0,0x30);	//D7:LCD 亮度控制,1:禁能,0:使能
							//D6:DAC写入使能
							//		1:不允许MCU把资料写入Bit[4..0]
							//		0:允许MCU把资料写入Bit[4..0]
							//D5:重置LCD亮度调整控制功能
							//		1:正常操作
							//		0:DAC重置,设定Iout为0uA
							//D4-D0: 设定LCD亮度控制Iout值
							//		00000b .. 0uA (Min. Current)
							//		:
							//		:
							//		11111b .. 500uA (Max. Current)
	write_com(0xE0,0x00);	//D7-D0:设定写入到DDRAM的资料
							//		当寄存器[F0h]的bit3为‘1’,控制器内部将自动读取本寄存器[E0h]的Data,
							//		然后全部填写到DDRAM内,之后寄存器[F0h]的bit3被清除为‘0’
	write_com(0xF0,0xA0);	//D7:字型ROM的转换,1:使能,0:禁能
							//D6:内部/外部字型ROM选择,1:选择外部字型ROM,0:选择内部字型ROM
							//D5-D4:字型ROM的语系选择,0 1:选择繁体(BIG5)字型,1 0:原则简体(GB)字型
							//D3:重复写入REG [E0h]的资料到DDRAM,1:开始写入,0:未动作
							//D2:文字码的类别选择,1:输入ASCII码,输出为符号等,0:输入GB/BIG5码,输出为中文字
							//D1-D0:4种ASCII区块选择
							//		0 0:ASCII选择区块0
							//		0 1:ASCII选择区块1
							//		1 0:ASCII选择区块2
							//		1 1:ASCII选择区块3
}
//==================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -