微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机写LCD1602液晶程序源码

单片机写LCD1602液晶程序源码

时间:12-02 来源:互联网 点击:
本程序的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++);
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top