微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MSC51系列的LCD1602通用程序

基于MSC51系列的LCD1602通用程序

时间:11-11 来源:互联网 点击:
#include

#define PORT P2
sbit RS = P3^5;//1602的数据/指令选择控制线
sbit RW = P3^6;//1602的读写控制线
sbit EN = P3^7;//1602的使能控制线

unsigned char code table[] = "LCD1602 check ok"; //要显示的内容1放入数组tablel
unsigned char code table1[] = "study up"; //要显示的内容2放入数组table1

void DelayXms(unsigned int time)//延时程序,大约1ms
{
unsigned char i;
while(time--)
{
for(i = 0;i < 112;i++)//11.0592MHz晶振
{};
}
}
void LCDWriteCom(unsigned char com) //1602写命令函数
{
RS = 0; //选择指令寄存器
RW = 0; //选择写
PORT = com; //把命令字送入PORT
DelayXms(5); //延时一小会儿,让1602准备接收数据
EN = 1; //使能线电平变化,命令送入1602的8位数据口
EN = 0;
}
void LCDWriteDat(unsigned char dat) //1602写数据函数
{
RS = 1; //选择数据寄存器
RW = 0; //选择写
PORT = dat; //把要显示的数据送入PORT
DelayXms(5); //延时一小会儿,让1602准备接收数据
EN = 1; //使能线电平变化,数据送入1602的8位数据口
EN = 0;
}
void LCDInit() //1602初始化函数
{
LCDWriteCom(0x38); //8位数据,双列,5*7字形
LCDWriteCom(0x0c); //开启显示屏,关光标,光标不闪烁
LCDWriteCom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
LCDWriteCom(0x01); //清屏
}
void main() //主函数
{
unsigned char n,m = 0;
LCDInit(); //液晶初始化
LCDWriteCom(0x80); //显示地址设为80H(即00H,)上排第一位
for(m = 0;m < 16;m++) //将table[]中的数据依次写入1602显示
{
LCDWriteDat(table[m]);
DelayXms(200);
}
LCDWriteCom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位
for(n = 0;n<8;n++) //将table1[]中的数据依次写入1602显示
{
LCDWriteDat(table1[n]);
DelayXms(200);
}
while(1); //动态停机
}

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

网站地图

Top