📄 lcd1602.h.txt
字号:
/*******************************************************************
* *
* 文件: lcd.h *
* *
* 作者: gguoqing *
* 网站: www.willar.com(伟纳电子) *
* 邮箱: gguoqing@willar.com *
* *
*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
* *
********************************************************************/
#ifndef __lcd_h__ //条件汇编指令
#define __lcd_h__ //避免重复调用
#define uchar unsigned char
#define uint unsigned int
extern void delayms(uint ms) ;
extern bit lcd_busy();
extern void lcd_wcmd(uchar cmd);
extern void lcd_wdat(uchar dat);
extern void lcd_init();
extern void lcd_pos(uchar pos);
#endif //条件汇编结束
/**********************************************************/
/*******************************************************************
* *
* 文件: lcd.c *
* *
* 作者: gguoqing *
* 网站: www.willar.com(伟纳电子) *
* 邮箱: gguoqing@willar.com *
* *
*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
* *
********************************************************************/
#include <reg52.h>
#include <intrins.h>
#include <lcd.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
/**********************************************************
延时子程序
**********************************************************/
void delayms(uint ms)
{
uchar k;
while(ms--)
{
for(k = 0; k < 120; k++);
}
}
/**********************************************************
检查LCD忙状态
lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
**********************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/**********************************************************
写指令数据到LCD
RS=L,RW=L,E=高脉冲,D0-D7=指令码。
**********************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/**********************************************************
写显示数据到LCD
RS=H,RW=L,E=高脉冲,D0-D7=数据。
**********************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/**********************************************************
LCD初始化设定
**********************************************************/
void lcd_init()
{
delayms(15);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x0c); //显示开,关光标
delayms(5);
lcd_wcmd(0x06); //移动光标
delayms(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delayms(5);
}
/**********************************************************
设定显示位置
***********************************************************/
void lcd_pos(uchar pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
/*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -