📄 lcd1602.c
字号:
#include"lcd1602.h"
uchar date[2];
void delay(uchar ms)
{ // 延时子程序
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL LCD_check_busy() //定义LCD_check_busy()返回值是位
{ // 测试LCD忙碌状态
BOOL result;
rs = 0;
rw = 1;
ep = 1;
result = (BOOL)(LCD_DATA&0x80); //读取第八位
ep = 0;
return result; //返回检测信号
}
void lcd_write(uchar cd,uchar temp)
{ // 写入指令数据到LCD
uchar i;
while(LCD_check_busy());
date[0]=temp&0xf0; //取高四位
date[1]=(temp<<4)&0xf0; //取低四位
for(i=0;i<2;i++) //循环二次,分别送数据的高低位
{
if(cd) //当写数据时使RS=1,当为写指令时RS=0
rs = 1;
else
rs=0;
rw = 0;
ep = 0;
LCD_DATA = date[i]; //送数据到LCD
if(cd) //保持RS原来的状态,不然会使送数据失败
rs = 1;
else
rs=0;
ep = 1;
ep = 0;
}
}
void lcd_pos(uchar pos)
{
lcd_write(0,pos|0x80); //设定显示位置
}
void lcd_init()
{ //LCD初始化设定
lcd_write(0,0x38); //写三个0x38是初始化要求
delay(1);
lcd_write(0,0x38);
delay(1);
lcd_write(0,0x38);
delay(1);
lcd_write(0,0x28); // 四位数据数、双行显示、5X7点阵字型体
delay(1);
lcd_write(0,0x0C); // 显示开、关光标
delay(1);
lcd_write(0,0x06); // 数据读、写操作后,AC自动增一
delay(1);
lcd_write(0,0x18);
delay(1);
lcd_write(0,0x01); //清除LCD的显示内容
delay(1);
}
void lcd_strwdat( uchar Loc,uchar *str )
{ //写入字符串显示数据到LCD
lcd_pos(Loc);
while(*str!='\0')
{
lcd_write(1,*str);
str++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -