查看: 9377|回复: 2

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

[复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-4-13 14:24:34 | 显示全部楼层 |阅读模式
    分享到:
    申请链接:https://www.cirmall.com/bbs/thread-41259-1-1.html
    首先介绍一下这个LCD1602模块:
    DSC_1013.jpg


    DSC_1017.jpg
    模块上最大的元件当然是LCD1602,屏幕上方有一个RGB三色LED灯和一个电位器!RGB三色LED灯我们后面会发布单独地实验教程,教大家如何通过程序调节LED灯的颜色。电位器的作用是调节屏幕显示的灰度,如果觉得显示的字体太淡或者是太浓,都可以通过这个电位器调节。
    DSC_1018.jpg


    屏幕左下方是一块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
    复制代码
    如果安装成功,会显示如下信息:
    鎹曡幏2.PNG

    安装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
    复制代码
    如图:
    捕获.PNG
    可以看到树莓派已经正确识别我们的模块了,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被点亮并开始显示东西了,实际效果如图:

    DSC_1047.jpg
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-4-17 13:37:04 | 显示全部楼层
    我来补充个原理图吧

    BPI_1602原理图.png



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-9-11 12:54
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-5-7 15:02:56 | 显示全部楼层
    能给说明一下,引出来的每个接口都是什么含义吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 11:45 , Processed in 0.135060 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.