/***********************************************
程序名称:1602液晶显示程序
简要说明:使用FM1602液晶显示器,数据口接P0口,控制端接P2.0-P2.2
寄存器选择信号端RS-P2.0、读写信号端R/W-P2.1、使能信号端EP-P2.2
编 写:JiangX.net
***********************************************/
#include <reg51.h>
#include <intrins.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
sbit rs = P2^0; //RS
sbit rw = P2^1; //读写选择RW
sbit ep = P2^2; //使能信号E
BYTE code dis1[] = {"Welcome!"};
BYTE code dis2[] = {"www.JiangX.net"};
/*****延时子程序*****/
void delay(BYTE ms)
{
BYTE i;
while(ms--)
{
for(i = 0; i< 125; i++);
}
}
/*****判别LCD忙碌状态*****/
BOOL lcd_bz()
{
BOOL result;
rs = 0;
rw = 1;
ep = 1;
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
/*****写入指令数据到LCD*****/
void lcd_wcmd(BYTE cmd)
{
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
P0 = cmd;
ep = 1;
ep = 0;
}
/*****设定显示位置*****/
void lcd_start(BYTE start)
{
lcd_wcmd(start | 0x80);
}
/*****写入字符显示数据到LCD*****/
void lcd_data(BYTE dat)
{
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
ep = 1;
ep = 0;
}
/*****LCD初始化设定*****/
void lcd_init()
{
delay(15);
lcd_wcmd(0x38); //设定LCD为16*2显示,5*7点阵,8位数据接口
delay(2);
lcd_wcmd(0x0c); //开显示,不显示光标
delay(2);
lcd_wcmd(0x06); //显示光标自动右移,整屏不移动
delay(2);
lcd_wcmd(0x01); //显示清屏
delay(2);
}
/*****主函数*****/
void main()
{
BYTE i;
lcd_init(); // 初始化LCD
delay(20);
lcd_start(4); // 设置显示位置为第一行的第5个字符
i = 0;
while(dis1[i] != '\0')
{ // 显示第一行字符
lcd_data(dis1[i]);
i++;
}
lcd_start(0x41); // 设置显示位置为第二行第一个字符
i = 0;
while(dis2[i] != '\0')
{
lcd_data(dis2[i]); // 显示第二行字符
i++;
}
while(1);
}
程序演示效果如下:

本站原创如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]