1.LCD1602概述
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
//硬件接线
//电源
VSS -- GND
VDD -- 5V
//对比度
VO -- GND
//控制线
RS -- P1.0
RW -- P1.1
E -- P1.4
//背光灯
A -- 5V
K -- GND
//数据
D0到D7 -- P0.到P0.7
#include "reg52.h" #include "intrins.h" #define databuffer P0 sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^4; void check_busy() { char tmp = 0x80; databuffer = 0x80; while(tmp & 0x80){ RS = 0; RW = 1; EN = 0; _nop_(); EN = 1; _nop_(); _nop_(); tmp = databuffer; EN = 0; _nop_(); } } void Write_Cmd(char cmd) { check_busy(); RS = 0; RW = 0; EN = 0; _nop_(); databuffer = cmd; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); } void Write_Data(char datashow) { check_busy(); RS = 1; RW = 0; EN = 0; _nop_(); databuffer = datashow; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); } void Delay15ms() //@11.0592MHz { unsigned char i, j; i = 27; j = 226; do { while (--j); } while (--i); } void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 9; j = 244; do { while (--j); } while (--i); } void LCD1602_init() { //(1)延时 15ms Delay15ms(); //(2)写指令 38H(不检测忙信号) Write_Cmd(0x38); //(3)延时 5ms Delay5ms(); //(4)以后每次写指令,读/写数据操作均需要检测忙信号 //(5)写指令 38H:显示模式设置 Write_Cmd(0x38); //(6)写指令 08H:显示关闭 Write_Cmd(0x08); //(7)写指令 01H:显示清屏 Write_Cmd(0x01); //(8)写指令 06H:显示光标移动设置 Write_Cmd(0x06); //(9)写指令 0CH:显示开及光标设置 Write_Cmd(0x0c); } void LCD1602_showLine(char row,char col, char *string) { switch(row) { case 1: Write_Cmd(0x80+col); while(*string){ Write_Data(*string); string++; } break; case 2: Write_Cmd(0x80+0x40+col); while(*string){ Write_Data(*string); string++; } break; } } void main() { char cmd = 0x80 + 0x05; char datashow = 'C'; LCD1602_init(); //Write_Cmd(cmd); //Write_Data(datashow); LCD1602_showLine(1,5,"NO 2"); LCD1602_showLine(2,1,"CLC homesome"); }