InterFacing16x2 LCD与PIC微控制器

在本届会议中,我们将看到如何将16×2 LCD连接到family PIC18F的PIC18F4550微控制器。您可以在会话中获取16×2 LCD的信息如何与8051微控制器接口16x2 LCD。

PIC18F4550的功能:

  • PIC18F4550属于PIC18F家族;PIC18F4550是8位微控制器,使用RISC架构。PIC18F4550在PDIP中有40个引脚(双线包装中的双包),而TQFP中有44个PIN(Quad Flat Package)。
  • 32KB闪存,2048字节SRAM(同步随机访问存储器),EEPROM(可擦除的程序仅读取内存)为256字节,嵌入了PIC18F4550中。
  • 它有35个I/O引脚用于接口和与其他外围设备进行交流和通信,13频道10bit对数字转换器的模拟用于接口和通信模拟外围设备(直流电动机,LDR等)。
  • 它具有2个CCP和1个ECCP模块,可增强捕获和比较模块,该模块主要用于调制和波形生成功能。CCP模块的16位寄存器作品为16个捕获位寄存器,16比较比特寄存器以及PWM和占空比寄存器。
  • PIC18F4550具有SPI(串行外围界面)主机和从模式的I2C(Intermation Circuit)。它具有用于USB流传输的SPP(流平行端口)。
  • PIC18F4550嵌入4个计时器模块(timer0到timer3),2个比较器模块和3个外部中断。它具有双振荡器选项,允许微控制器和USB模块以不同的时钟速度运行。它可以在2.0V至5.5V中运行

16x2 LCD接口图片微控制器电路图:

16x2 LCD接口图片微控制器的电路图

16x2 LCD接口图片微控制器- 电路说明:

电阻R1用于与LCD的对比度。12 MHz的晶体振荡器连接到用于系统时钟的PIC微控制器PIC18F4550的OSC1和OSC2引脚。电容器C2和C3将对晶体振荡器作用过滤器。您可以使用不同的端口或引脚将LCD连接到不同的端口之前,请检查数据表,无论是出于通用的引脚还是特殊功能引脚。

用于接口16x2 LCD的编程图片:

将LCD接口到PIC与接口到接口没有什么不同8051。编程的基本概念和要点几乎相同。访问以下链接以获取更多信息//www.des-roubi.com/interfacing-16×2-lcd-8051/

只有用于接口的引脚,寄存器和架构会有所不同。当我们查看程序时,诸如初始化之类的功能,将数据发送到LCD几乎相同。

在PIC编程中,也用于初始化LCD的R/W引脚应较低用于编写数据,启用引脚应为高,并且寄存器选择PIN(RS)应高于编写数据。为了发送命令,RS应为低,R/W引脚应低,并且启用引脚应高。

初始化LCD功能:

LCDCMD(0x38); //以8位模式,2行和5×7字体配置LCD
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程序员/调试器将程序转储到您的开发板上。
  • 如果您不使用PICSIT,则只需编译代码,然后使HEX文件使用此HEX文件来编程PIC MicroController。
将LCD接口到PIC18F4550的程序:

#define rs lata.f0
#Define RW Lata.f1
#define en lata.f2
// LCD数据引脚
#define lcdport latb

void lcd_init();
void lcdcmd(未签名的char);
void lcddata(未签名的char);
未签名的char数据[20] =“ Hello World”;
unsigned int i = 0;

void主(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(未签名的char cmdout)
{
lcdport = cmdout;
rs = 0;
rw = 0;
en = 1;
delay_ms(10);
en = 0;
}

void lcddata(未签名的char dataout)
{
lcdport = dataout;
Rs = 1;
rw = 0;
en = 1;
delay_ms(10);
en = 0;
}

2个回应

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map