【香蕉派 BPI-M2 Magic (BPi-M2M)开发板试用体验】+数码管

  • Baby_a
  • LV5工程师
  • |      2018-01-15 20:52:55
  • 浏览量 1475
  • 回复:2
数码管显示分为为静态和动态显示,静态显示这是通过GPIO口控制LED,但是随着数码管数量的增加,需要的GPIO口占用太多了,本次使用的数码管为四位一体共阴数码管,在没有使用辅助芯片(74HC595)的情况下,需要使用12个IO口进行相应的控制。 首先我们要进行硬件上的连接(在这里犯了一点点错误,想着直接GPIO.0~GPIO.7连接a~dp,GPIO.21~GPIO.24连接d1~d4): 但是发现数码管不受控制,无法进行相应的显示,后来通过逐步排查原因,发现是这些引脚已经被LVDS显示使用了,无法改变其状态值,所以不能使用其引脚进行控制,故取其他引脚进行进行使用: 通过繁琐的连线和排查,然后进行了相应的代码书写,由于没有辅助芯片的使用,故采用逐个显示的方式进行显示,通过Python自带的模块time.strftime可以显示出相应的时间,以下是百度上摘抄的部分内容: python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) 借助该函数,我们可以显示出相应的内容,以下是使用该模块显示时间的实验结果: 最后把代码贴上,不够精简,请原谅:
#!usr/bin/env python

#-*-coding:utf-8 -*-

import gpio 

import time

# BCM gpio编号

LED_A = 225

LED_B = 230

LED_C = 35

LED_D = 231

LED_E = 67

LED_F = 34

LED_G = 203

LED_DP = 64

DIG1 = 114

DIG2 = 65

DIG3 = 229

DIG4 = 228



#设置输出端口

gpio.setup(LED_A,'out')

gpio.setup(LED_B,'out')

gpio.setup(LED_C,'out')

gpio.setup(LED_D,'out')

gpio.setup(LED_E,'out')

gpio.setup(LED_F,'out')

gpio.setup(LED_G,'out')

gpio.setup(LED_DP,'out')

gpio.setup(DIG1,'out')

gpio.setup(DIG2,'out')

gpio.setup(DIG3,'out')

gpio.setup(DIG4,'out')



def showDigit(Bit,num):

	gpio.set(DIG1, 1)

	gpio.set(DIG2, 1)

	gpio.set(DIG3, 1)

	gpio.set(DIG4, 1)

	

	if (num == 0) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 1)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 0)

		gpio.set(LED_DP,0)

	elif (num == 1) :

		gpio.set(LED_A, 0)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 0)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 0)

		gpio.set(LED_G, 0)

		gpio.set(LED_DP,0)

	elif (num == 2) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 0)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 1)

		gpio.set(LED_F, 0)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 3) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 0)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 4) :

		gpio.set(LED_A, 0)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 0)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 5) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 0)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 6) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 0)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 1)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 7) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 0)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 0)

		gpio.set(LED_G, 0)

		gpio.set(LED_DP,0)

	elif (num == 8) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 1)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	elif (num == 9) :

		gpio.set(LED_A, 1)

		gpio.set(LED_B, 1)

		gpio.set(LED_C, 1)

		gpio.set(LED_D, 1)

		gpio.set(LED_E, 0)

		gpio.set(LED_F, 1)

		gpio.set(LED_G, 1)

		gpio.set(LED_DP,0)

	if (Bit == 1) :

		gpio.set(DIG1, 0)

	elif (Bit == 2) :

		gpio.set(DIG2, 0)

	elif (Bit == 3) :

		gpio.set(DIG3, 0)

	elif (Bit == 4) :

		gpio.set(DIG4, 0)

def print_message():

	print 'Running ...'

	print 'Please press Ctrl+C to end the running ...'



try:

	t=0.005

	while True:

		print_message()	

		time.sleep(t)

		showDigit(1, int(time.strftime("%H",time.localtime(time.time()))) / 10)

		time.sleep(t)

		showDigit(2, int(time.strftime("%H",time.localtime(time.time()))) % 10)

		time.sleep(t)

		showDigit(3, int(time.strftime("%M",time.localtime(time.time()))) / 10)

		time.sleep(t)

		showDigit(4, int(time.strftime("%M",time.localtime(time.time()))) % 10)

except KeyboardInterrupt:

	pass

gpio.cleanup()		
总结:安装上面的代码,我们可以在数码管 上显示出时间,但是数字会出现闪烁的情况,无论T设置多小,都会有一点点闪烁的感觉,可能是代码不够精简的缘故,或者是由于IO口电平翻转所需要时间太长的缘故,或许还是需要借助辅助芯片进行使用,既能节省IO口的使用数量,也能使得显示更加稳定。 如果以上阐述内容有什么错误,欢迎留言探讨。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
1069775139@qq.c 2018-01-18
四位数码管是12位吗?
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子