当前位置: 首页 > news >正文

MicroPython控制8*8LED点阵显示温度

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    MicroPython顾名思义就是可以在单片机上跑的Python,借助Micro Python,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。目前支持MicroPython的开发板有好几种,下面就以TPYBoard为例,简单介绍一下简易温度传感器的制作方法。

                    

    1、实验目的


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


    2、所需元器件


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


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

                  

    先看一下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源代码:

#main.py
import pyb
from pyb import Pin
from ds18x20 import DS18X20
Pin("Y11",Pin.OUT_PP).low()#GND
Pin("Y9",Pin.OUT_PP).high()#VCC
pyb.delay(100)
DQ=DS18X20(Pin('Y10'))#DQ
while True:
       tem = DQ.read_temp()
       print(tem)
       pyb.delay(1000)

    4、点亮8*8LED点阵

    点阵后面有两排针脚,一排以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点阵上


    接线成功以后,我们将测试出温度通过分割函数将十位,个位,小数点,以及后面的数字显示出来,代码如下:

import pyb
from pyb import Pin
from ds18x20 import DS18X20
x_PIN = [Pin(i, Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7','X8']]
y_PIN = [Pin(i, Pin.OUT_PP) for i in ['Y1','Y2','Y3','Y4','Y5','Y6','Y7','Y8']]
temp=['0000,0110,0110,0110,0110,0110,0110,0000','1101,1101,1101,1101,1101,1101,1101,1101,
'0000,1110,1110,0000,0111,0111,0111,0000','0000,1110,1110,0000,1110,1110,1110,0000',
'0101,0101,0101,0000,1101,1101,1101,1101','0000,0111,0111,0000,1110,1110,1110,0000',
'0000,0111,0111,0000,0110,0110,0110,0000','0000,1110,1110,1110,1110,1110,1110,1110',
'0000,0110,0110,0000,0110,0110,0110,0000','0000,0110,0110,0000,1110,1110,1110,0000']
tempValue=0
def show(l_num,r_num):
    flag=0
    for x_ in range(0,8):
        for x_ in range(0,8):
            if x_!=flag:
                x_PIN[x_].value(0)
        left_ = temp[l_num]
        left_item=left_.split(',')
        right_ = temp[r_num]
        right_item=right_.split(',')
        li_l=left_item[flag]
        li_r=right_item[flag]
        y_PIN[0].value(int(li_l[:1]))
        y_PIN[1].value(int(li_l[1:2]))
        y_PIN[2].value(int(li_l[2:3]))
        y_PIN[3].value(int(li_l[3:4]))
        y_PIN[4].value(int(li_r[:1]))
        y_PIN[5].value(int(li_r[1:2]))
        y_PIN[6].value(int(li_r[2:3]))
        y_PIN[7].value(int(li_r[3:4]))
        x_PIN[flag].value(1)
        flag=flag+1
        pyb.delay(2)
def display(time_,l_num,r_num):
    for x in range(0,time_):
        for y in range(0,110):
            show(l_num,r_num)
if __name__=='__main__':
    #time_t=Timer(4,freq=5,callback=randSensor)
    DQ=DS18X20(Pin('Y10'))#DQ
    while 1:
        tempValue =int(DQ.read_temp())
        print(tempValue)
        l_n=tempValue//10
        r_n=tempValue%10
        print(l_n)
        print(r_n)
        display(60,l_n,r_n)
        for i in x_PIN:
            i.value(0)

 

转载于:https://my.oschina.net/micropython/blog/751145

相关文章:

  • 2006年四月五日
  • C语言项目参考解答:全正整数后再计算
  • 基于.Net Framework的N层分布式应用开发
  • Spring-mvc 静态资源不拦截
  • 一次CA证书服务器+IIS SSL的实验心得
  • 上传一下logo
  • java入门第一季5、6
  • Microsoft SQL Server 2005 提供了专用管理员连接 (DAC)
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • 第一次到这里来
  • RabbitMQ
  • 每天早晚二十分钟,让你人生从此不同
  • Json map
  • CSDN Blog更换服务器维护通知(今日21:00-22:00)
  • 初试牛刀的收获-实现Web文件的上传
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Create React App 使用
  • ECS应用管理最佳实践
  • ES6 学习笔记(一)let,const和解构赋值
  • FastReport在线报表设计器工作原理
  • JAVA 学习IO流
  • Java知识点总结(JavaIO-打印流)
  • Laravel5.4 Queues队列学习
  • Linux gpio口使用方法
  • Lucene解析 - 基本概念
  • MaxCompute访问TableStore(OTS) 数据
  • Mysql数据库的条件查询语句
  • Node 版本管理
  • overflow: hidden IE7无效
  • Promise面试题2实现异步串行执行
  • Redis的resp协议
  • Service Worker
  • 排序(1):冒泡排序
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 译有关态射的一切
  • MyCAT水平分库
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • postgresql行列转换函数
  • scrapy中间件源码分析及常用中间件大全
  • ​flutter 代码混淆
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (八)c52学习之旅-中断实验
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (九)One-Wire总线-DS18B20
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十八)用JAVA编写MP3解码器——迷你播放器