美文网首页
七段数码管 | Python

七段数码管 | Python

作者: 晏如V5 | 来源:发表于2017-10-31 13:40 被阅读551次

最近在中国大学MOOC网站,跟着北理工嵩天老师团队,学习《Python语言程序设计》。其中,第5周的课后练习,是要实现一个模拟的七段数码管,并用它显示日期。

不得不说,老师给的练习指导超有水平,寥寥几句话介绍了七段数码管的原理。读完之后,解题思路也就有了。

数码管是一种价格便宜、使用简单的发光电子器件,广泛应用在价格较低的电子类产品中,其中,七段数码管最为常用。七段数码管(seven-segment indicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置,如下图所示。

七段数码管的结构图.png

我摸索了几天,交作业如下:

输出结果如下图

七段数码管_400.png

源代码

# exercise05.py
# 七段数码管

# 2017年10月27日,第一版。 helen.chan@163.com
# 2017年10月31日,第2版。加入颜色参数。 helen.chan@163.com
# 2017年10月31日,第3版。将要显示的1~F作为参数传给函数,方便调用。helen.chan@163.com
# 2017年10月31日,第3.1版。输入为字符串时,转为数码管输出。helen.chan@163.com
# 2017年10月31日,第3.2版。取当前系统时间,转为数码管输出。helen.chan@163.com
# 2017年10月31日,第4版。实现数码管变色的效果。helen.chan@163.com

# 相关常量定义
# INDICATOR_X为横向管的长度,INDICATOR_Y为纵向管的长度,INDICATOR_W为粗细;
# INDICATOR_CELL_WIDE为容纳字符的格子的宽度; INDICATOR_CELL_HEIGHT 为容纳字符的格子的高度。
# DOT_SIZE是小数点的大小,DOT_TO_LEFT为小数点到左边的距离,DOT_TO_HEAD为小数点到上边的距离。
# LEFT左边距, HEADING上边距, RIGHT右边距, BOTTOM下边距
# COLOR画笔颜色


import turtle
import datetime

INDICATOR_X = 30
INDICATOR_Y = 40
INDICATOR_W = 2

INDICATOR_CELL_HEIGHT = 90
INDICATOR_CELL_WIDE = 50

DOT_SIZE = 5
DOT_TO_LEFT = 40
DOT_TO_HEAD = 75

LEFT = 100
HEADING = 100
RIGHT = 100
BOTTOM = 100

COLOR = "pink"                      #我真的是粉红控,^_^

turtle.pensize(INDICATOR_W)
turtle.color(COLOR)
turtle.hideturtle()                 #隐藏画笔的形状,默认是箭头       

# 点亮a到g段数码管和小数点灯的函数
def _show_a(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(0)
    turtle.goto(x, y)
    turtle.pendown()
    turtle.forward(INDICATOR_X)
    turtle.penup()
    
def _show_b(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(270)
    turtle.goto(x + INDICATOR_X, y)
    turtle.pendown()
    turtle.forward(INDICATOR_Y)
    turtle.penup()
    
def _show_c(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(270)
    turtle.goto(x + INDICATOR_X, y - INDICATOR_Y)
    turtle.pendown()
    turtle.forward(INDICATOR_Y)
    turtle.penup()
    
def _show_d(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(180)
    turtle.goto(x + INDICATOR_X, y - INDICATOR_Y * 2)
    turtle.pendown()
    turtle.forward(INDICATOR_X)
    turtle.penup()
    
def _show_e(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(90)
    turtle.goto(x, y-INDICATOR_Y*2)
    turtle.pendown()
    turtle.forward(INDICATOR_Y)
    turtle.penup()

def _show_f(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(90)
    turtle.goto(x, y - INDICATOR_Y)
    turtle.pendown()
    turtle.forward(INDICATOR_Y)
    turtle.penup()
    
def _show_g(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(0)
    turtle.goto(x , y - INDICATOR_Y)
    turtle.pendown()
    turtle.forward(INDICATOR_X)
    turtle.penup()
    
def _show_dp(color, x, y):
    turtle.color(color)
    turtle.penup()
    turtle.setheading(0)
    turtle.goto(x + DOT_TO_LEFT, y - DOT_TO_HEAD)
    turtle.pendown()
    turtle.dot(DOT_SIZE, color)
    turtle.penup()


# 显示0到F的函数
def show0(color, x, y):
    _show_a(color, x, y)
    _show_b(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)
    _show_e(color, x, y)
    _show_f(color, x, y)

def show1(color, x, y):
    _show_b(color, x, y)
    _show_c(color, x, y)
    
def show2(color, x, y):
    _show_a(color, x, y)
    _show_b(color, x, y)
    _show_g(color, x, y)
    _show_e(color, x, y)
    _show_d(color, x, y)

def show3(color, x, y):
    _show_a(color, x, y)
    _show_b(color, x, y)
    _show_g(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)

def show4(color, x, y):
    _show_f(color, x, y)
    _show_g(color, x, y)
    _show_b(color, x, y)
    _show_c(color, x, y)

def show5(color, x, y):
    _show_f(color, x, y)
    _show_g(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)
    _show_a(color, x, y)

def show6(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_d(color, x, y)
    _show_c(color, x, y)
    _show_g(color, x, y)

def show7(color, x, y):
    _show_a(color, x, y)
    _show_b(color, x, y)
    _show_c(color, x, y)
    
def show8(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_g(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)
    _show_e(color, x, y)
    _show_b(color, x, y)
    
def show9(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_g(color, x, y)
    _show_b(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)

def showA(color, x, y):
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_a(color, x, y)
    _show_b(color, x, y)
    _show_c(color, x, y)
    _show_g(color, x, y)
    
def showB(color, x, y):
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_g(color, x, y)
    _show_c(color, x, y)
    _show_d(color, x, y)

def showC(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_d(color, x, y)
    
def showD(color, x, y):
    _show_b(color, x, y)
    _show_c(color, x, y)
    _show_g(color, x, y)
    _show_e(color, x, y)
    _show_d(color, x, y)

def showE(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_g(color, x, y)
    _show_d(color, x, y)

def showF(color, x, y):
    _show_a(color, x, y)
    _show_f(color, x, y)
    _show_e(color, x, y)
    _show_g(color, x, y)

def showdot(color, x, y):       #显示小数点,由于小数点就是由dp那个灯决定的,所以只需调用show_dp()
    _show_dp(color, x, y)

    
    
def show(char, color, x, y):
    #i = -400           #turtle以屏幕中心为原点,所以先向西偏移一些。
    if char == "0": 
        show0(color, x, y)
    elif char == "1":   
        show1(color, x, y)
    elif char == "2":
        show2(color, x, y)
    elif char == "3":
        show3(color, x, y)
    elif char == "4":
        show4(color, x, y)
    elif char == "5":
        show5(color, x, y)
    elif char == "6":
        show6(color, x, y)
    elif char == "7":
        show7(color, x, y)
    elif char == "8":
        show8(color, x, y)
    elif char == "9":
        show9(color, x, y)
    elif char == "a":
        showa(color, x, y)
    elif char == "b":
        showb(color, x, y)
    elif char == "c":
        showc(color, x, y)
    elif char == "d":
        showd(color, x, y)
    elif char == "e":
        showe(color, x, y)
    elif char == "f":
        showf(color, x, y)
    else:
        showdot(color, x, y)
    
    
    
def main():
    string = datetime.datetime.now().strftime('%Y-%m-%d')       # 我不生产代码,我只是代码的搬运工,:(
    
    # 我调整出来的彩红序列,美美哒
    rainbow = ["red", "orange", "yellow", "springgreen", "cyan", "skyblue", "mediumpurple"]     # 因为前面设计的颜色控制采用的传字符串方式,所以暂用一个颜色序列来实现变色的功能
    
    start = -240
    for i in range(len(string)):
        show(string[i], rainbow[i%len(rainbow)], start + i*50, 0)


main()


后记

这代码只是一个练习,有很多不漂亮的地方。只能算个人笔记,几点体会写下来备忘:

  1. turtle.home():作用是把画笔移动到原点位置,相当于一个初始化操作
  2. turtle.penup():抬起画笔,不留下轨迹;turtle.pendown():落下画笔,留下轨迹
  3. 程序风格: 常量全大写;内部函数命名用_开头

相关文章

  • 七段发光数码管

    七段发光数码管由7+1个相同的LED组成来显示数字8。以此类推,七段发光数码管也可以组成字母图案。.七段发光数码管...

  • Python 七段数码管绘制

    数码管是一种半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点...

  • 2018-12-08 七段数码管

    七段数码管版本一 #SevenDigitsDrawV1.py importturtle defdrawLine(d...

  • 七段数码管 | Python

    最近在中国大学MOOC网站,跟着北理工嵩天老师团队,学习《Python语言程序设计》。其中,第5周的课后练习,是要...

  • 产品汪的Arduino成长之路(一):简易温度计

    一、任务介绍 利用温度传感器和四位七段数码管制作简易温度计,将温度数据显示在数码管上。 二、材料清单 开发板:Ar...

  • 倒计时

    课前学习 单词含义count down倒计时show展示,演示number数字clear清除 七段数码管在家电及工...

  • Lab5 : uC/OS室温计 - 快来再点个灯

    实验环境为Window10 + Keil 5.18,代码中使用标准库。 实验准备 本次实验硬件上需要七段数码管LG...

  • 2017年11月7日学习总结

    今天学习了一位的七段数码管显示和4位数码管显示,用到了数组,函数分别控制段选和位选。然后又把昨天的硬件进行了连接,...

  • 11.7

    今天学习了七段数码管的显示,下午编写了一个表的程序 void display(uint8_t val, uint8...

  • Quartus | 烧制过程的火候控制及心得体会

    模糊的图片点击后即可看到清晰的原图 BCD七段数码管的转换模块 板载50MHz信号使用方法 在Add Symbol...

网友评论

      本文标题:七段数码管 | Python

      本文链接:https://www.haomeiwen.com/subject/evkbpxtx.html