📄 1602bf
字号:
#include <avr/io.h>
#include <util/delay.h>
#include "1602.h"
void delay_us(unsigned int x)
{
for(;x>0;x--);
}
/********************************************************/
/* 函数:void lcd_busy(void) */
/* 功能:检查LCD忙状态 */
/*busy为1时,忙,等待。busy为0时,闲,可写指令与数据 */
/* */
/********************************************************/
void lcd_busy(void)
{
LCDDDR=0x00; //设置busy口为输入
RS0;RW1;nop();
E1;
while(LCDPIN&0x80); //忙等待
E0;
LCDDDR=0xFF;//设置busy口为输出
}
/********************************************************/
/* 函数:void lcd_wrcmd(uchar CMD,uchar busyflag) */
/* 功能:写入命令到LCD */
/*RS=0,RW=0,E=高脉冲,D0-D7=指令码。 */
/*cmd为指令,busyflag指定是否要检测LCD忙信号 */
/* */
/********************************************************/
void lcd_wrcmd(uchar cmd,uchar busyflag)
{
if(busyflag)lcd_busy();
RS0;RW0;//写入命令
LCDDATA=cmd;
E1;
LCD_DELAY;
E0;
LCD_DELAY;
}
/********************************************************/
/* 函数:void lcd_wrdate(uchar); */
/* 功能:写入数据到LCD */
/*RS=1,RW=0,E=高脉冲,D0-D7=指令码。 */
/*dat为要写入的数据 */
/* */
/********************************************************/
void lcd_wrdata(uchar dat)
{
//lcd_busy();
LCD_DELAY;
RS1;RW0; //写入数据
LCDDATA=dat;
E1;
LCD_DELAY;
E0;
LCD_DELAY;
}
/********************************************************/
/* 函数:lcd_xy(uchar x,uchar y) */
/* 功能:lcd显示定位 */
/* */
/********************************************************/
void lcd_xy(uchar x,uchar y)
{
unsigned char address;
y &= 0x1;
x &= 0xF;
if (y == 0)
address = 0x80 + x;
else
address = 0xc0 + x;
lcd_wrcmd(address,0);
}
/********************************************************/
/* 函数:void lcd_char(uchar x,uchar y,uchar wchar) */
/* 功能:lcd于(x,y)处显示字符 */
/* */
/********************************************************/
void lcd_char(uchar x,uchar y,uchar wchar)
{
lcd_xy(x,y);
lcd_wrdata(wchar);
}
/********************************************************/
/* 函数:void lcd_char(uchar x,uchar y,uchar wchar) */
/* 功能:lcd于(x,y)处显示字符 */
/* */
/********************************************************/
void lcd_string(uchar x,uchar y,char *str)
{
lcd_xy(x,y);
while (*str)
{
lcd_wrdata(*str);
str++;
}
}
/********************************************************/
/* 函数:void LcdReset(void); */
/* 功能:对1602进行复位 */
/* */
/********************************************************/
void LcdReset(void)
{
lcd_wrcmd(0x38,1);
lcd_wrcmd(0x08,1);//显示关闭
lcd_wrcmd(0x01,1);//显示清屏
lcd_wrcmd(0x06,1);//写入新数据后光标右移
lcd_wrcmd(0x0c,1);//显示功能开,显示光标
}
/********************************************************/
/* */
/* 函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -