【小白米日志】树莓派3b+四位共阴数码管的连接和驱动

  • 所需材料
  • 数码管的简介
  • GPIO连接
  • 代码
  • 演示

所需材料

笔记本电脑:通过ssh控制树莓派。
树莓派3b+:装好系统,打开ssh。
四位共阴 数码管 × 1
面包板 × 1
连接线若干

数码管的简介

##八个发光二极管封装为一个数字8及其小数点,有共阳和共阴之分,共阳极数码管指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制,共阴极数码管反之,八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段可分别控制,总而言之,共阳极数码管通过低电平控制,而共阴级数码管通过高电平控制。

##此外数码管还有静态显示和动态显示之分,静态显示指每个数码管的每一个段码都由一个树莓派GPIO进行控制,此方法显然不适用用多位的数码管,比如今天要玩的这个四位数码管如果按此方法驱动,那么用到的GPIO达4+4×8=36之多,即使够用,复杂的线路和控制方法也会让人一阵头疼。

##而数码管动态显示接口广泛应用的一种显示方式,动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

##今天我要玩的这个四位共阴数码管是某宝上随便淘来的,很便宜,但不是所谓的“树莓派专用”,虽然我也刚接触硬件,但是这几天对比下来只要沾上树莓派专用这几个字的东西都比较贵,可能树莓派是小白泛滥区,比较容易收智商税,反正我的硬件全部是照着单片机等开发板买的,到今天玩了两三个硬件,一切良好。

##闲言少絮,话归正题,身为小白的我买了查型号查不到资料的四位数码管,最后是通过度娘,用万能表测定了12个针脚。


GPIO连接


##我这里使用了面包板来连接,当然也可以用其他的方法,焊接起来都行,只有两个原则,一是安装稳当,避免接触不良,二是线路错综,务必细心。

##为了方便代码的展示,下面我列出数码管各引脚和树莓派GPIO连接的对照表,注意我用的是BCM编码,不是引脚的物理顺序。据表1连接BCM16号,即物理引脚编码的36号,以此类推,连接好所有接口。

代码

本代码参考了网上其他同学的代码非原创,但是因为网上所载代码有些许错误,或者是因为我的python3不兼容,我做了一些调试,2019/07/02能用。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:二流君子import RPi.GPIO as GPIO
import time#每一位数码管的总阴级连接的树莓派接口
BIT0 = 16
BIT1 = 20
BIT2 = 21
BIT3 = 26segCode = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f]  # 0~9
pins = [23,25,13,5,22,24,19,6,16,20,21,26]#全部接口
bits = [BIT0, BIT1, BIT2, BIT3]def print_msg():print('Program is running...')print('Please press Ctrl+C end the program...')def digitalWriteByte(val):GPIO.output(23, ~val & (0x01 << 0))#GPIO.output设置某个针脚输出状态,1or0GPIO.output(25, ~val & (0x01 << 1))#由上往下是a\b\c\d\e\f\g\dpGPIO.output(13, ~val & (0x01 << 2))GPIO.output(5, ~val & (0x01 << 3))GPIO.output(22, ~val & (0x01 << 4))GPIO.output(24, ~val & (0x01 << 5))GPIO.output(19, ~val & (0x01 << 6))GPIO.output(6, ~val & (0x01 << 7))def display_1():#GPIO.output(BIT0, GPIO.LOW)# 设置BIT0针脚为低电平(0V)for bit in bits:GPIO.output(bit, GPIO.HIGH)#设置所有BIT高电平(3.3V)for i in range(10):digitalWriteByte(segCode[i])time.sleep(0.5)def display_2():for bit in bits:GPIO.output(bit, GPIO.LOW)#设置所有BITA为低电平'''for i in range(10):digitalWriteByte(segCode[i])time.sleep(0.5)'''def bitkz(bit,num):GPIO.output(bit, GPIO.HIGH)digitalWriteByte(segCode[num])time.sleep(0.002)GPIO.output(bit, GPIO.LOW)def display_3(num):b0 = int(num / 1 % 10)b1 = int(num / 10 % 10)b2 = int(num / 100 % 10)b3 = int(num / 1000 % 10)#print("千位:{} 百位:{} 十位:{} 个位:{}".format(b3,b2,b1,b0))if num < 10:bitkz(BIT3,b0)elif num >= 10 and num < 100:bitkz(BIT3,b0)bitkz(BIT2,b1)elif num >= 100 and num < 1000:bitkz(BIT3, b0)bitkz(BIT2, b1)bitkz(BIT1,b2)elif num >= 1000 and num < 10000:bitkz(BIT3, b0)bitkz(BIT2, b1)bitkz(BIT1, b2)bitkz(BIT0, b3)else:print('Out of range, num should be 0~9999 !')def setup():GPIO.setmode(GPIO.BCM)  # 按BCM编码位置对gipo进行编号for pin in pins:GPIO.setup(pin, GPIO.OUT)  # 设置所有针脚为输出模式GPIO.output(pin, GPIO.HIGH)  #  设置所有针脚为高电平(3.3V)def loop():while True:print_msg()display_1()time.sleep(1)display_2()time.sleep(1)tmp = int(input('Please input a num(0~9999):'))for i in range(500):display_3(tmp)time.sleep(1)def destroy():  # 程序结束时,执行该功能。for pin in pins:GPIO.output(pin, GPIO.LOW)  # 设置所有针脚为低电平(0V)GPIO.setup(pin, GPIO.IN)  # 设置所有插脚输入模式if __name__ == '__main__':  # 程序从这里开始setup()try:loop()except KeyboardInterrupt:destroy()

