嵌入式程序优化之液晶使用
0赞由于LCD的清屏函数经常使用,虽然可以使用Write_Cmd(0x01);进行清屏,但普通用户很查手册找到0x01命令字,即使找到了,也不便于记忆,所以这里在driver.h文件中将WriteCmd(0x01)这样的函数定义成了更容易记忆的函数clear_display()。
在启动函数中,要对系统板进行初始化,而对系统板进行初始化非常复杂,要考虑到配置信息,系统板的调试状态等等,这样在汇编代码中就难以实现。所以在设计过程中采用了周立功公司提供的代码模式,在汇编代码中只实现了对LPC2292芯片内部系统变量的初始化,各个模式下的堆栈的初始化。其他外围的初始化函数则放在了C语言中进行编写。即TargetResetInit()函数。这样最大限度的保证了代码的可重用性;并且外围电路改变时,只需改变外围电路的初始化函数或者只改变配置文件就可以了。
#define RS (0x00000001<<27) // 1:输入数据 ;0:输入命令
#define RW (0x00000001<<28) //1:读数据 0:写数据
#define E (1<<23)
void WriteCmd(unsigned char cmdcode)
{
int temp;
Check_Busy();
IO0DIR=0xFFFFFFFF;
IO2DIR=0x00FF0000;
temp=(int)cmdcode;
temp=temp<<16;
IO0CLR=RS;
IO0CLR=RW;
IO2PIN=temp;
IO0SET=E;
IO0CLR=E;
}
在硬件电路中,12864液晶模块的控制管脚RS,RW和E分别与LPC2292芯片的P0.27,P0.28和P0.23管脚相连,所以定义RS为(0x00000001<<27)。
LCD写控制字函数是依照12864液晶模块的要求,写之前先检查LCD是否处于忙状态,如果忙的话,就一直等待直到空闲。然后选择IO管脚方向。由于在硬件电路中12864液晶模块的数据线接到了LPC2292芯片的D16——D23管脚上,所以这里使用P2管脚时要先将控制命令左移16位,即相应的控制字左移16位,与管脚对齐。接着就是将RS位和RW位清0,即选择输入命令模式和写数据。将左移16位后的控制命令写入P2管脚,准备好之后使能E管脚将控制命令写入12864液晶模块中,这之后又马上取消使能。
