LCD1602显示由命令和数据共同控制;RS-数据/命令控制,0–数据,1–命令;RW-读/写控制,0–写,1–读;E-使能/失能控制,0-失能,1–使能。数据端口必须接上拉电阻(1K—10K),否则可能会出现乱码或不显示。
一、LCD程序
1、LCD.C程序
在程序并不复杂时判忙函数可以不使用
#include "lcd.h"
#include "intrins.h"
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P1^2;
void Delay20us(void)
{
unsigned char i;
_nop_();
i = 6;
while (--i);
}
void Delay5ms(void)
{
unsigned char i, j;
i = 9;
j = 244;
do
{
while (--j);
} while (--i);
}
void writecmd(unsigned char x)
{
RS = 0;
RW = 0;
E = 0;
Delay20us();
P0 = x;
Delay20us();
E = 1;
Delay20us();
E = 0;
}
void writedata(unsigned char y)
{
RS = 1;
RW = 0;
E = 0;
Delay20us();
P0 = y;
Delay20us();
E = 1;
Delay20us();
E = 0;
}
void Init_LCD1602(void)
{
writecmd(0x38);
writecmd(0x06);
writecmd(0x0C);
writecmd(0x01);
Delay5ms();
}
void write_cmd(unsigned char hang,unsigned char ge)
{
if(hang == 1) writecmd(0x80 + ge);
else if(hang == 2) writecmd(0xC0 + ge);
writedata(1 + 0x30);
writedata(2 + 0x30);
writedata(3 + 0x30);
writedata(4 + 0x30);
writedata(5 + 0x30);
}
void write_cmd_1(unsigned char hang,unsigned char ge)
{
if(hang == 1) writecmd(0x80 + ge);
else if(hang == 2) writecmd(0xC0 + ge);
writedata('H');
writedata('e');
writedata('l');
writedata('l');
writedata('o');
}
2、LCD.h程序
#ifndef _LCD_H
#define _LCD_H
#include "reg52.h"
void Delay20us(void);
void Delay5ms(void);
void writecmd(unsigned char x);
void writedata(unsigned char y);
void Init_LCD1602(void);
void write_cmd(unsigned char hang,unsigned char ge);
void write_cmd_1(unsigned char hang,unsigned char ge);
#endif
二、main.c程序
#include "lcd.h"
void main(void)
{
Init_LCD1602();
while(1)
{
write_cmd(1,3);
write_cmd_1(2,3);
}
}