MicroPython学习笔记(二)操作GPIO和TIMER实现数码管动态显示
1.实验平台
开发板:移远EC600X_QuecPython_EVB_V2.0
开发工具:QPYcom
实验目标:使用GPIO和Timer实现数码管的动态显示
2.GPIO和Timer的使用
俗话说的好,工欲善其事,必先利其器。要实现数码管的动态显示一定需要对GPIO有一定的了解,GPIO又称通用型输入输出口,通过GPIO可以实现与外部的通讯、控制和数据的采集。
(1)GPIO特性
移远EC6000x开发板一共支持几十个GPIO,既可以输出也可以输入,并且支持上拉、下拉和浮空三种模式。
通过图片我们可知,GPIO最大输出电压1.35V,最低输出电压0.45V。输入电压范围为-0.3V到2.0V,由此看见GPIO低电平驱动能力大于高电平驱动能力。
(2)电平转换
从上图可知,GPIO标准输出为1.8v左右。在实际使用中常常要解决电平转换问题,实质上是要解决IO电平兼容问题,即VOL< VIL VOH >VIH。查看移远的硬件设计手册得知EC600X开发板采用Texas Instruments 公司(TI)的TXS0108EPWR双向电平转换IC。下面是原理图:
需要注意的是:采用TXS0108EPWR最大数据速率
– 110Mbps(推挽)
– 1.2Mbps(开漏)
• A 端口 1.2V 至 3.6V;B 端口 1.65V 至 5.5V (VCCA≤ VCCB)
详见TXS0108EPWR中文数据手册
(3)GPIO操作函数
在使用GPIO之前需要从machine硬件包中导入Pin,然后创建GPIO对象并设置输入输出模式和驱动模式。
from machine import Pingpio1 = Pin(Pin.GPIO8,Pin.OUT,Pin.PULL_PU,0) #创建gpio对象 设置gpio8为上拉输出模式,初始为低电平#Pin.OUT 设置输出模式 Pin.IN设置输入模式
#Pin.PULL_PU 设置上拉 Pin.PULL_PD 设置下拉 Pin.PULL_DISABLE 设置浮空gpio1.write(0) #设置PIN脚电平,设置高低电平前需要保证引脚为输出模式。0 - 低电平 1 - 高电平value = gpio1.read() #获取PIN脚电平,0-低电平,1-高电平。gpio1.set_dir(Pin.OUT) #gpio设置输出方向 Pin.OUT 设置输出模式 Pin.IN设置输入模式value = gpio1.get_dir() #获取输出方向 PIN模式,0-输入模式,1-输出模式。
(4) 定时器
移远定时器的使用更为简单。如操作GPIO一样,先导入Timer然后创建一个Timer对象,并设置使用的定时器号。
form machine import Timerdef func() : #定时器回调函数print('hello world')returnmytimer = Timer(Timer.Timer1) #创建一个定时器对象并使用Timer1
mytimer.start(period=1000, mode=timer1.PERIODIC, callback=func)
#启动定时器 设置定时周期 period = 1000ms 定时模式 mode = timer1.PERIODIC 自动重载 mode = Timer.ONE_SHOT 单次模式 callback = func 注册回调函数mytimer.stop() #暂停定时器
需要注意的是 period 最小值不能超过 5 ms,一旦小于5ms 定时器将不工作。
动态数码管实验
上面我们已经学习了GPIO和定时器的使用,现在来做一个简单的实验,驱动数码管显示字符即0-9包含空格和小数点。实验采用2位共阳极数码管,使用8个GPIO控制段选和2个GPIO控制片选加三极管放大见下图。
==上图没有添加限流电阻,有可能会烧坏数码管,请读者自行根据实际计算。==废话不多说直接贴代码。
from machine import Timer
from machine import Pin
import utimedef timerfunc(arg): #定时器回调函数rst.handler() #数码管处理函数#rst.stop()
#byte 转换 bit
def byte2bit(Bytes):tmp = []for x in range(0,8):tmp.append((~Bytes>>(7-x))&0x01) #取反是因为numtable中是共阴极段码表return tmpnumtable ={'0': byte2bit(0x3f),'1': byte2bit(0x06),'2': byte2bit(0x5b),'3': byte2bit(0x4f),'4': byte2bit(0x66),'5': byte2bit(0x6d),'6': byte2bit(0x7d),'7': byte2bit(0x07),'8': byte2bit(0x7f),'9': byte2bit(0x6f),'A': byte2bit(0x77),'B': byte2bit(0x7c),'C': byte2bit(0x39),'D': byte2bit(0x5e),'E': byte2bit(0x79),'F': byte2bit(0x71),' ': byte2bit(0x00),'.': byte2bit(0x80),'0.': byte2bit(0x3f+0x80),'1.': byte2bit(0x06+0x80),'2.': byte2bit(0x5b+0x80),'3.': byte2bit(0x4f+0x80),'4.': byte2bit(0x66+0x80),'5.': byte2bit(0x6d+0x80),'6.': byte2bit(0x7d+0x80),'7.': byte2bit(0x07+0x80),'8.': byte2bit(0x7f+0x80),'9.': byte2bit(0x6f+0x80)}
# 断码表 0-9 0.-9. A-F
def mystr2list(tmp):tmp1 = list(tmp)conut = len(tmp1)i = 0result = []while i < conut:if i == 0 and tmp1[i] == '.': #首小数点不结合result.append('.')i = i+1elif i < conut-1 and tmp[i+1] == '.':#小数点与前面的数字结合result.append(tmp[i] + tmp[i+1])i = i+2else:result.append(tmp[i])i=i+1return result
#字符串处理函数
#小数点自动与数字结合class Display_led(object):def __init__ (self,gap_time=1000,data_pin=[Pin.GPIO8,Pin.GPIO13,Pin.GPIO11,Pin.GPIO14,Pin.GPIO10,Pin.GPIO9,Pin.GPIO28,Pin.GPIO12],duan_pin=[Pin.GPIO19,Pin.GPIO29]):self.gap_time = gap_time self.data_pin = [Pin(x,Pin.OUT,Pin.PULL_PU,0) for x in data_pin] #段选self.duan_pin = [Pin(x,Pin.OUT,Pin.PULL_PU,0) for x in duan_pin] #片选self.duan_max = len(duan_pin) #获取片选位数self.timer = Timer(Timer.Timer1) #实例化定时器self.conut = 0returndef stop(self):self.timer.stop()returndef start(self):self.timer.start(period=self.gap_time, mode=Timer.PERIODIC, callback=timerfunc) #周期运行 定时一秒return
#初始化定时器def show(self,str):self.showarry = mystr2list(str)return def __write_byte(self,bytes):l = numtable[bytes]duan_count = 0for i in self.data_pin :i.write(l[duan_count])duan_coun += 1return
#显示一个字符def handler(self):self.__write_byte(' ') #消隐i = 0for value in self.duan_pin :if i == self.conut :value.write(1)else :value.write(0)i = i+1self.__write_byte(self.showarry[self.conut])self.conut = self.conut + 1if self.conut >= self.duan_max :self.conut = 0return rst = Display_led(gap_time = 5)
rst.start()
done = 0.0
while True:done += 0.1if done >= 9.9:done = 0.0print(done)rst.show("%3.1f"%(done))utime.sleep(1)
#测试code
ps:由于数码管模块没有在身边,不能上传测试图片。如果遇到不能正常显示,请查看数码管极性和查看移远GPIO引脚号是否对应。移远PIn手册如下:Pin
MicroPython学习笔记(二)操作GPIO和TIMER实现数码管动态显示相关推荐
- 学习笔记二.矩阵按键
#学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...
- Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用
Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...
- [转载]dorado学习笔记(二)
原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...
- Java学习笔记二:数据类型
Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...
- MATLAB学习笔记——二维和三维绘图
MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...
- ROS学习笔记二:探索ROS文件系统
ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...
- pythonsze_python学习笔记二 数据类型(基础篇)
Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
- Mongodb使用学习笔记(二)
文章目录 Mongodb使用学习笔记(二)之查询篇 1. MongoDB命令学习 (1) MongoDB 查询文档 1.1 全部查询 1.2 单条件查询 1.3 多条件查询 1.3.1 AND拼接多条 ...
- 华清远见fs4412开发板学习笔记(二)
fs4412开发板学习笔记(二) Linux 1.终端操作 1)打开终端 ctrl + alt + t 2)放大 ctrl + shift + "+" 3)缩小 ctrl + &q ...
最新文章
- dbeaver数据库工具
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
- 各种浏览器的userAgent
- android os一直唤醒,Android保持屏幕常亮唤醒状态
- dataframe保存为txt_竟然可以用 Python 抓取公号文章保存成 PDF
- jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器
- 字符串经典题之参数解析
- mysql ip v4 v6_mysql IPv4 IPv6
- .NET框架怎样解决DLL Hell问题?
- MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式
- centos服务器 常用命令
- mysql upsert语法_mysql – SQL标准UPSERT调用
- loaded question解释
- 通过pxe远程安装linux,通过PXE远程安装Linux系统
- redis搭建集群时报错CLUSTERDOWN Hash slot not served
- C#中.snk文件的作用【转】
- [gdc13]dx11效率优化
- 小布语音下载安装_小布语音助手
- HTTP Host Header Attack:Basic password reset poisoning
- 用Cat.1+GPS+蓝牙+RFID实现工卡式室内室外定位器
热门文章
- 《Android框架揭秘》——2.3节搭建Android SDK开发环境
- 小试牛刀——搭建一个周报管理系统
- php电竞酒店系统,电竞酒店系统管理@电竞酒店云管家@电竞酒店解决方案
- 西贝柳斯好用吗?Mac打谱软件Sibelius 8
- 【网络安全】XCodeGhost事件刨根问底
- 8000份课程课后习题答案与大家分享~~
- vue 官方推荐的好用的三方库
- 【zookeeper 获取节点数据getData源码解析】
- visual studio 2015 Enterprise key vs2015密钥
- samkoon触摸屏用什么软件编程_samdraw3.3软件下载