这篇文章将为大家详细讲解有关树莓派Python如何用2位数码管显示CPU温度,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
这个原理最早源于电影制作。科学实验证明,人眼在某个视像消失后,仍可使该物像在视网膜上滞留0.1-0.4秒左右。电影胶片以每秒24格画面匀速转动,一系列静态画面就会因视觉暂留作用而造成一种连续的视觉印象,产生逼真的动感。家里常用的日光灯也是这个原理,日光灯并非一直亮着的,而是在以很快的频率进行亮灭亮灭,当闪烁的频率达到每秒25次以上的时候,人眼就认为是一直亮着的。
可以利用这个原理,只要在足够短的时间间隔里分别显示2个数码管的数字,在人的视觉上就会认为这2个数字是同时显示的。那我们在电路控制采用的办法就是对3号引脚进行分时分配:0.01秒用于数码管1的 A 管,接下来的0.01秒用于数码管2的 A 管,这样1秒钟之内可以刷新50次,确保数码管没有闪烁感。
#!/usr/bin/env python
# encoding: utf-8
'''
接线图:
RPi digital
7 <---> 10
11 <---> 5
13 <---> 3
15 <---> 9
29 <---> 8
31 <---> 6
33 <---> 7
35 <---> 4
37 <---> 1
'''
import RPi.GPIO as GPIO
import time
import os
# 数码管1-2正极分别使用的针脚
LED_POWER_1 = 7
LED_POWER_2 = 11
# A-G管分别使用的针脚
LED_A = 13
LED_B = 15
LED_C = 29
LED_D = 31
LED_E = 33
LED_F = 35
LED_G = 37
# 获取CPU温度
def get_cpu_temperature():
return os.popen('vcgencmd measure_temp').read()[5:7]
# 重置数码管,熄灭所有数字
def reset():
GPIO.output((LED_POWER_1, LED_POWER_2), GPIO.LOW)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.HIGH)
# 设置第几个数码管亮起
def set_position(position):
if position == 1:
GPIO.output(LED_POWER_1, GPIO.HIGH)
else:
GPIO.output(LED_POWER_2, GPIO.HIGH)
# 显示数字0
def show0(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F), GPIO.LOW)
# 显示数字1
def show1(p):
reset()
set_position(p)
GPIO.output((LED_B, LED_C), GPIO.LOW)
# 显示数字2
def show2(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_D, LED_E, LED_G), GPIO.LOW)
# 显示数字3
def show3(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_G), GPIO.LOW)
# 显示数字4
def show4(p):
reset()
set_position(p)
GPIO.output((LED_B, LED_C, LED_F, LED_G), GPIO.LOW)
# 显示数字5
def show5(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_C, LED_D, LED_F, LED_G), GPIO.LOW)
# 显示数字6
def show6(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.LOW)
# 显示数字7
def show7(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C), GPIO.LOW)
# 显示数字8
def show8(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.LOW)
# 显示数字9
def show9(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_F, LED_G), GPIO.LOW)
GPIO.setmode(GPIO.BOARD)
# 初始化引脚输出模式
GPIO.setup((LED_POWER_1, LED_POWER_2, LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.OUT)
function_directory = locals()
try:
while True:
cpu_temperature = get_cpu_temperature()
print 'CPU temperature = %s°C'%(cpu_temperature)
loop = 0
while loop < 200:
loop += 1
# 先显示高位
position = 1
for n in cpu_temperature:
function_directory['show%s'%(n)](position)
time.sleep(0.01)
position += 1
except KeyboardInterrupt:
GPIO.cleanup()
关于树莓派Python如何用2位数码管显示CPU温度就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。