EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
从零开始学单片机(七)液晶接口& @& k- |6 F/ _- n- t6 l( E
6 Z8 M1 d* t% A3 C- W+ C
) [ M# T6 \ z; B8 k; { P3 `! Q
这里我买的板子上带有一个SMC1602A LCM。使用也很简单很方便,但是还是要看它的使用说明书才行。 先看看引脚说明,在开发板上,D0-D7接到P0口上,RS接到P3.5,使能信号E接到P3.6上,读写端RW接地(通常不需要读),没有结背光电源。 ![]() ![]()
RAM要比实际显示的多很多(16字×2行),将来做平移就比较方便了。 ![]()
时序图还是要看的。 1602的指令码(用于设置系统属性的) 显示模式设定: 38H(16×2显示,5×7点阵,8位数据接口) 显示开关及光标设置: 08H+x(x=4:开显示; x=2:显示光标; x=1:光标闪烁) 04H+x(x=2:读写一个字符后地址指针加1,光标加1; x=1:当写一个字符,整屏左移) 数据指针设置: 80H+地址吗(0H-27H,40H-67H) 其他: 01H:显示清屏(数据指针清零,显示清零) 02H:显示回车(数据指针清零, 1602初始化过程 延时15ms 写指令38H(不检测忙信号) 延时5ms 写指令38H(不检测忙信号) 延时5ms 写指令38H(不检测忙信号) (以后,每次写指令,读写操作都需要检测忙信号) 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置 #include #define LCD_Data P0 sbit LCD_RS = P3^5; sbit LCD_E = P3^4; void delay(unsigned int ms); void WriteCommand(unsigned char com); void WriteData(unsigned char chr); void ini_LCD(); void main(void) { ini_LCD(); WriteData('A'); WriteData('B'); WriteData('C'); WriteData('D'); WriteData('E'); while(1) { } } void delay(unsigned int ms) { unsigned int Temp; while(ms--){Temp=82;while(Temp--);} } void ini_LCD() { delay(15); WriteCommand(0x38); delay(5); WriteCommand(0x38); delay(5); WriteCommand(0x38); delay(5); WriteCommand(0x38); WriteCommand(0x0f); WriteCommand(0x06); WriteCommand(0x01); WriteCommand(0x80); } void WriteCommand(unsigned char com) { LCD_RS = 0; LCD_Data = com; delay(1); LCD_E = 1; delay(2); LCD_E = 0; LCD_RS = 1; } void WriteData(unsigned char chr) { LCD_RS = 1; LCD_Data = chr; delay(1); LCD_E = 1; delay(2); LCD_E = 0; LCD_RS = 0; }
& m' l0 a/ ^) q, K |