2回答

0收藏

[教程] 52pi-树莓派模块-LCD1602模块-使用教程

Raspberry Pi Raspberry Pi 9950 人阅读 | 2 人回复 | 2015-04-13

申请链接: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方式登陆到树莓派,具体方法在这里
我们需要安装一些东西,先更新一下系统:
  1. sudo apt-get update
  2. sudo apt-get upgrade
复制代码
需要等待一段时间,具体时间视你的网速而定;
安装GIT:
  1. sudo apt-get install git-core
复制代码
下载wiringPi:

  1. git clone git://git.drogon.net/wiringPi
复制代码



安装wiringPi:

  1. cd wiringPi
  2. ./build
复制代码
安装完成后可以用这两个命令来检验是否安装成功:
  1. gpio -v
  2. gpio readall
复制代码
如果安装成功,会显示如下信息:


安装I2C工具:
  1. sudo apt-get install i2c-tools
复制代码
因为拓展板使用的芯片是用I2C接口和树莓派进行通讯的,而树莓派的硬件I2C默认是关闭的,所以首先我们要先打开I2C接口;
  1. sudo nano /etc/modules
复制代码
添加以下两行内容:
i2c-bcm2708
i2c-dev


打开这个文档:
  1. sudo nano /etc/modprobe.d/raspi-blacklist.conf
复制代码
到这两行:
blacklist spi-bcm2708
blacklist i2c-bcm2708
将他们删掉,然后保存退出,并重启树莓派!


重启之后查看I2C设备:
  1. sudo modprobe i2c-dev
  2. sudo i2cdetect -y -a 1
复制代码
如图:

可以看到树莓派已经正确识别我们的模块了,I2C地址为0x20!记住这个地址,我们等会儿写程序的时候也会用到。

为了方便大家,我们模块把LCD1602的背光灯灯的Vcc引脚是接在了MCP23017拓展出来的第8个引脚上,大家可以通过将这个IO口置为高电平来点亮屏幕背光灯,置为低电平则是熄灭背光灯。
接下来开始写程序,新建一个源文件:
  1. vim lcd1602.c
复制代码
代码如下:
  1. #include <stdio.h>                                                                        
  2. #include <wiringPi.h>                                                            
  3. #include <mcp23017.h>                                                          //将wiringPI中提供的MCP23017的库包含到程序中
  4. #include <lcd.h>                                                               //将wirongPi中提供的LCD驱动库包含到程序中

  5. int main()
  6. {
  7.         int display,i,count;                                                       //定义几个等下需要使用的变凉
  8.         wiringPiSetup();                                                           //初始化wiringPi
  9.         mcp23017Setup (100, 0x20);                                                 //初始化MCP23017芯片,IO口起始编号为100,I2C地址为0x20
  10.         printf ("Raspberry Pi - MCP23017 Test\n");
  11.         for(i=0;i<16;i++)
  12.           pinMode(100+i,OUTPUT);                                                   //将拓展出的IO口全部置为输出模式
  13.         digitalWrite(107,1);                                                       //将107引脚置为高电平,点亮LCD背光灯
  14.         digitalWrite(101,0);                                                       //将R/W置为低电平,将LCD设置为写入状态
  15.         display=lcdInit(2,16,4,100,102,103,104,105,106,0,0,0,0);                   //初始化LCD屏幕
  16.         lcdHome(display);                                                          //将LCD的光标归位
  17.         lcdClear(display);                                                               //清屏
  18.         lcdPosition(display,0,0);                                                  //设置LCD屏幕显示初始位置
  19.         lcdPuts(display,"Hello World");                                            //在屏幕上显示“Hello World”
  20.         while(1)
  21.         {
  22.                 lcdPosition(display,0,1);                                                                                       
  23.                 lcdPrintf(display,"%d",count++);                                       //自动循环加1   
  24.                 delay(300);                                                            //延时300毫秒
  25.                 printf("lcd1602\n");
  26.         }
  27. }
复制代码
解释一下这个程序中的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。
编译程序:
  1. gcc lcd1602.c /home/pi/wiringPi/devLib/lcd.o -lwiringPi -o lcd1602
复制代码
如无意外,你已经可以看到LCD1602被点亮并开始显示东西了,实际效果如图:


分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

tjcfeng

发表于 2015-4-17 13:37:04 | 只看该作者

我来补充个原理图吧





板凳

zxjlwt

发表于 2015-5-7 15:02:56 | 只看该作者

能给说明一下,引出来的每个接口都是什么含义吗?
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条