📄 lcd1602.c~
字号:
#include <mega162.h>
#include <delay.h>
/***********************************************************************
*
*函 数 名:lcd_busy
*
*功 能:对lcd判忙
*
*输入参数:无
*
*返 回 值:无
*
***********************************************************************/
void lcd_busy(void)
{
DDRA=0x00; //设置端口A为带上拉输入
PORTA=0xff;
while(1)
{ //E=0;RS=0;RW=1;
PORTC&=~E;
PORTC&=~RS;
PORTC|=RW;
// delay_us(10);
PORTC|=E; //E=1;
if(!(PINA&0x80))break; //判忙
} //设置端口A为输出
DDRA=0xff;
}
/***********************************************************************
*
*函 数 名:lcd_wr_cmd
*
*功 能:对lcd写命令
*
*输入参数:cmd :待写入的命令
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_cmd(unsigned char cmd)
{
lcd_busy(); //判忙
PORTC&=~RS; //E=0;RS=0;RW=0;
PORTC&=~RW;
PORTA=cmd; //将数据送入端口A
delay_us(50);
PORTC|=E; //E=1;设置为上升沿
delay_us(50); //E=0
PORTC&=~E;
}
/***********************************************************************
*
*函 数 名:lcd_wr_date
*
*功 能:对lcd写数据
*
*输入参数:date :待写入的数据
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_date(unsigned char date)
{
lcd_busy(); //判忙
PORTC|=RS; //E=0;RS=0;RW=0;
PORTC&=~RW; //将数据送入端口A
PORTA=date;
delay_us(50); //E=1;设置为上升沿
PORTC|=E;
delay_us(50);
PORTC&=~E; //E=0
}
/***********************************************************************
*
*函 数 名:lcd_init
*
*功 能:对lcd初始化
*
*输入参数:无
*
*返 回 值:无
*
***********************************************************************/
void lcd_init(void)
{
DDRA=0xff; //设置端口A为上拉输入
DDRC|=0x07;
lcd_wr_cmd(0x38); //设置16×2显示,5×7点阵,8位数据接口
delay_ms(30);
lcd_wr_cmd(0x38); //设置16×2显示,5×7点阵,8位数据接口
lcd_wr_cmd(0x06); //读写字符后地址自动加一
lcd_wr_cmd(0x0f); //显示(1有效)、光标显示(1有效)、光标闪烁(1有效)
lcd_wr_cmd(0x01); //清屏
delay_ms(50);
DDRA=0xff; //设置端口A为输出
DDRC|=0x07;
}
/***********************************************************************
*
*函 数 名:lcd_wr_byte
*
*功 能:对lcd指定地址写一字节数据
*
*输入参数:addr :指定的地址
* date :待写入的数据
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_byte(unsigned char addr,unsigned char date)
{
lcd_wr_cmd(0x80+addr); //设置地址
lcd_wr_date(date); //写数据
delay_ms(10);
}
/***********************************************************************
*
*函 数 名:lcd_wr_nbyte
*
*功 能:对lcd指定地址写多字节数据
*
*输入参数:addr :指定的地址
* *str :指向待写入的数据的指针
* len :待写入的数据长度
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_nbyte(unsigned char addr,unsigned char *str,unsigned char len)
{
unsigned char i;
lcd_wr_cmd(0x80+addr); //设置地址
for(i=0;i<len;i++)
{
lcd_wr_date(*str++); //写数据
}
}
/***********************************************************************
*
*函 数 名:lcd_wr_str
*
*功 能:对lcd指定地址写字符串
*
*输入参数:addr :指定的地址
* *str :指向待写入的数据的指针
*
*返 回 值:无
*
***********************************************************************/
void lcd_wr_str(unsigned char addr,unsigned char *str)
{
lcd_wr_cmd(0x80+addr); //设置地址
while(*str)
{
lcd_wr_date(*str++); //写数据
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -