基于MSC51系列的LCD1602通用程序
#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); //动态停机
}
MSC51系列LCD1602通用程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)