23. [Micropython]TPYBoard v10x 控制LCD5110显示温度时间(中文版)

版权声明:翻译整理属于TPYBoard,转载时请以超链接形式标明文章原始出处和作者信息及本声明

23.1. 实验目的

  • 学习在PC机系统中扩展简单I/O 接口的方法
  • 什么是SPI接口
  • 学习TPYBoard I2C接口的用法
  • 学习LCD5110接线方
  • DS3231的接线方法
  • 16*16汉字显示温度与当前时间

23.2. 所需元器件

  • DS3231模块 1个
  • TPYBoard v102板子 1块
  • LCD5110显示屏 1个
  • micro USB数据线 1条
  • 杜邦线 若干

23.3. TPYBoard v102的SPI接口

LCD5110需要SPI接口与TPYBoard v102进行连接传输数据,SPI接口是在CPU和外围低速器件之间进行同步串行数据传输。TPYBoard v102有两个SPI接口,本次使用SPI1接口。

http://www.micropython.net.cn/ueditor/php/upload/image/20161229/1482973399550325.png

23.4. TPYBoard v102的I2C接口

DS3231是I2C接口通信的,它通过I2C接口与TPYBoard v102进行数据通讯,DS3231通过这个接口与TPYBoard v102进行双向通讯,进行数据传输。TPYBoard有两个I2C接口,本次使用I2C1接口。

http://www.micropython.net.cn/ueditor/php/upload/image/20161229/1482973431559379.png

23.5. DS3231的使用方法

http://tpyboard.com/ueditor/php/upload/image/20161229/1482973477928543.png

本次教程使用DS3231的SCL,SDA,VCC,GND四个针脚进行时间的读取和设定,接线方式如下:

TPYBoard DS3231
X9 SCL
X10 SDA
3.3V VCC
GND GND

23.6. LCD5110显示屏的使用方法

TPYBoard v102的针脚与LCD5110的针脚对应关系如下:

TPYBoard LCD5110 memo
X1 RST Reset pin (0=reset, 1=normal)
X2 CE Chip Enable (0=listen for input, 1=ignore input)
X3 DC Data/Command (0=commands, 1=data)
X8 DIN data flow (Master out, Slave in)
X6 CLK SPI clock
3.3V Vcc Vcc
X4 LIGHT Light (0=on, 1=off)
GND GND GND

接线OK后,将font.py、upcd8544.py、chinsese.py和DS3231.py复制到TPYBoard v102加载的可移动磁盘中,然后编写main.py并保存。 等待保存完毕后,重启TPYBoard v102后(等待红灯(LED1)熄灭后,再进行重启操作),当前温度与时间会显示在LCD5110显示屏上,见下图:

http://www.micropython.net.cn/ueditor/php/upload/image/20161229/1482973647210289.png

23.7. main.py源代码

# main.py -- put your code here!
import pyb
import upcd8544
from machine import SPI,Pin
from DS3231 import DS3231

ds=DS3231(1) #定义DS3231

# 用于设定时间和日期
def setDateTime(year,month,day,time,minutes,seconds):
    ds.DATE([year,month,day])
    ds.TIME([time,minutes,seconds])

# 在LCD5110 显示时间或日期,separator 中间的分割符
# x,y 在LCD5110 显示的位置
def showTimeOrDate(why,x,y,separator=':'):
    # [HH,MM,SS] >> HH:MM:SS
    why = why.replace('[','')
    why = why.replace(']','')
    why = why.replace(',',separator)
    print(why)
    lcd_5110.lcd_write_string(why,x,y)


def main():
    lcd_5110.lcd_write_chinese('萝',14,0)
    lcd_5110.lcd_write_chinese('卜',30,0)
    lcd_5110.lcd_write_chinese('智',46,0)
    lcd_5110.lcd_write_chinese('能',62,0)
    lcd_5110.lcd_write_string('TEM:',14,2)
    lcd_5110.lcd_write_string(str(ds.TEMP()),44,2)
    lcd_5110.lcd_write_chinese("当",14,3)
    lcd_5110.lcd_write_chinese("前",30,3)
    lcd_5110.lcd_write_chinese("时",46,3)
    lcd_5110.lcd_write_chinese("间",62,3)
    showTimeOrDate(str(ds.TIME()),14,5)
    print(str(ds.TIME()))
    pyb.delay(1000)

if __name__ == '__main__':
    #setDateTime(2016,12,27,13,17,00)#设置时间
    ds.DATE()
    SPI = pyb.SPI(1) #DIN=>X8-MOSI/CLK=>X6-SCK
    #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in)
    #CLK =>SPI(1).SCK  'X6' SPI clock
    RST    = pyb.Pin('X1')
    CE     = pyb.Pin('X2')
    DC     = pyb.Pin('X3')
    LIGHT  = pyb.Pin('X4')
    lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT)
    while(1):
        main()