查看: 5021|回复: 2

[原创] 树莓派3B使用LCD1602打造数字日历

[复制链接]
  • TA的每日心情
    奋斗
    2019-10-1 12:54
  • 签到天数: 313 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2017-12-16 20:54:35 | 显示全部楼层 |阅读模式
    分享到:
    下面介绍在树莓派3B上使用LCD1602液晶屏打造数字日历的方法
    树莓派3B的GPIO排针定义如下

    LCD1602使用I2C连接方式连接到树莓派3B,SDA SCL VCC GND分布连接到树莓派3B的Pin3 Pin5 Pin3 Pin6
    然后给树莓派3B上电,输入下面命令安装所需组件
    1. sudo apt-get install i2c-tools python-smbus
    复制代码
    2017-12-16_123142.png
    然后使用查看I2C设备是否显示
    1. ls /dev
    复制代码
    2017-12-16_123250.png
    可知没有发现I2C设备,但是硬件连接又正确,原因是Raspbian固件默认关闭了I2C接口,输入下面命令
    1. sudo raspi-config
    复制代码
    按下面选择打开I2C接口
    2017-12-16_123313.png
    2017-12-16_123321.png
    2017-12-16_123329.png
    再次查看i2c设备
    1. ls /dev
    复制代码
    可以看到i2c-1设备了
    2017-12-16_123340.png
    查看地址码
    1. i2cdetect -y 1
    复制代码
    可知为3f
    2017-12-16_123406.png
    创建一个python脚本lcd-clock.py
    1. vi lcd-clock.py
    复制代码
    加入下面代码
    1. import smbus
    2. import time
    3. import os
    4. from time import gmtime, strftime, localtime

    5. os.environ['TZ'] = 'Asia/Shanghai'
    6. time.tzset()

    7. bus = smbus.SMBus(1)
    8. addr = 0x3f

    9. def writeCommand(command):
    10.    bus.write_byte(addr, 0b1100 | command << 4)
    11.    time.sleep(0.005)
    12.    bus.write_byte(addr, 0b1000 | command << 4)
    13.    time.sleep(0.005)

    14. def writeWord(word):
    15.    for i in range(0,len(word)):
    16.       asciiCode =  ord(word[i])
    17.       bus.write_byte(addr, 0b1101 |(asciiCode >> 4 & 0x0F) << 4)
    18.       time.sleep(0.0005)
    19.       bus.write_byte(addr, 0b1001 |(asciiCode >> 4 & 0x0F) << 4)
    20.       time.sleep(0.0005)
    21.       bus.write_byte(addr, 0b1101 |(asciiCode & 0x0F) << 4)
    22.       time.sleep(0.0005)
    23.       bus.write_byte(addr, 0b1001 | (asciiCode & 0x0F) << 4)
    24.       time.sleep(0.0005)

    25. # init
    26. writeCommand(0b0010)

    27. # 4-byte mode, 2 line code
    28. writeCommand(0b0010)
    29. writeCommand(0b1111)

    30. # set cursor mode
    31. writeCommand(0b0000)
    32. writeCommand(0b1100)

    33. # cursor shift mode
    34. writeCommand(0b0000)
    35. writeCommand(0b0110)

    36. writeWord("Welcome")
    37. clear = True
    38. time.sleep(1)

    39. while(1):
    40.    # first line first column
    41.    writeCommand(0b1000)
    42.    writeCommand(0b0000)
    43.    writeWord(strftime("%Y-%m-%d, %a ", localtime()))

    44.    # second line first column
    45.    writeCommand(0b1100)
    46.    writeCommand(0b0000)
    47.    writeWord(strftime("%H:%M:%S", localtime()))
    48.    time.sleep(0.2)
    复制代码
    2017-12-16_123538.png
    保存后运行
    1. sudo python lcd-clock.py
    复制代码
    2017-12-16_123816.png
    数字日历效果如下
    20171216_123547.jpg


    回复

    使用道具 举报

    该用户从未签到

    发表于 2017-12-20 09:49:07 | 显示全部楼层
    可乐早上好,顶!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-10-1 12:54
  • 签到天数: 313 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 2017-12-20 09:52:28 | 显示全部楼层
    噗噗熊 发表于 2017-12-20 09:49
    可乐早上好,顶!

    早上好 噗噗熊
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-6-12 23:03 , Processed in 0.129903 second(s), 20 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.