📄 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 + -