查看: 203|回复: 1

[原创] TPYBoard开发板控制8*8LED点阵显示温度

[复制链接]

3

主题

0

好友

37

积分

白丁

Rank: 1

  • TA的每日心情
    开心
    2016-10-9 16:56
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-9-24 15:55:34 |显示全部楼层
        TPYBoard开发板搭载STM32F405芯片,支持python语言,是一款功能强大的MIcroPython开发板,内置分析器、解析器、编译器、虚拟机和运行时。下面就给大家演示一个TPYBoard开发板的例子,来一起做一个温度传感器。QQ交流群:157816561

    开发板展示1 (4).jpg



        1、实验目的

        1. 学习在PC机系统中扩展简单I/O 接口的方法。
        2. 进一步学习编制数据输出程序的设计方法。
        3. 学习DS18B20的接线方法,并利用DS18B20检测当前温度
        3. 学习8*8LED点阵接线方法,并将当前温度显示

        2、所需元器件

        TPYBoard板子一块
        数据线一条
        杜邦线若干
        8*8LED点阵一个
        DS18B20温度传感器一个

        3、学习DS18B20的接线方法,检测当前温度

    温度传感器1.png



        先看一下DS18B20针脚含义,如上图:

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

        TPYBoard       DS18B20
        ----------------
        # 3V3   or any Pin  => VDD
        # any   Pin        =>   DO
        #   GND           => GND

        还是看不明白的话,直接上针脚编号

        TPYBoard       LCD5110
        ----------------------------
        3.3v        =>   VDD
        GND        =>   GND
        Y10         =>   DO

        接线ok后,在MicroPython的源码目录中,进入drivers\onewire\目录,然后将目录下的文件ds18x20.py和onewire.py复制到PYBFLASH磁盘的根目录。复制文件后要安全退出磁盘,然后重新接入,不然找不到文件,即可运行main.py文件了,打印温度,即可用Putty看到当前的温度。

        main.py源代码:
    1. #main.py
    2. import pyb
    3. from pyb import Pin
    4. from ds18x20 import DS18X20
    5. Pin("Y11",Pin.OUT_PP).low()#GND
    6. Pin("Y9",Pin.OUT_PP).high()#VCC
    7. pyb.delay(100)
    8. DQ=DS18X20(Pin('Y10'))#DQ
    9. while True:
    10.        tem = DQ.read_temp()
    11.        print(tem)
    12.        pyb.delay(1000)
    复制代码
        4、点亮8*8LED点阵

    温度传感器2.png


        点阵后面有两排针脚,一排以1开头,即1-8针脚,一排以9开头,即9-16针脚,上图中〇中的数字对应的即为针脚的对应的数字,当ROW 的PIN NO.高电平,COL PIN NO.低电平时候,我们的LED即全部点亮了,为了方便操作行和列,我们可以将ROW的8个引脚接到我们TPYBoard的X1-X8,COL的8个引脚接到我们TPYBoard的Y1-Y8,这样我们控制X引脚Y引脚就可以控制哪个点亮跟灭了,想显示任何字都没问题,快来试试吧。

        5、点将温度显示在8*8LED点阵上

        接线成功以后,我们将测试出温度通过分割函数将十位,个位,小数点,以及后面的数字显示出来,代码如下:
    1. import pyb
    2. from pyb import Pin
    3. from ds18x20 import DS18X20
    4. x_PIN = [Pin(i, Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7','X8']]
    5. y_PIN = [Pin(i, Pin.OUT_PP) for i in ['Y1','Y2','Y3','Y4','Y5','Y6','Y7','Y8']]
    6. temp=['0000,0110,0110,0110,0110,0110,0110,0000','1101,1101,1101,1101,1101,1101,1101,1101,
    7. '0000,1110,1110,0000,0111,0111,0111,0000','0000,1110,1110,0000,1110,1110,1110,0000',
    8. '0101,0101,0101,0000,1101,1101,1101,1101','0000,0111,0111,0000,1110,1110,1110,0000',
    9. '0000,0111,0111,0000,0110,0110,0110,0000','0000,1110,1110,1110,1110,1110,1110,1110',
    10. '0000,0110,0110,0000,0110,0110,0110,0000','0000,0110,0110,0000,1110,1110,1110,0000']
    11. tempValue=0
    12. def show(l_num,r_num):
    13.     flag=0
    14.     for x_ in range(0,8):
    15.         for x_ in range(0,8):
    16.             if x_!=flag:
    17.                 x_PIN[x_].value(0)
    18.         left_ = temp[l_num]
    19.         left_item=left_.split(',')
    20.         right_ = temp[r_num]
    21.         right_item=right_.split(',')
    22.         li_l=left_item[flag]
    23.         li_r=right_item[flag]
    24.         y_PIN[0].value(int(li_l[:1]))
    25.         y_PIN[1].value(int(li_l[1:2]))
    26.         y_PIN[2].value(int(li_l[2:3]))
    27.         y_PIN[3].value(int(li_l[3:4]))
    28.         y_PIN[4].value(int(li_r[:1]))
    29.         y_PIN[5].value(int(li_r[1:2]))
    30.         y_PIN[6].value(int(li_r[2:3]))
    31.         y_PIN[7].value(int(li_r[3:4]))
    32.         x_PIN[flag].value(1)
    33.         flag=flag+1
    34.         pyb.delay(2)
    35. def display(time_,l_num,r_num):
    36.     for x in range(0,time_):
    37.         for y in range(0,110):
    38.             show(l_num,r_num)
    39. if __name__=='__main__':
    40.     #time_t=Timer(4,freq=5,callback=randSensor)
    41.     DQ=DS18X20(Pin('Y10'))#DQ
    42.     while 1:
    43.         tempValue =int(DQ.read_temp())
    44.         print(tempValue)
    45.         l_n=tempValue//10
    46.         r_n=tempValue%10
    47.         print(l_n)
    48.         print(r_n)
    49.         display(60,l_n,r_n)
    50.         for i in x_PIN:
    51.             i.value(0)
    复制代码
    回复

    使用道具 举报

    1

    主题

    1

    好友

    2689

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    昨天 23:23
  • 签到天数: 646 天

    [LV.9]以坛为家II

    发表于 2016-9-24 23:03:05 |显示全部楼层
    参考和学习
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-10 09:09 , Processed in 0.070862 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部