turtle实例5 数码管

数码管规格

百科

led数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。没有小数点的叫七段数码管

一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,哪个数码管便会被点亮。

数码管编码

在这里插入图片描述

绘制思路
  1. 通过控制turtle的落笔和抬笔来模拟数码管的亮与不亮
  2. 通过控制画笔颜色来模拟数码管的亮与不亮.
    俩种方法都很简单, 就不具体介绍了

运行结果

三个图分别为: “全显示”, “本地日期”, “十六进制整数”
全显示本地日期十六进制整数
好了, 上代码,

完整代码

# 型号:3361BS

import turtle, time, random
tubeDict={
    '0': '1111110',
    '1': '0110000',
    '2': '1101101',
    '3': '1111001',
    '4': '0110011',
    '5': '1011011',
    '6': '1011111',
    '7': '1110000',
    '8': '1111111',
    '9': '1111011',
    'A': '1110111',
    'b': '0011111',
    'c': '1001110',
    'd': '0111101',
    'E': '1001111',
    'F': '1000111',
    '.': '.'
}

turtle.setup(startx=0)
tl=80
width = tl*0.8/9.2
spacing=2*(tl-width)*7.5/9.2
y0 = tl
def rgbToHex(r,g,b):
    return '#{:0>2}{:0>2}{:0>2}'.format(hex(r%256)[2:], hex(g%256)[2:], hex(b%256)[2:])

def drawTube(string='1111111', x0=0, rangle = 5, clear=False, sleep = 0, tl=tl):
    # 9.2:7.5:4.8:0.8:0.2, 5°.
    color2 = rgbToHex(10,10,10)
    tube = turtle.Pen()
    tube.ht(), tube.color('red'), tube.speed(0)
    tube.width(width)

    # draw dot. add in 2019/11/11
    tube.pu(), tube.goto(x0, y0), tube.seth(0), tube.right(90 + rangle), tube.fd(tl * 2 - width), tube.left(
        90 + rangle), tube.fd(spacing * 0.8), tube.pd()
    if string == '.':
        tube.color('red'), tube.dot(width)
        return
    
    tube.pu(), tube.goto(x0,y0), tube.seth(0)
    tube.pu(), tube.fd(width*0.5), tube.pd()
    if string[0] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl-width)
    tube.pu(), tube.fd(width*0.5), tube.pd()
    tube.right(90+rangle)
    
    tube.pu(), tube.fd(width), tube.pd()
    if string[1] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl-width*2)
    tube.pu(), tube.fd(width), tube.pd()
    
    if string[2] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl - width*2)
    tube.pu(), tube.fd(width), tube.pd()
    tube.right(90-rangle)
    tube.pu(), tube.fd(width * 0.5), tube.pd()
    
    if string[3] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl-width)
    tube.pu(), tube.fd(width * 0.5), tube.pd()
    tube.right(90+rangle)
    tube.pu(), tube.fd(width), tube.pd()
    
    if string[4] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl - width * 2)
    tube.pu(), tube.fd(width), tube.pd()
    
    if string[5] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl - width * 2)
    tube.pu(), tube.fd(width), tube.pd()
    
    tube.pu(), tube.goto(x0, y0), tube.seth(0), tube.right(90+rangle), tube.fd(tl-width*0.5), tube.left(90+rangle), tube.fd(width*0.5), tube.pd()
    
    if string[6] == '0':
        tube.color(color2)
    else:
        tube.color('red')
    tube.fd(tl-width)
    
    
    # print(string)
    time.sleep(sleep)
    if clear == True:
        tube.clear()
def drawCheck():
    for string in tubeDict:
        print(string, tubeDict[string])
        drawTube(tubeDict[string],clear=True,sleep=0.5)
        # input('enter to continue')
    strings = '8.'*8
    les = len(strings) - strings.count('.')
    turtle.tracer(False)
    for n, string in enumerate(strings):
        if string != '.':
            x0 = -spacing * (les / 2 - n/2)
        drawTube(tubeDict[string], x0=x0)
    turtle.update()
    time.sleep(1)
def displayDate():
    date = '{:0>2}{:0>2}{:0>2}'.format(time.localtime()[0], time.localtime()[1], time.localtime()[2])
    print(date)
    for n, string in enumerate(date):
        x0 = -spacing * (4 - n)
        drawTube(tubeDict[string], x0=x0)
    print(string)
def drawRandom():
    turtle.clear()
    while True:
        strings = ''
        for i in range(8):
            randint = random.choice('0123456789AbcdEF')  # hex
            strings += str(randint)
        decimal = eval('0x'+strings)
        turtle.tracer(False)
        for n, string in enumerate(strings):
            x0 = -spacing * (len(strings)/2 - n)
            drawTube(tubeDict[string], x0=x0)
        turtle.update()
        print('displaying:\n', strings, decimal)
        time.sleep(2)
        
def main():
    turtle.bgcolor('black'), turtle.setup(spacing * 10)
    drawCheck() # no error, 2019/11/10
    # displayDate()
    # time.sleep(2)
    # drawRandom()
    turtle.done()
main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值