极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12648|回复: 0

新手必看Micropython四位数码管显示原理

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





开发板与四位数码管针脚对应:
  
数码管引脚
          a--g对应X1—X7
         dp接X8
        1—4对应Y9—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)
复制代码
回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 13:11 , Processed in 0.039246 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表