当前位置:技术支持>典型实例
核心板v10x 网络通信v20x F407系列 通信定位v70x 底层类库 最小系统板

【micropython】TPYBoardV10X 模拟红绿灯教程

原创版权归山东萝卜科技有限公司所有,转载必须以链接形式注明作者和原始出处。


1.实验目的


    1. 学习在PC机系统中扩展简单I/O 接口的方法。

    2. 进一步学习编制数据输出程序的设计方法。  

    3. 学习模拟交通灯控制的方法。


2.所需元器件


    220欧电阻一个

    红色LED数码管一个

    面包板一块

    TPYBoard板子一块

    数据线一条

    红、绿、黄三个led灯

    杜邦线若干


3.点亮led灯  

                                                     

    将三个led灯插在面包板上,led负极插入面包板的负极(横向插孔),正极插入面包板的纵向插,将222欧电阻插入面包板的负极上(横向插孔)和纵向插孔中,将led灯的正极分别与TPYBoard的引脚连接起来,因为要做红绿灯,只需三个引脚即可,本人用的为Y1、Y2、Y3三个引脚,将三个led灯的正极通过杜邦线连接到TPYboard的Y1,、Y2、Y3的引脚上,然后将电阻纵向插孔用杜邦线接到TPYboard的GND引脚,在main.py文件中将Y1、Y2、Y3引脚的电平拉高,即可看到三个灯同时亮起来。

    代码为:

# main.py -- put your code here!
import pyb
from pyb import Pin

r_LED=Pin('Y1',Pin.OUT_PP)#red
y_LED=Pin('Y2',Pin.OUT_PP)#yellow
g_LED=Pin('Y3',Pin.OUT_PP)#green
while True:
     r_LED.value(1)
     y_LED.value(1)
     g_LED.value(1)


   如下图:


11.png


4.点亮数码管


数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段比七段多一个发光二极管单元,也就是多一个小数点(DP);按能显示可分为1位、2位、3位、4位、5位、6位、7位等数码管。 按使用类型可分为共阴数码管和共阳数码管。

   数码管针脚图如下:

image.png



共阴数码管

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,在使用时公共端应接到地线GND上;若想点亮a段发光二极管,那么就把对应的a针脚设置为高电平,反之设置为低电平。

 

共阳数码管

  共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,在使用时公共端应接到+5V上,若想点亮a段发光二极管,那么就把对应的a针脚设置为低电平,反之设置为高电平。

具体接线方式如下表: 

TPYBoard v10x

数码管

X1

a

X2

b

X3

c

X4

d

X5

e

X6

f

X7

g

VIN

COM(公共端)

注意:因为我们用的是共阳数码管,所以公共端(COM)应接开发板的VIN+5V),点亮需置低电平。本次实验没有用到小数点,故dp针脚悬空无需接线。

定义7个引脚用于控制数码管中a~g段的发光二极管。

#数码管a~g对应的开发板引脚X1~X7
d_Pins=[Pin(i,Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7']]

列举一下数码管要显示0~9之间的数,对应的每个针脚的高低电平的状态,便于程序的编写,如下图。    image.pngimage.png

根据上面的对应关系表,我们新建一个列表number,用来存放显示每个数字时,7个引脚应设置的电平值。

number=[
[0,0,0,0,0,0,1],#0
[1,1,1,1,0,0,1],#1
[0,0,1,0,0,1,0],#2
[0,0,0,0,1,1,0],#3
[1,0,0,1,1,0,0],#4
[0,1,0,0,1,0,0],#5
[0,1,0,0,0,0,0],#6
[0,0,0,1,1,1,1],#7
[0,0,0,0,0,0,0],#8
[0,0,0,0,1,0,0],#9
]

添加一个函数display用于控制数码管显示数字,参数是要显示的数字。

def display(num):
    global number
    count=0
    for pin in d_Pins:#X1~X7分别设置电平值 动态显示num的值
        pin.value(number[num][count])
        count+=1


5.模拟红绿灯

 将上面的代码结合起来,模拟红绿灯相互变化的过程。设置红灯亮10秒,黄灯亮3秒,绿灯亮10秒。具体代码如下:

# main.py -- put your code here!
import pyb
from pyb import Pin
 
r_LED=Pin('Y1',Pin.OUT_PP)#red
y_LED=Pin('Y2',Pin.OUT_PP)#yellow
g_LED=Pin('Y3',Pin.OUT_PP)#green
 
#数码管a~g对应的开发板引脚X1~X7
d_Pins=[Pin(i,Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7']]
 
number=[
[0,0,0,0,0,0,1],#0
[1,1,1,1,0,0,1],#1
[0,0,1,0,0,1,0],#2
[0,0,0,0,1,1,0],#3
[1,0,0,1,1,0,0],#4
[0,1,0,0,1,0,0],#5
[0,1,0,0,0,0,0],#6
[0,0,0,1,1,1,1],#7
[0,0,0,0,0,0,0],#8
[0,0,0,0,1,0,0],#9
]
 
def display(num):
    global number
    count=0
    for pin in d_Pins:#X1~X7分别设置电平值 动态显示num的值
        pin.value(number[num][count])
        count+=1
 
if __name__=='__main__':
    while True:
        #红灯亮10秒
        r_LED.value(1)
        for i in range(0,10):
            display(9-i)
            pyb.delay(1000)#1s
        r_LED.value(0)
        #黄灯亮3秒
        y_LED.value(1)
        for i in range(0,3):
            display(2-i)
            pyb.delay(1000)#1s
        y_LED.value(0)
        #绿灯亮10秒
        g_LED.value(1)
        for i in range(0,10):
            display(9-i)
            pyb.delay(1000)#1s
        g_LED.value(0)