这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。
1602采用标准的16脚接口,其中:
第1脚:VSS为地电源
第2脚:VDD接5V正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚
程序如下:
//实验目的:熟悉LCD的使用方法,适合3ePIC实验板
//LCD循环显示本站网址和电话
//硬件要求:LCD直接与单片机的B口和D口相连接
#include
#define rs RB1
#define rw RB2
#define e RB3
const char web[ ]={'W','W','W','.','U','E','S','T','C','.','E','D','U','.','C','N'};
//显示学校web地址
const char tel[ ]={'T','A','O','X','I','A','O','S','H','O','U','X','I','E','D','E'};
//显示其他内容
void init(); //申明I/O口初始化函数
void lcd_init(); //申明LCD初始化函数
void write_web(); //申明显示学校web地址函数
void write_tel(); //申明显示其他内容函数
void write(char x); //申明显示1字节数据函数
void lcd_enable(); //申明LCD显示设置函数
void delay(); //申明延时函数
//---------------------------------------
//主函数
void main()
{
while(1)
{
init(); //调用I/O口初始化函数
lcd_init(); //调用LCD初始化函数
write_web(); //调用显示公司web地址函数
PORTD=0XC0; //设置第2行显示地址
lcd_enable(); //调用LCD显示设置函数
write_tel(); //调用显示其他内容函数
}
}
//---------------------------------------
//I/O口初始化函数
void init()
{
ADCON1=0X07; //设置A口为普通I/O口
TRISB=0X00; //设置A口为输出
TRISD=0X00; //设置D口为输出
}
//---------------------------------------
//LCD初始化函数
void lcd_init()
{
PORTD=0X1; //清除显示
lcd_enable();
PORTD=0X38; //8位2行5*7点阵
lcd_enable();
PORTD=0X0e; //显示开,光标开,闪烁
lcd_enable();
PORTD=0X06; //文字不动,光标右移
lcd_enable();
PORTD=0X80; //学校web显示地址
lcd_enable();
}
//--------------------------------------
//显示学校web地址
void write_web()
{
int i;
for(i=0;i<0x10;i++) //一共16字节数据
{
write(web[i]); //查表获取数据并调用写一个字节数据函数送LCD显示
}
}
//--------------------------------------
//显示其他内容 函数
void write_tel()
{
int i;
for(i=0;i<0x10;i++) //一共显示16字节数据
{
write(tel[i]); //查表获取数据并调用写一个字节数据函数送LCD显示
}
}
//--------------------------------------
//写一个字节数据函数
void write(char x)
{
PORTD=x; //待显示数据送PORTD口
rs=1; //该字节数据为数据,而不是命令
rw=0; //此次操作为写,而不是读
e=0; //拉低使能信号
delay(); //保持使能信号为低一段时间
e=1; //拉高使能信号,建立LCD操作所需要的上升沿
}
//--------------------------------------
//LCD显示设置函数
void lcd_enable()
{
rs=0; //该字节数据为命令,而不是数据
rw=0; //此次操作为写,而不是读
e=0; //拉低使能信号
delay(); //保持使能信号为低一段时间
e=1; //拉高使能信号,建立LCD操作所需要的上升沿
}
//--------------------------------------
//延时函数
void delay()
{
int i;
for(i=0;i<5000;i++);
}
上一篇:PIC入门汇编程序集锦
下一篇:PIC入门4,全功能步进电机实验