lcd.c
#include "lcd.h"
#include "reg52.h"
void lcd1602_write_cmd(uchar cmd)
{
LCD1602_RS=0; //写命令
LCD1602_RW=0;//写
LCD1602_E=0;
LCD1602_DATEPORT=cmd;
delay_ms(1);//1ms
LCD1602_E=1;
delay_ms(1);
LCD1602_E=0;
}
void lcd1602_write_data(uchar dat)
{
LCD1602_RS=1; //写数据
LCD1602_RW=0;//写
LCD1602_E=0;
LCD1602_DATEPORT=dat;
delay_ms(1);//1ms
LCD1602_E=1;
delay_ms(1);
LCD1602_E=0;
}
void lcd1602_init(void)
{
lcd1602_write_cmd(0x38);
lcd1602_write_cmd(0x0c);
lcd1602_write_cmd(0x06);//模式
lcd1602_write_cmd(0x01);
}
void lcd1602_clear(void)
{
lcd1602_write_cmd(0x01);
}
//x:0-15 y:0-1
void lcd1602_show_string(uchar x,uchar y,uchar *str)//lcd1602_show_string(0,0,"123456789")
{
uchar i=0;
if((y>1)|(x>15))return;
if(y<1) //从第一行开始显示
{
while(*str!='\0')
{
if(i<16-x)lcd1602_write_cmd(0x80+x+i);//第一行
else lcd1602_write_cmd(0x80+0x40+x+i-16);//第二行
lcd1602_write_data(*str);
str++;
i++;
}
}
else //从第二行开始显示
{
while(*str!='\0')
{
if(i<16-x)lcd1602_write_cmd(0x80+0x40+x+i);//第一行
else lcd1602_write_cmd(0x80+x+i-16);//第二行
lcd1602_write_data(*str);
str++;
i++;
}
}
}
void lcd1602_show_data(uchar x,uchar y,uchar dat)//lcd1602_show_data(0,0,1);dat+0x30
{
if((y>1)|(x>15))return;
if(y<1)//第一行
{
lcd1602_write_cmd(0x80+x);
}
else //第二行
{
lcd1602_write_cmd(0x80+0x40+x);
}
lcd1602_write_data(dat+0x30);
}
lcd.h
#ifndef __lcd_H_
#ifndef __lcd_H_
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATEPORT P2
sbit LCD1602_RS=P0^7;
sbit LCD1602_RW=P0^6;
sbit LCD1602_E=P0^5;
void delay_ms(uint ms);
void lcd1602_write_cmd(uchar cmd);
void lcd1602_write_data(uchar dat);
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(uchar x,uchar y,uchar *str);
void lcd1602_show_data(uchar x,uchar y,uchar dat);
#endif
今天的文章lcd1602驱动程序分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29131.html