LM
//RS,RW,E分别接RE0,RE1,RE2;D7-D0接RD口
#include <pic.h> /*头文件*/
#define LCD_RS RE0 /*定义引脚*/
#define LCD_RW RE1
#define LCD_E RE2
#define Busy RD7
void WR_COMM();
void DISPLY();
void CHECK_BF();
void PLAY_LCD(); /*函数声明*/
void DELAY();
#define Data PORTD // 数据IO口
main()
{
TRISE=0X00;
PLAY_LCD(); /*LCD初始化子程序*/
CHECK_BF(); //判断液晶模块是否忙?
Data=‘O‘; /* 将需要显示的数据送入LCD */
DISPLY(); /*调用显示执行子程序 显示字母 " O " */
CHECK_BF(); //判断液晶模块是否忙?
Data=‘N‘; /* 将需要显示的数据送入LCD */
DISPLY(); /*调用显示执行子程序 显示字母 " N " */
CHECK_BF(); //判断液晶模块是否忙?
Data=‘1‘; /* 将需要显示的数据送入LCD */
DISPLY(); /*调用显示执行子程序 显示数字 " 1 " */
CHECK_BF(); //判断液晶模块是否忙?
Data=‘2‘; /* 将需要显示的数据送入LCD */
DISPLY(); /*调用显示执行子程序 显示数字 " 2 " */
while(1); /*无限循环 */
} /*主程序结束时的括号*/
/*..................LCD子函数...........................*/
void PLAY_LCD() //LCD初始化子程序
{
CHECK_BF();
Data=0x01; //00000001B 清屏并光标复位
WR_COMM(); //调用写入命令子程序
CHECK_BF();
Data=0x30; //00110000B 设置:8位总线、1行、5x7点阵方式
WR_COMM(); //调用写入命令子程序
CHECK_BF();
Data=0x0F; //00001111B 显示器开、光标开、光标允许闪烁
WR_COMM(); //调用写入命令子程序
CHECK_BF();
Data=0x14; //00010100B 文字不动,光标自动右移
WR_COMM(); //调用写入命令子程序
CHECK_BF();
Data=0x00; //H 写入显示起始地址(第1行第1个位置)
WR_COMM(); //调用写入命令子程序
}
void WR_COMM() /*写入命令子程序*/
{
LCD_RS=0; //写入控制命令的子程序
LCD_RW=0;
LCD_E=1; //E=0 执行显示命令
DELAY();
LCD_E=0;
DELAY();
}
void CHECK_BF() /*判断LCD是否忙碌子程序*/
{ loop:
TRISD=0XFF;
LCD_RS=0;
LCD_RW=1;
LCD_E=0;
LCD_E=0; //相当于NOP
LCD_E=1;
if(Busy==1) goto loop; //如果P1.7为高电平表示忙就循环等待
DELAY();
TRISD=0X00;
}
void DISPLY() //显示执行子程序
{
LCD_RS=1; //RS=1
LCD_RW=0; //RW=0 准备写入数据
LCD_E=1; //E=0 执行显示命令
DELAY();
LCD_E=0; //E=1 ;显示完成,程序停车
DELAY();
}
void DELAY()
{ int i;
for(i=10;--i;)continue;
}