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

📄 lcd.txt

📁 这是用C语言编写得LCD程序 用来控制LCD
💻 TXT
字号:
//宏定义
#define	P_IOA_Data 				(volatile unsigned int *)0x7000   
#define	P_IOA_Buffer			(volatile unsigned int *)0x7001   
#define P_IOA_Dir 				(volatile unsigned int *)0x7002
#define P_IOA_Attrib 			(volatile unsigned int *)0x7003
#define	P_IOB_Data 				(volatile unsigned int *)0x7005   
#define	P_IOB_Buffer			(volatile unsigned int *)0x7006   
#define P_IOB_Dir 				(volatile unsigned int *)0x7007
#define P_IOB_Attrib 			(volatile unsigned int *)0x7008

#define P_Watchdog_Clear		(volatile unsigned int *)0x7012
/////////////////////////////////////////////////////////////////////////////////////////////////////

unsigned int a,bf;


/////////////////////////////////////////////////////////////////////////////////////////////////////
//主函数
/////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
	IO_Init();
//	LCD_Init();
	Disp_1();
//	LCD_Init();
	Disp_3();
//	LCD_Init();
	Disp_4();
//	LCD_Init();
	Disp_5();
}




////////////////////////////////////////////////////////////////////////////////////////////////////
//端口初始化子函数
////////////////////////////////////////////////////////////////////////////////////////////////////
void IO_Init(void)
{
	*P_IOA_Dir = 0xff00;			//设置IOA口高八位为同相低电平输出
	*P_IOA_Attrib = 0xff00;
	*P_IOA_Data = 0x0000;
	
	*P_IOB_Dir = 0x1e00;			//设置IOB口9-10位为同相高电平输出(读,写均无效)
	*P_IOB_Attrib = 0x1e00;			//12位为同相高电平输出(先选择输入指令为命令)
	*P_IOB_Data = 0x1600;			//11位为同相高电平输出(片选信号有效)
	
	*P_Watchdog_Clear = 0x0001;						
}




/////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD显示_地址指针设置子函数
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp_1(void)
{
	*P_IOB_Data = 0x1400;			//写命令
	*P_IOA_Data = 0x2100;			//选择输入命令为"光标地址设置"
	*P_IOB_Data = 0x0400;			//IOB口12位设置为0,输入为数据(写数据)
	*P_IOA_Data = 0x8800;			
	
	*P_Watchdog_Clear = 0x0001;
}



/////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD显示_显示区域设置
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp_2(void)
{
	//暂时不用
}



/////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD显示_显示方式设置
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp_3(void)
{
	*P_IOB_Data = 0x1400;			//IOB口12位设置为0,输入为命令
	*P_IOA_Data = 0x8700;			//选择启动方式为"启动内部CGROM"
	
	*P_Watchdog_Clear = 0x0001;
}



/////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD显示_显示状态设置
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp_4(void)
{
	*P_IOB_Data = 0x1400;			//IOB口12位设置为0,输入为命令
	*P_IOA_Data = 0x9300;			//选择显示状态为"启动光标显示,启动光标闪烁"
	
	*P_Watchdog_Clear = 0x0001;
}



/////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD显示_光标形状设置
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp_5(void)
{
	*P_IOB_Data = 0x1400;			//IOB口12位设置为0,输入为命令
	*P_IOA_Data = 0xa300;
	
	*P_Watchdog_Clear = 0x0001;
}




//////////////////////////////////////////////////////////////////////////////////////////////////////
//判忙子函数
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Is_Busy(void)
{
	Change_IOA_Input();
	*P_IOB_Data = 0x1a00;			//读状态(读命令,读信号有效;写,片选均无效)
	*P_Watchdog_Clear = 0x0001;
	*P_IOB_Data = 0x1200;			//选中芯片(命令,读,片选有效;写无效)
	*P_Watchdog_Clear = 0x0001;
	a = *P_IOA_Data;				//读状态字
	*P_Watchdog_Clear = 0x0001;
	*P_IOB_Data = 0x1a00;			//片选信号为高电平(产生脉冲)
	*P_Watchdog_Clear = 0x0001;
	if((a & 0x8000) == 0x8000)
		bf = 1;
	else 
		bf = 0;
	Remove_IOA_Output();
}



/////////////////////////////////////////////////////////////////////////////////////////////////////
//将IOA口的高八位改为带上拉电阻的输入口(因为写,读,片选均为低电平有效)
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Change_IOA_Input(void)
{
	*P_IOA_Dir = 0x0000;			//设置IOA口高八位为带上拉电阻的输入口
	*P_IOA_Attrib = 0x0000;
	*P_IOA_Data = 0xff00;
}



//////////////////////////////////////////////////////////////////////////////////////////////////////
//还原IOA口高八位的输出状态
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Remove_IOA_Output(void)
{
	*P_IOA_Dir = 0xff00;			//设置IOA口高八位为同相低电平输出
	*P_IOA_Attrib = 0xff00;
	*P_IOA_Data = 0x0000;
}




//////////////////////////////////////////////////////////////////////////////////////////////////////
//LCD初始化
//////////////////////////////////////////////////////////////////////////////////////////////////////
void LCD_Init(void)
{
	Dlay_20ms();
	Is_Busy();
	while(bf)									//判忙,如果忙则不断延迟20ms
	{
		Dlay_20ms();
	}
//	Fun_Set();
}




/////////////////////////////////////////////////////////////////////////////////////////////////////
//功能设置子函数
/////////////////////////////////////////////////////////////////////////////////////////////////////
void Fun_Set(void)
{	
	
}



//////////////////////////////////////////////////////////////////////////////////////////////////////
//延迟20ms子函数
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Dlay_20ms(void)
{
	unsigned int uiCount;
	for(uiCount = 0;uiCount < 1311; uiCount++)
	{
		*P_Watchdog_Clear = 0x0001;								//清看门狗操作
	}
}

⌨️ 快捷键说明

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