技术热线: 4007-888-234

如何使用PIC单片机控制LCD显示屏?

更新时间: 2021-12-06
阅读量:4643

在本案例中,英锐恩单片机开发工程师将介绍如何将16×2 LCD显示屏连接到PIC18F系列的PIC18F4550单片机。

PIC18F4550的特点:

(1)PIC18F4550属于PIC18F系列;PIC18F4550是一款8位单片机,采用RISC架构。PIC18F4550有40个PDIP(双列直插式封装)引脚和44个TQFP(四方扁平封装)引脚。
(2)PIC18F4550中嵌入了32KB闪存、2048字节的SRAM(同步随机存取存储器)、256字节的EEPROM(电可擦除程序只读存储器)。
(3)它有35个I/O引脚,用于与其他外围设备接口和通信,13通道10位模数转换器,用于连接和通信模拟外围设备(直流电机、LDR等)。
(4)它有2个CCP和1个ECCP模块,是增强型捕获和比较模块,主要用于调制和波形生成功能。CCP模块是16位寄存器,作为16位捕捉位寄存器、16位比较位寄存器、PWM和占空比寄存器。
(5)PIC18F4550具有SPI(串行外设接口)和i2c(内部集成电路)用于主从模式。它具有用于USB流传输的SPP(流并行端口)。
(6)PIC18F4550内嵌了4个定时器模块(timer0到timer3)、2个比较器模块和3个外部中断。它具有双振荡器选项,允许单片机和USB模块以不同的时钟速度运行。它可以在2.0V至5.5V下工作。

16X2 LCD接口PIC单片机电路图:

Circuit-Diagram-of-16X2-LCD-Interfacing-PIC-Microcontroller.png

16X2 LCD接口PIC单片机-电路说明:

电阻器R1用于为LCD提供对比度。12MHz的晶振连接到Pic单片机PIC18F4550的OSC1和OSC2引脚作为系统时钟。电容C2和C3将作为晶体振荡器的滤波器。您可以使用不同的端口或引脚来连接LCD,然后再转到不同的端口,请检查数据手册中的引脚是通用引脚还是特殊功能引脚。

将16X2 LCD连接到PIC:

将LCD连接到PIC与连接到8051没有什么不同。只有用于接口的引脚、寄存器和架构会有所不同。当我们查看程序时,初始化、向LCD发送数据等功能几乎相同。

在用于初始化LCD的pic编程中,R/W引脚应为低电平以写入数据,启用引脚应为高电平,寄存器选择引脚(RS)应为高电平以写入数据。要发送命令,RS应为低电平,R/W引脚应为低电平,使能引脚应为高电平。

初始化LCD功能:

lcdcmd(0x38);//配置LCD为8位模式,2行5×7字体
lcdcmd(0x0C);//显示开启和关闭光标
lcdcmd(0x01);//清除显示屏幕
lcdcmd(0x06);//增加光标
lcdcmd(0x80);//设置光标位置为第一行第一列

向LC发送命令:

rs=0;寄存器选择引脚为低电平。
rw=0;读/写引脚也用于向LCD写入命令。
en=1;使能引脚为高电平。
向LCD发送数据:
rs=1;寄存器选择引脚为高电平。
rw=0;读/写引脚也用于向LCD写入命令。
en=1;使能引脚为高电平。

编程步骤:

在您的系统中安装MPLAB并创建一个新项目,在选择设备和系列时选择PIC18F系列并将PIC18F4550控制器添加到您的项目中。
选择您已安装的编译器并将文件添加到您的项目中。添加文件后粘贴下面给出的代码并运行它。因为它是一个预编译和测试过的程序,所以你不会发现任何错误。
在没有错误的情况下编译程序后,使用PICKIT2或PICKIT3编程器/调试器将程序转储到您的开发板上。
如果您不使用PICKIT,则只需编译代码并使HEX文件使用此HEX文件对PIC单片机进行编程。

LCD与PIC18F4550接口程序:

#define rs LATA.F0
#define rw LATA.F1
#define en LATA.F2
//LCD 数据引脚
#define lcdport LATB

void lcd_init();
void lcdcmd(unsigned char);
void lcddata(unsigned char);
unsigned char data[20]=”hello world”;
unsigned int i=0;

void main(void)
{
TRISA=0;                             // 将端口 A 配置为输出端口
LATA=0;
TRISB=0;                             // 配置端口 B 为输出端口
LATB=0;
lcd_init();                              // LCD 初始化
while(data[i]!=’\0′)
{
lcddata(data[i]);     // 调用lcddata函数
i++;
Delay_ms(300);
}
}

void lcd_init()
{
lcdcmd(0x38);
lcdcmd (0x0C);
lcdcmd(0x01);
lcdcmd(0x06);
lcdcmd(0x80);

}

void lcdcmd(unsigned char cmdout)
{
lcdport=cmdout;
rs=0;
rw=0;
en=1;
Delay_ms(10);
en=0;
}

void lcddata(unsigned char dataout)
{
lcdport=dataout;
rs=1;
rw=0;
en=1;
Delay_ms(10);
en=0;
}

以上就是英锐恩单片机开发工程师分享的“如何使用PIC单片机控制LCD显示屏?”。英锐恩专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机。