演示

http://www.iqiyi.com/w_19s8vlhr81.html

【小白米日志】树莓派3b+四位共阴数码管的连接和驱动相关推荐

  1. 物联网开发笔记(80)- 使用Micropython开发ESP32开发板之通过IIC接口控制TM1650四位共阴数码管模块

    一.目的 这一节我们学习如何使用我们的ESP32开发板来通过IIC接口控制TM1650四位共阴数码管模块.  二.环境 ESP32 + Thonny + TM1650四位共阴数码管模块 + 几根杜邦线 ...

  2. c语言编计分秒时的程序,用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。...

    匿名用户 1级 2014-05-07 回答 /*************************************************************************** 标 ...

  3. 基于51单片机的四位共阴数码管秒表proteus仿真

    硬件设计 (末尾附文件) 代码设计 #include "reg51.h" #include "intrins.h"#define GPIO_DIG P2 //数 ...

  4. 四位共阳极数码管显示函数_74LS164驱动4位共阳数码管代码

    #include "reg52.h" #define u16 unsigned int #define u8 unsigned char sbit CLK=P2^0; sbit D ...

  5. 四位共阳极数码管显示函数_【项目8-任务10-小组13】利用四位数码管实现动态扫描显示...

    学习任务 1.四位数码管的电路结构与显示原理 (什么是位选.什么是段选.共阴与共阳的区别.显示4位数字,需要多少条口线?显示n位数字呢?) 2.Arduino直接连接四位数码管实现四位阿拉伯数字显示 ...

  6. 树莓派控制3631AS数码管 驱动 python程序 共阴数码管|徐奥雯编写|XUAOWEN

    使用方法: 新建py文件,将下面的驱动代码复制到文件中保存,命名为drive_3631as.py 连接树莓派与数码管 根据上面的引脚图的1-12号(没有6) 所连接树莓派的GPIO引脚,在刚刚新建的d ...

  7. 大尺寸共阴数码管驱动电路

    以前做而论道曾经写过"驱动大尺寸数码管的方法与电路"的博文,链接如下: http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item ...

  8. 使用TMS320F28335控制四位共阳数码管

    目录 1 要实现的功能 2 数码管的原理 2.1 数码管发光显示原理 2.2 数码管控制原理 3 功能实现过程 3.1 GPIO配置 3.2 数字显示 3.3 显示控制 3.4 其他代码 4 调试修改 ...

  9. 共阳数码管和共阴数码管用法区别

    共阳数码管和共阴数码管用法区别 学习单片机将近一年半了,今天突然发现,我学习东西只是单纯的去记忆知识,并不涉及什么推理,基本上也没有什么思考.学得不真,学得也不深.长此以往,自己的思维将会变得越来越呆 ...

最新文章

  1. php表单ajax,PHP表单到Ajax类型
  2. swagger error: Conflicting schemaIds: Duplicate schemaIds detected for types A and B
  3. 常考数据结构与算法:二叉树的最大深度
  4. Redis-18Redis主从同步
  5. Linux buffer/cache异同
  6. linux获取cpu核数(线程数)
  7. Android 源码查看和解析
  8. python 依据某几列累加求和_关于Python数组求和的四个问题及详解,让你更加爱Python!...
  9. 求一个简单的php购物车,PHP简单实现购物车
  10. ios 代码设置控件宽高比_ios-自动布局以保持视图大小比例
  11. mysql 避免重复添加_MySql三种避免重复插入数据的方法
  12. 【转】C#中的Stream
  13. 11-----的使用
  14. python 分割线_用Python打印分割线练习
  15. android pay和hce区别,一文带你看懂闪付和云闪付的区别
  16. 火星超大nasa开源全景图分享
  17. seting the network namespace failed: Invalid argument
  18. VulnHub日记(八):Hacker Kid
  19. 苹果ppt_如何选择一款趁手的PPT软件 | 一千零一夜PPT系列
  20. 视频直播系统源码,保存平台视频内容到本地

热门文章

  1. 自动化测试po模式是什么?自动化测试po分层如何实现?(附详细源码)
  2. 第五章:用Python分析商品退单数据并找出异常商品
  3. uniapp 展示表格并且前端实现分页
  4. Spark REPL
  5. SEM竞价推广如何提升流量精准度,增加展现、排名、线索量?
  6. Docker系列之八:在Dockerfile中使用多段构建Muti-stage build
  7. android app 短信接收,Android创建简单发送和接收短信应用
  8. 2021-10-28项目集管理PgMP:刷新项目管理思维与架构︱项目管理者联盟联合创始人宣晓锋
  9. java 代码箭头代表什么_箭头运算符' - '在Java中做什么?
  10. windows下安装使用Nide