您的位置 首页 硬件

单片机写LCD1602液晶程序源码

本程序的pdf格式的原理图下载:http:www51heicomfks51pdf***********写1602液晶*****************功能:写1602液晶*时间:二〇一

本程序的pdf格局的原理图下载:http://www.51hei.com/f/ks51.pdf

/***********写1602液晶**************/
/**
*功用:写1602液晶
*时刻:二〇一四年三月十五日 08:59:26
*作者:寒竹子
**/

#include
#include

typedef unsigned int uint;
typedef unsigned char uchar;

//LCD1602
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_EN = P1^5;

void LCD1602_Wait();
void writeCmd_LCD1602(uchar cmd);
void writeData_LCD1602(uchar dat);
void LCD1602_Init();
void writeString_LCD1602(uchar * pstr);
void LCD1602_ShowStr(uchar x, uchar y, uchar * pstr);

void main()
{
LCD1602_Init();

/*
writeCmd_LCD1602(0x00 | 0x80);
writeData_LCD1602(C);

writeString_LCD1602(“Hanzhuzi”);
*/
LCD1602_ShowStr(0, 0, “han zhu ying xue”);
LCD1602_ShowStr(0, 1, “QQ:1754410821”);
while (1);
}

//LCD1602判忙预备
void LCD1602_Wait()
{
uchar sta = 0;//读取液晶当时状况
P0 = 0xFF;//读取状况时有必要把总线拉高才干正确的读取其状况!不然写入有时不成功!!!
LCD1602_RS = 0;
LCD1602_RW = 1;

do
{
LCD1602_EN = 1;
sta = P0;//读取状况
LCD1602_EN = 0;//防止液晶输出数据影响到总线P0上的其他器材
} while (sta & 0x80);//检测第七位是否为1,若为1持续等候直到0停止
}

//LCD1602写指令
void writeCmd_LCD1602(uchar cmd)
{
//在进行读写数据之前要进行液晶繁忙等候
LCD1602_Wait();

LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_EN = 0;
P0 = cmd;
LCD1602_EN = 1;//高脉冲送入指令
LCD1602_EN = 0;//防止液晶输出数据影响其他的器材
}

//LCD1602写数据
void writeData_LCD1602(uchar dat)
{
LCD1602_Wait();

LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_EN = 0;
P0 = dat;//送入数据
LCD1602_EN = 1;//高脉冲
LCD1602_EN = 0;//防止液晶输出数据影响到其他器材
}

//LCD1602初始化
void LCD1602_Init()
{
writeCmd_LCD1602(0x38);//5*7点阵,16*2显现
writeCmd_LCD1602(0x0C);//开显现,不显现光标
writeCmd_LCD1602(0x06);//数据指针++,光标++
writeCmd_LCD1602(0x01);//清屏
}

//LCD1602写String
void writeString_LCD1602(uchar * pstr)
{
while (*pstr)
{
writeData_LCD1602(*pstr++);
}
}

//LCD1602按地址写
void LCD1602_ShowStr(uchar x, uchar y, uchar * pstr)
{
uchar addr = 0;
//判别RAM地址
if (y == 0) //LCD1602的左上角地址是 (0, 0)
{
addr = (0x00 + x);//确认x坐标,x为偏移量
}
else
{
addr = (0x40 + x);//第二行
}

//写入地址
writeCmd_LCD1602(addr | 0x80);//地址是从0x80H开端的

//写入数据
while (*pstr != )
{
writeData_LCD1602(*pstr++);
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/253975.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部