原理图CGRAM+CGROM(字摸库)
代码:
LCD1602.c
#include "LCD1602.h" sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_E=P2^7; void LCD_Delay(void) //@11.0592MHz { unsigned char i, j; _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } void LCD_WriteCommand(unsigned char Command) { LCD_RS=0; //设置指令模式 LCD_RW=0; //设置写模式 LCD_DataPort=Command; //写指令 LCD_E=1; //使能 LCD_Delay(); LCD_E=0; LCD_Delay(); } void LCD_WriteData(unsigned char Data) { LCD_RS=1;//设置数据模式 LCD_RW=0;//设置写模式 LCD_DataPort=Data;//写数据 LCD_E=1;//使能 LCD_Delay(); LCD_E=0; LCD_Delay(); } void LCD_Init(void) { LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵 LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关 LCD_WriteCommand(0x06);//数据读写操作后,光标自动加1,画面不动 LCD_WriteCommand(0x01);//清屏 } void LCDShowChar(unsigned char Line,unsigned char Column,unsigned char Data) { if(Line==1) { LCD_WriteCommand(0x80 | (Column-1));//设置光标位置 }else { LCD_WriteCommand(0x80 | (Column-1)+0x40); } LCD_WriteData(Data);//发送要显示的字符数据 } void LCDShowString(unsigned char Line,unsigned char Column,unsigned char *DataString,unsigned char Length) { unsigned char i; if(Line==1) { for(i=0;i<Length;i++) { LCD_WriteCommand(0x80 | (Column-1+i));//设置光标位置 LCD_WriteData(DataString[i]); } } else { for(i=0;i<Length;i++) { LCD_WriteCommand(0x80 | (Column-1+i)+0x40);//设置光标位置 LCD_WriteData(DataString[i]); } } } |
LCD1602.h
#ifndef __LCD1602_H_ #define __LCD1602_H_ #include <REGX52.h> #include <INTRINS.h> #define LCD_DataPort P0 void LCD_Delay(void) ; //@11.0592MHz void LCD_WriteCommand(unsigned char Command); void LCD_WriteData(unsigned char Data); void LCD_Init(void); void LCDShowChar(unsigned char Line,unsigned char Column,unsigned char Data); void LCDShowString(unsigned char Line,unsigned char Column,unsigned char *DataString,unsigned char Length); #endif |