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实现数码管动态显示相关推荐

  1. 学习笔记二.矩阵按键

    #学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...

  2. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  3. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  4. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  5. MATLAB学习笔记——二维和三维绘图

    MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...

  6. ROS学习笔记二:探索ROS文件系统

    ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...

  7. pythonsze_python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...

  8. 二维码学习笔记(二) | 数据分析与数据编码

    唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...

  9. Mongodb使用学习笔记(二)

    文章目录 Mongodb使用学习笔记(二)之查询篇 1. MongoDB命令学习 (1) MongoDB 查询文档 1.1 全部查询 1.2 单条件查询 1.3 多条件查询 1.3.1 AND拼接多条 ...

  10. 华清远见fs4412开发板学习笔记(二)

    fs4412开发板学习笔记(二) Linux 1.终端操作 1)打开终端 ctrl + alt + t 2)放大 ctrl + shift + "+" 3)缩小 ctrl + &q ...

最新文章

  1. dbeaver数据库工具
  2. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
  3. 各种浏览器的userAgent
  4. android os一直唤醒,Android保持屏幕常亮唤醒状态
  5. dataframe保存为txt_竟然可以用 Python 抓取公号文章保存成 PDF
  6. jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器
  7. 字符串经典题之参数解析
  8. mysql ip v4 v6_mysql IPv4 IPv6
  9. .NET框架怎样解决DLL Hell问题?
  10. MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式
  11. centos服务器 常用命令
  12. mysql upsert语法_mysql – SQL标准UPSERT调用
  13. loaded question解释
  14. 通过pxe远程安装linux,通过PXE远程安装Linux系统
  15. redis搭建集群时报错CLUSTERDOWN Hash slot not served
  16. C#中.snk文件的作用【转】
  17. [gdc13]dx11效率优化
  18. 小布语音下载安装_小布语音助手
  19. HTTP Host Header Attack:Basic password reset poisoning
  20. 用Cat.1+GPS+蓝牙+RFID实现工卡式室内室外定位器

热门文章

  1. 《Android框架揭秘》——2.3节搭建Android SDK开发环境
  2. 小试牛刀——搭建一个周报管理系统
  3. php电竞酒店系统,电竞酒店系统管理@电竞酒店云管家@电竞酒店解决方案
  4. 西贝柳斯好用吗?Mac打谱软件Sibelius 8
  5. 【网络安全】XCodeGhost事件刨根问底
  6. 8000份课程课后习题答案与大家分享~~
  7. vue 官方推荐的好用的三方库
  8. 【zookeeper 获取节点数据getData源码解析】
  9. visual studio 2015 Enterprise key vs2015密钥
  10. samkoon触摸屏用什么软件编程_samdraw3.3软件下载