查看: 2832|回复: 0

新手必看 Micropython之四位数码管显示实验

[复制链接]
  • TA的每日心情
    慵懒
    2018-1-6 09:01
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-1-20 10:12:01 | 显示全部楼层 |阅读模式
    分享到:
           原理非常简单,控制各个针脚的高低电平来显示数字,这里我用的是共阳的数码管。不过有一个问题,我第一次显示的时候代码输入数字是9.876不过数码管显示9.875,刚开始我以为代码错了,仔细检查了几遍没有问题。然后用putty跑了一下,打印出来的是9875999  。后来又试了几组数字有的正常显示有的最末尾会减一。求助各位大佬到底为什么?
    所需原器件
    1   TPYBoard v102 一块
    2   四位数码管一个
    3   杜邦线若干
    4   面包板一块(为了接线方便,可不用)
    接线图
    四位数码管引脚图




    开发板与四位数码管针脚对应:
      
    数码管引脚
      
    a
    b
    c
    d
    e
    f
    g
    dp
    1
    2
    3
    4
    TPYBoard开发板
    X1
    X2
    X3
    X4
    X5
    X6
    X7
    X8
    Y9
    Y10
    Y11
    Y12
    fritzing接线图

      程序源代码:

         
    1. import pyb
    2. from pyb import Pin

    3. #数码管a~g dp对应的开发板引脚
    4. d_Pins=[Pin(i,Pin.OUT_PP) for i in ['X1','X2','X3','X4','X5','X6','X7','X8']]
    5. #数码管位段1 2 3 4对应的引脚
    6. w_Pins=[Pin(i,Pin.OUT_PP) for i in ['Y9','Y10','Y11','Y12']]

    7. number={
    8. '0':
    9. [0,0,0,0,0,0,1,1],#0
    10. '1':
    11. [1,1,1,1,0,0,1,1],#1
    12. '2':
    13. [0,0,1,0,0,1,0,1],#2
    14. '3':
    15. [0,0,0,0,1,1,0,1],#3
    16. '4':
    17. [1,0,0,1,1,0,0,1],#4
    18. '5':
    19. [0,1,0,0,1,0,0,1],#5
    20. '6':
    21. [0,1,0,0,0,0,0,1],#6
    22. '7':
    23. [0,0,0,1,1,1,1,1],#7
    24. '8':
    25. [0,0,0,0,0,0,0,1],#8
    26. '9':
    27. [0,0,0,0,1,0,0,1],#9
    28. }

    29. def display(num,dp):
    30.     global number
    31.     count=0
    32.     for pin in d_Pins:#显示num的值
    33.         pin.value(number[num][count])
    34.         count+=1
    35.     if dp==1:
    36.         d_Pins[7].value(0)
    37. def clear():
    38.     for i in w_Pins:
    39.         i.value(0)
    40.     for i in d_Pins:
    41.         i.value(1)
    42. def showData(num):
    43.     #分割出数值的百位、千位、个位和小数位的值
    44.         d_num=num
    45.         location=d_num.find('.')
    46.         if location>0:
    47.                 d_num=d_num.replace('.','')
    48.                 while len(d_num)<4:
    49.                         d_num='0'+d_num
    50.                 for i in range(0,4):
    51.                         pyb.udelay(2000)
    52.                         clear()
    53.                         w_Pins[3-i].value(1)
    54.                         if i==location-1:
    55.                                 display(d_num[i],1)
    56.                         else:
    57.                                 display(d_num[i],0)
    58.         if location<0:
    59.                 for i in range(0,4):
    60.                         pyb.udelay(2000)
    61.                         clear()
    62.                         w_Pins[3-i].value(1)
    63.                         display(d_num[i],0)
    64. while True:

    65.         num='9.601'
    66.         showData(num)

    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:25 , Processed in 0.103629 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.