#ifndef _LCD_H_
#define _LCD_H_
#include <reg52.h>
#include "../delay/delay.h"
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
extern void lcd_write(unsigned char byte, unsigned char flag);
extern void lcd_init();
extern void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte);
extern void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *src);
#endif
#include "lcd.h"
/*------------------------------------------------
LCD初始化函数
------------------------------------------------*/
void lcd_init()
{
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM); //设置8位数据接口两行显示(5 * 7 点阵字符)
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(15);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(15);
lcd_write(0x08,LCD_WRITE_COM); //关闭显示,关闭光标和闪烁
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM); //清屏
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM); //设置指针方式,画面平移
delay_ms(5);
lcd_write(0x0c,LCD_WRITE_COM); //设置指针方式,画面不平移
delay_ms(5);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void lcd_write(unsigned char byte, unsigned char flag)
{
if(1 == flag)
{
RS = LCD_WRITE_DATA; //选择输入数据为数据
}
else
{
RS = LCD_WRITE_COM; //选择输入数据为指令
}
RW = 0; //写
E = 1; //选中LCD
LCDPORT = byte;
delay_us(5); //稳定性考虑
E = 0; //失能LCD
}
/*------------------------------------------------
显示一个字节
------------------------------------------------*/
void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte)
{
if(0 == y)//确定显示的列(0 - 1)
{
lcd_write(0x80 + x - 1, LCD_WRITE_COM);
lcd_write(byte, LCD_WRITE_DATA);
}
else
{
lcd_write(0x80 + 0x40 + x - 1, LCD_WRITE_COM);
lcd_write(byte, LCD_WRITE_DATA);
}
}
/*------------------------------------------------
显示字符串
------------------------------------------------*/
void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *src)
{
if(y == 0)//确定显示的列(0 - 1)
{
lcd_write(x + 0x80,LCD_WRITE_COM);
}
else
{
lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
}
while(*src != '\0')
{
lcd_write(*src,LCD_WRITE_DATA);
src++;
}
}
Lcd 1602
最新推荐文章于 2024-09-26 09:55:13 发布