微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 从零开始学单片机(七)液晶接口

从零开始学单片机(七)液晶接口

时间:11-22 来源:互联网 点击:
这里我买的板子上带有一个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;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top