LCD1602的温馨提示
1.系统的电源从上电到稳定要有几十毫秒甚至更长的时间,这段时间极易使单片机程序走乱,或者开始几行代码没有正确执行。解决的方法是在配置位(--CONFIG())中一定要加入上电定时使能位:PWRTEN。这样就可以使得单片机在上电时的72MS内保持复位状态,避免由于电压还未稳定而发生程序执行错误等问题。
2.在字符间隔的空白处,要写入空格补齐,如数组里的字符串,即使不足16位,后面也要用空格补齐到16位,其他没有字符的空白处,同样写入空格。总的原则是:所有字符间隔的空白处,一定不要使它们处于游离状态。这样可以有效的抗电源等干扰,避免出现乱码。
3.如果程序的功能比较复杂,要完成的任务比较多,使用液晶时,一定要考虑的是:不要频繁的去读写液晶,那会占用很多的计时,会严重影响任务的执行。所以,刷新屏幕,更新数据一定要安排的合理。
下面的代码所用指令是STC 89C51单片机所用如需用其它芯片请另行更改。
LCD1602的实现代码
#include "reg51.h"
#include "LCD1602.h"
unsigned char code tab[]={" wellcome to "}
void delay_1602(uc z) //延迟z ms
{
uc x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uc com) //写指令 参照时序写程序
{
lcd_rs=0; //进入写命令模式
lcd_rw=0;
P1=com; //P1口为数据口
delay_1602(5); //延迟作用是等待数据稳定
lcd_en=0; //下面4行为让E产生高脉冲
delay_1602(5); //
lcd_en=1; //
delay_1602(5);
lcd_en=0;
}
void write_date(uc date) //写数据 参照时序写 参照写命令程序理解
{
lcd_rs=1;
lcd_rw=0;
P1=date;
delay_1602(5);
lcd_en=0;
delay_1602(5);
lcd_en=1;
delay_1602(5);
lcd_en=0;
}
void lcd_init() //初始化程序。先设置显示开关和光标
{
//
lcd_en=0;
write_com(0x38); //设置16*2显示。
write_com(0x0c); //设置开显示,显示光标
write_com(0x06); //写一个字符后地址指针加1
write_com(0x01); //清平指令
}
void main()
{
lcd_init(); // 初始化LCD
delay_1602(100); //延时10ms
while(1)
{
write_com(0x06); //向右移动光标
while(tab[ i ] != '?')
{
write_date (tab[ i ]); //显示字符"WLCOME TO"
i++;
}
}
以上所有信息仅作为学习交流使用,不作为任何学习和商业标准。若您对文中任何信息有异议,欢迎随时提出,谢谢!