I. 引言
A. 七段晶码管的概述
七段晶码管是一种显示器件,常用于显示数字、字母、符号等信息。它由七个发光二极管组成,可以通过不同的组合来显示不同的字符。在电子行业和通信领域,七段晶码管被广泛应用。
B. 目标:实时变动的七段晶码管时间
本文的目标是使用树莓派连接七段晶码管,实现一个实时变动的时钟,通过代码实时更新七段晶码管显示。这个实时时钟有时分秒三个模块组成,同时支持12小时和24小时格式。
Ⅱ. 软件设置
A. 必要的库和模块的安装
安装以下Python库和模块:
- time:Python标准库,用于时间相关的操作。
Ⅲ. 实时时钟功能
A. 获取当前时间
使用Python库中的time模块获取系统当前时间。
B. 时间格式化
将获取到的时间数据按照时间格式进行格式化,以便后续在七段晶码管上显示。
Ⅳ. 主要代码实现
在主程序入口中,可以设置定时器,每隔一段时间执行一次实时更新函数,并循环执行。
Ⅴ. 测试和调试
A. 代码测试
#!/usr/bin/env python
# coding: utf-8
# # Function函数与time库的应用
# ## 一、函数的定义
# ## 二、函数的调用
# ## 三、形参与实参
# (1)形参:定义函数时的变量名称
# (2)实参:调用函数时的变量值
# (3)传递:一定是实参传递给形参
# ## 四、案例分析:绘制七段电子数码管时间
# ## 0.导入库模块
# In[1]:
#import turtle #导入turtler画图库, 其方法前面一定要添加库名turtle
from turtle import* #导入turtler画图库, 其方法前面一定不能添加库名turtle
from random import* #导入random库, 其方法前面一定不能添加库名
import time #导入time库, 其方法前面一定要添加库名time
# ## 1.绘制单段数码管的间隙
# In[1]:
def drawGap():
penup() #设置画笔为飞行模式
fd(5) #画笔前进5px
# ## 2.绘制单端数码管
# In[2]:
def drawLine(draw):
drawGap() #调用间隙函数
if draw:
pendown() #设置如果函数参数draw为真时画笔为工作模式
else:
penup() #否则画笔仍未飞行模式
fd(20) #画笔向前行进20px
drawGap() #第二次调用间隙函数
right(90) #将画笔向下(前进向右)旋转90度
# ## 3.绘制单个数字数码管
# In[3]:
def drawDigit(digit):
#画第一段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[2,3,4,5,6,8,9] else drawLine(False)
#用if else 表达式画第二段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit not in [2] else drawLine(False)
#用if else 表达式画第三段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[0,2,3,5,6,8,9] else drawLine(False)
#用if else 表达式画第四段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[0,2,6,8] else drawLine(False)
left(90) #将画笔向上(前进向左)旋转90度
#用if else 表达式画第五段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[0,4,5,6,8,9] else drawLine(False)
#用if else 表达式画第六段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[0,2,3,5,6,7,8,9] else drawLine(False)
#用if else 表达式画第七段数码管
pencolor(random(),random(),random()) #用随机函数设置画笔的颜色
drawLine(True) if digit in[0,1,2,3,4,7,8,9] else drawLine(False)
left(180) #将画笔反向(旋转180度)
penup() #将画笔设置飞行模式
fd(20) #将画笔前进20px
# In[6]:
#for i in range (6):
# pensize(6)
# pencolor(random(),random(),random())
# fd(200)
# left(60)
# ## 4.获取绘制数字(先从键盘上输入数字,再从系统中获取数字日期)
# In[12]:
def drawData(date):
for i in date:
if i=='-':
write('年',font=("楷体",20,"normal"))
fd(40)
elif i=='=':
write('月',font=("楷体",20,"normal"))
fd(40)
elif i=='+':
write('日',font=("楷体",20,"normal"))
fd(40)
elif i==':':
write('时',font=("楷体",20,"normal"))
fd(40)
elif i=='*':
write('分',font=("楷体",20,"normal"))
fd(40)
elif i=='$':
write('秒',font=("楷体",20,"normal"))
fd(40)
else:
drawDigit(eval(i))
#将获取的数字,(从键盘上或者系统中)获取的数字,字符串,转换成数据类型
# ## 5.编写主函数(设置画布和画笔的属性等)
# In[37]:
def main():
setup(1500,350,0,200) #设计画布的原点坐标(左上角 x,y)
bgcolor('black')
pensize(5)
speed(200) #画笔工作的速度为200px
penup()
fd(-600) #将画笔向左移动600px
# drawData(input('请输入你的生日数字:')) #从键盘上获取绘制的数据
drawData(time.strftime('%Y-%m=%d+%H:%M*%S$%A_%a'))
#从系统中获取相应格式的日期数据
hideturtle() #隐藏画笔
done() #关闭画笔功能
# In[44]:
time.time()
# In[45]:
time.localtime()
# In[48]:
time.strftime('%Y年%m月%d日%H时%M分%S秒%A_%a')
# ## 6.调用主函数
# In[41]:
if __name__ == '__main__': #当主函数为脚本代码是执行下面主函数
main()
执行程序进行测试,检查七段晶码管是否正常显示时间。
VII. 结论
A. 可能的扩展和改进
可以将该项目扩展为多个功能,比如闹钟、倒计时、温度显示等。通过不同的代码实现,可以将七段晶码管模块发挥更大的作用。
VIII. 参考文献
A.文章中使用的库和资料
- Python time库官方文档:https://docs.python.org/3/library/time.html