历史上的今天
今天是:2024年11月15日(星期五)
2019年11月15日 | lcd1602显示的单片机子程序 模块化可多次调用
2019-11-15 来源:51hei
给大家分享一个lcd1602显示的子程序模块化可多次调用,非常方便移植,不改或改一点就可以用到自己的程序中
单片机源程序如下:
#include "lcd1602.h"
/*LCD1602忙碌等待*/
void LCD1602Wait()
{
unsigned char sta;//读取LCD1602状态字
/*读取液晶状态字之前必须将P2口全部拉高*/
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
LCD1602_EN = 0;
do
{
LCD1602_EN = 1;
sta = LCD1602_DB;//读状态字
LCD1602_EN = 0;
} while (sta & 0x80); //检测最高位是否为1,1忙碌,0空闲
}
/*LCD1602写命令*/
void LCD1602WriteCmd(unsigned char cmd)
{
//读写前要进行液晶的忙碌等待
LCD1602Wait();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_EN = 0;
LCD1602_DB = cmd;
LCD1602_EN = 1;//高脉冲
LCD1602_EN = 0;//关闭液晶输出
}
/*LCD1602写数据*/
void LCD1602WriteData(unsigned char dat)
{
LCD1602Wait();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_EN = 0;
LCD1602_DB = dat;//送入数据
LCD1602_EN = 1;//高脉冲
LCD1602_EN = 0;//关闭液晶输出
}
/*液晶初始化*/
void InitLCD1602()
{
LCD1602WriteCmd(0x38); //写指令38H
LCD1602WriteCmd(0x0C); //开显示不显示光标
LCD1602WriteCmd(0x06); //写入字符时字符指针++且光标++
LCD1602WriteCmd(0x01); //显示清屏
}
/*在LCD1602的坐标(x, y)位置显示一个字节*/
void LcdShowData(unsigned char x, unsigned char y, unsigned char byte)
{
unsigned char addr;
if (y == 0)
{
addr = 0x00 + x; //第一行的x位置显示
}
else
{
addr = 0x40 + x; //第二行x的位置显示
}
LCD1602WriteCmd(addr + 0x80);
LCD1602WriteData(byte);
}
/*在LCD1602的坐标(x, y)位置显示str*/
void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str)
{
unsigned char addr;
if (y == 0)
{
addr = 0x00 + x; //第一行的x位置显示
}
else
{
addr = 0x40 + x; //第二行x的位置显示
}
LCD1602WriteCmd(addr + 0x80);
while (*str != '




