申请链接:https://www.cirmall.com/bbs/thread-41259-1-1.html
首先介绍一下这个LCD1602模块:
模块上最大的元件当然是LCD1602,屏幕上方有一个RGB三色LED灯和一个电位器!RGB三色LED灯我们后面会发布单独地实验教程,教大家如何通过程序调节LED灯的颜色。电位器的作用是调节屏幕显示的灰度,如果觉得显示的字体太淡或者是太浓,都可以通过这个电位器调节。
屏幕左下方是一块I2C拓展16位IO口的芯片,众所周知,树莓派的GPIO口是十分稀少的,并没有足够的IO口来连接我们的模块,所以我们需要用这一块IO拓展芯片,芯片型号是MCP3017!大家记住芯片的名字,因为等一下写程序的时候需要包含这个芯片的库~芯片旁边为5颗可编程独立按键,我们稍后会发布独立教程指导大家如何写程序操作它们!
我们先将最激动人心的LCD1602液晶屏驱动起来:
首先,将树莓派装好系统,必须使用官方的RASPBIAN系统,不会安装的话可以去看看论坛的新人必看帖子,里面有具体的教程!将模块安装到树莓派上,把树莓派上电,并用Putty通过SSH方式登陆到树莓派,具体方法在这里
我们需要安装一些东西,先更新一下系统:
- sudo apt-get update
- sudo apt-get upgrade
复制代码 需要等待一段时间,具体时间视你的网速而定;
安装GIT:- sudo apt-get install git-core
复制代码 下载wiringPi:
- git clone git://git.drogon.net/wiringPi
复制代码
安装wiringPi:
安装完成后可以用这两个命令来检验是否安装成功:如果安装成功,会显示如下信息:
安装I2C工具:
- sudo apt-get install i2c-tools
复制代码 因为拓展板使用的芯片是用I2C接口和树莓派进行通讯的,而树莓派的硬件I2C默认是关闭的,所以首先我们要先打开I2C接口;
添加以下两行内容:
i2c-bcm2708
i2c-dev
打开这个文档:
- sudo nano /etc/modprobe.d/raspi-blacklist.conf
复制代码 到这两行:
blacklist spi-bcm2708
blacklist i2c-bcm2708
将他们删掉,然后保存退出,并重启树莓派!
重启之后查看I2C设备:
- sudo modprobe i2c-dev
- sudo i2cdetect -y -a 1
复制代码 如图:
可以看到树莓派已经正确识别我们的模块了,I2C地址为0x20!记住这个地址,我们等会儿写程序的时候也会用到。
为了方便大家,我们模块把LCD1602的背光灯灯的Vcc引脚是接在了MCP23017拓展出来的第8个引脚上,大家可以通过将这个IO口置为高电平来点亮屏幕背光灯,置为低电平则是熄灭背光灯。
接下来开始写程序,新建一个源文件:
代码如下:
- #include <stdio.h>
- #include <wiringPi.h>
- #include <mcp23017.h> //将wiringPI中提供的MCP23017的库包含到程序中
- #include <lcd.h> //将wirongPi中提供的LCD驱动库包含到程序中
-
- int main()
- {
- int display,i,count; //定义几个等下需要使用的变凉
- wiringPiSetup(); //初始化wiringPi
- mcp23017Setup (100, 0x20); //初始化MCP23017芯片,IO口起始编号为100,I2C地址为0x20
- printf ("Raspberry Pi - MCP23017 Test\n");
- for(i=0;i<16;i++)
- pinMode(100+i,OUTPUT); //将拓展出的IO口全部置为输出模式
- digitalWrite(107,1); //将107引脚置为高电平,点亮LCD背光灯
- digitalWrite(101,0); //将R/W置为低电平,将LCD设置为写入状态
- display=lcdInit(2,16,4,100,102,103,104,105,106,0,0,0,0); //初始化LCD屏幕
- lcdHome(display); //将LCD的光标归位
- lcdClear(display); //清屏
- lcdPosition(display,0,0); //设置LCD屏幕显示初始位置
- lcdPuts(display,"Hello World"); //在屏幕上显示“Hello World”
- while(1)
- {
- lcdPosition(display,0,1);
- lcdPrintf(display,"%d",count++); //自动循环加1
- delay(300); //延时300毫秒
- printf("lcd1602\n");
- }
- }
复制代码解释一下这个程序中的lcdInit函数: lcdInit(2,16,4,100,102,103,104,105,106,0,0,0,0);这个初始化LCD的函数,第一个和第二个参数2和16分别对应1602屏幕和行和列;4代表我们的模块使用的是4线驱动方式;100和102分别代表1602的RS位和使能(E)位,103-106代表屏幕的数据位,因为模块使用的是四线驱动而不是8线驱动,所以后面四个参数为0。 编译程序: - gcc lcd1602.c /home/pi/wiringPi/devLib/lcd.o -lwiringPi -o lcd1602
复制代码如无意外,你已经可以看到LCD1602被点亮并开始显示东西了,实际效果如图:
|