单片机写LCD1602液晶程序源码
/***********写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++);
}
}
单片机LCD1602液晶程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)