液晶使用

来源:互联网 发布:网络攻防技术与实践 编辑:程序博客网 时间:2024/05/01 05:54

v先看看引脚说明,在开发板上,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 <reg52.h>


#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;
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/monkeyxxxx/archive/2009/11/14/4805976.aspxc

原创粉丝点击