七段数码管绘制

简介: 七段数码管绘制

效果图



20210629191253413.gif


文章目录

效果图


一.问题分析


二.编码


三.优化


四.完整代码


如下,就是七段数码管,小时候的计算器,电子手表中经常见,现在也是哈😀,好,今天就用所学习的Python基础结合turtle绘图体系制作出来。


一.问题分析


20210629154311537.png


就用不久前学的turtle绘图体系来试试看

这个七段数码管有7根线条组成,用不同的数来显示线条

先完成一条线,然后完成一串数字,最后获取当前的时间并显示,perfect!!!


二.编码


首先用到turtle库,引入我们的库

import turtle #引入库


使用函数绘制一条线,因为这个大小一样,之后调用函数就0k了,是不是很简单呢。


def drawLine(draw):
    turtle.pendown() if draw else turtle.penup()    #如果画了就放下画笔,否则抬起画笔
    turtle.fd(40)       #四十像素
    turtle.right(90)        #转向右90度,画下一条。


然后我们画出一个数码管,一共有七条线,如上图,所有的数都从一走,drawdigit函数是一个0-9的数字,第一条横除了0,1,7不需要其他都需要,以此类推。


这里要注意画完前4条海龟回到原点了,我们需要让它转头左转90度,继续直线。代码如下:


def drawDigit(digit): #根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup() #为绘制后续数字确定位置
    turtle.fd(20) #为绘制后续数字确定位置


到这第一步就完成了,下面来完成获取一段数字,绘制出数码管。


我需要一个循环读这一段字符,最后通过主函数main进行封装,有点C的意思。


def drawDate(date): #获得要输出的数字
    for i in date:
        drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawDate('20210629')
    turtle.hideturtle()
    turtle.done()
main()


效果:


三.优化



数码管间隔的函数定义:


def drawGap(): #绘制数码管间隔
    turtle.penup()
    turtle.fd(5)


调用:


import turtle
def drawGap(): #绘制数码管间隔
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):
    drawGap()
    turtle.pendown() if draw else turtle.penup()    #如果画了就放下画笔,否则抬起画笔
    turtle.fd(40)       #四十像素
    drawGap()
    turtle.right(90)        #转向右90度,画下一条。
def drawDigit(digit): #根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup() #为绘制后续数字确定位置
    turtle.fd(20) #为绘制后续数字确定位置
def drawDate(date): #获得要输出的数字
    for i in date:
        drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawDate('20210629')
    turtle.hideturtle()
    turtle.done()
main()


之前:


20210629172127505.png


优化:


20210629172244689.png


获取系统时间,绘制七段数码管

这里要借助之前学习的库time


使用time库获取当前系统时间


增加年月日


添加颜色


import time


四.完整代码



import turtle as t
import time
def drawGap(): #绘制数码管间隔
    t.penup()
    t.fd(5)
def drawLine(draw):
    drawGap()
    t.pendown() if draw else t.penup()    #如果画了就放下画笔,否则抬起画笔
    t.fd(40)       #四十像素
    drawGap()
    t.right(90)        #转向右90度,画下一条。
def drawDigit(digit): #根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    t.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    t.left(180)
    t.penup() #为绘制后续数字确定位置
    t.fd(20) #为绘制后续数字确定位置
def drawDate(date): #获得要输出的数字
    t.pencolor("red")
    for i in date:
        if i == '-':
            t.write('年',font=("Arial", 18, "normal"))
            t.pencolor("Lime")
            t.fd(40)
        elif i == '=':
            t.write('月',font=("Arial", 18, "normal"))
            t.pencolor("blue")
            t.fd(40)
        elif i == '+':
            t.write('日',font=("Arial", 18, "normal"))
        else:
            drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
    t.setup(1000, 500, 200, 200)
    t.penup()
    t.fd(-300)
    t.pensize(5)
    drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
    t.hideturtle()
    t.done()
main()


效果:


20210629182048268.png


相关文章
|
9月前
|
传感器 芯片
数码管显示原理及应用实现介绍1
数码管是一种能够显示数字和简单的字母的显示设备,它由LED(Light Emitting Diode,发光二极管)组成。LED是一种半导体器件,当电流通过它时,会产生光。数码管的每个LED都对应一个数字或字母的形状,通过开启或关闭LED,可以显示所需的数字或字母。 数码管可以分为共阳极和共阴极两种类型。共阳极数码管的所有LED的阳极连接在一起,通过控制每个LED的阴极点亮或熄灭来显示不同的数字或字母。共阴极数码管则相反,将所有LED的阴极连接在一起,通过控制每个LED的阳极点亮或熄灭来显示不同的数字或字母。在实际应用中,常用的是共阳极数码管。 数码管的控制是通过给定不同的输入信号来实现的。
227 0
|
2月前
|
XML 监控 程序员
基于C#的波形显示控件的实现_kaic
基于C#的波形显示控件的实现_kaic
|
9月前
|
传感器 芯片
数码管显示原理及应用实现介绍2
继续介绍数码管的应用实现。 7. 数字测量仪表:数码管可以用来显示各种物理量的测量结果,如电压、电流、功率等。传感器可以将被测量的物理量转换为电信号,并通过微控制器进行处理,并将结果显示在数码管上。 8. 运动计时器:数码管可以用来显示比赛或训练的时间、轮次、分数等信息。通过微控制器或计时器芯片,可以精确地控制和显示各项计时数据。 9. 信号状态指示:数码管可以用来显示开关、按钮或传感器等的状态。通过微控制器或逻辑电路,可以将不同的输入状态映射到数码管的显示状态,方便用户了解和判断设备的工作状态。 10. 售货机显示:数码管可以用来显示售货机的产品信息、价格和投币金额等。通过微控制器进
66 0
|
11月前
|
C++ 计算机视觉 Python
Qt+C++跑马灯-指示灯-风扇-虚线灯带-动画仿真
这篇博客针对<<Qt+C++跑马灯-指示灯-风扇-虚线灯带-动画仿真>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
107 0
【单片机】数码管矩阵显示
【单片机】数码管矩阵显示
70 0
python绘制一个时间的七段数码管实例基本的七段数码管绘制
python绘制一个时间的七段数码管实例基本的七段数码管绘制
按键控制数码管闪烁
按键控制数码管闪烁
67 0