一、前言

本实验是通过使用STM32F103C8T6作为主控,八段数码(共阴极)是通过74HC245双向缓冲器控制数段选,74HC138译码器控制位选。每个数码管显示与位号相对应的数字,本文章是使用库函数进行编程。

二、概述

(一)74HC245双向缓冲器

1、概述

74HC245是一种兼容TTL器件引脚的高速CMOS总线收发器,典型CMOS型三态缓冲门电路,八路信号收发器。由于单片机或CPU的数据、地址、控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般加驱动器。主要应用于大屏显示,以及其它的消费类电子产品中增加驱动。

2、引脚定义及说明

引脚图:

(二)74HC138译码器

1、概述

74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受3位二进制加权地址输入(A0,A1,A2),并当使能时,提供8登上互斥低有效输出(Y0-Y7).

2、引脚定义

引脚图:

三、硬件连接

四、程序

1、初始化函数

void Init_74HC138_Pin(void)
{GPIO_InitTypeDef GPIO_InitStructure;//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
}

74HC245的引脚初始化函数及显示请参考单个数码管动态显示(STM32F103C8T6)_Me-Space的博客-CSDN博客

2、控制位选函数

方法一:使用switch case语句

int Control_Tube_Display(u8 num)
{if (num > 7)return -1;  switch (num) {case 0:GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);GPIO_WriteBit(GPIOA,GPIO_Pin_1,0);GPIO_WriteBit(GPIOA,GPIO_Pin_2,0);break;case 1:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);GPIO_WriteBit(GPIOA,GPIO_Pin_1,0);GPIO_WriteBit(GPIOA,GPIO_Pin_2,0);break;case 2:GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);GPIO_WriteBit(GPIOA,GPIO_Pin_1,1);GPIO_WriteBit(GPIOA,GPIO_Pin_2,0);break;case 3:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);GPIO_WriteBit(GPIOA,GPIO_Pin_1,1);GPIO_WriteBit(GPIOA,GPIO_Pin_2,0);break;case 4:GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);GPIO_WriteBit(GPIOA,GPIO_Pin_1,0);GPIO_WriteBit(GPIOA,GPIO_Pin_2,1);break;case 5:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);GPIO_WriteBit(GPIOA,GPIO_Pin_1,0);GPIO_WriteBit(GPIOA,GPIO_Pin_2,1);break;case 6:GPIO_WriteBit(GPIOA,GPIO_Pin_0,0);GPIO_WriteBit(GPIOA,GPIO_Pin_1,1);GPIO_WriteBit(GPIOA,GPIO_Pin_2,1);break;case 7:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);GPIO_WriteBit(GPIOA,GPIO_Pin_1,1);GPIO_WriteBit(GPIOA,GPIO_Pin_2,1);break;}return 0;
}

方法二:转换成二进制,设置引脚输出状态

int Control_Tube_Display(u8 num)
{u8 bit[5] = {0};u8 i = 0;if (num > 7)return -1;   while (num > 0) {bit[i] = num % 2;i++;num  = num / 2;}GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)bit[0]);GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)bit[1]);GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)bit[2]);return 0;
}

3、主函数


int main(void)
{int i = 0;Init_74HC138_Pin();Digital_Tube_Pin_Init();Sys_Delay_Init();//Usart1_Pin_Init(115200);//printf("初始化成功\r\n");while(1){for (i = 0; i < 8;i++) {Control_Tube_Display(i);Digital_Tube_Display(GPIOB,dynamic_code[i]);delay_ms(2);}
}

五、实验效果

相关资料及程序,有需要请自行下载

网盘链接:

链接:https://pan.baidu.com/s/1UnhaupD4idJO5usCl7Cztw 
        提取码:j0ys

如有什么问题欢迎指出来,有什么模块可以联系博主,博主会查询资料分享出来。

动态数码管显示(STM32F103C8T)相关推荐

  1. 51单片机入门——动态数码管显示详解

    51单片机:动态数码管显示 - 模块图 - 显示原理 – 消抖 静态数码管技术 + 人眼视觉停留 显示原理类似于以前的 胶片机放影视,也就是只要我切换的速度足够快你就看不出来其实我是一次次显示的(滑稽 ...

  2. 单片机原理与应用技术(三)———动态数码管显示汇编语言

    一.数码管基础知识 1.数码管结构 一般数码管通常由八段LED灯组成,又分成共阳数码管和共阴数码管(如下图所示).共阴极数码管即为LED阴极连接在一起为公共阴极,共阳极数码光即为LED阳极连接在一起为 ...

  3. 51单片机静态动态数码管显示

    51单片机静态动态数码管显示 通过此实训了解动态数码管的显示原理,掌握编码方法.共阴极和其阴极数码管的不同之处及常用设计方法. 实训设备 这里使用的377锁存器模块控制的数码管下面就是电路图 显示内容 ...

  4. 51单片机_动态数码管显示

    动态数码管显示(延时函数) 编程原理 利用延迟函数,每秒钟数码管加1显示,一直加到250.延时函数精度不高,最好使用定时器中断. 数码管动态显示原理 动态数码管显示有段选和位选.段选是单个数码管显示的 ...

  5. Proteus:单片机动态数码管显示“HELLO”模拟

    题目概述: 单片机动态数码管显示"HELLO". 编程: #include <reg51.h> #define uchar unsigned char #define ...

  6. 单片机C51(STC89C52RC)实现静态、动态数码管显示

    目录 1.138译码器原理 2.数码管显示原理 3.静态数码管显示 4.动态数码管显示 5.总结 1.138译码器原理 C B A Y Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 0 0 0 0 ...

  7. 51单片机动态数码管显示自己学号

    实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...

  8. 单片机入门——动态数码管显示

    前言 在实际应用中通常都需要显示多位数值,如果采用静态数码管显示就不够好,因此就需要采用另外一种显示方式,即数码管动态显示.开发板上板载2 个四位一体的共阴数码管,接下来我们就来介绍下如何使用51 单 ...

  9. 51单片机 动态数码管显示

    本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...

  10. 8位数码管矩阵键盘c语言程序,BASCOM-8051 动态数码管显示与矩阵键盘处理程序例子...

    动态数码管段接P0口 静态数码管段接P1口 矩阵键盘接P3口 3线-8线译码器:A= P2.2,B= P2.3,C= P2.4 程序运行时,按5号键开始计数,其他键停止 '动态数码管显示与矩阵键盘处理 ...

最新文章

  1. echarts X轴 或者 Y轴 添加标识线
  2. 卷积神经网络数学原理解析
  3. 文件服务器:共享文件夹的移动和权限设置备份2012-04-28
  4. MATLAB小波工具箱
  5. CCNA题库关于Frame-relay看图答题的解答
  6. mac电脑开机键盘和鼠标失灵
  7. php select socket
  8. 攻击防护手段_如何防护ddos流量攻击?
  9. HTTP2和HTTPS来不来了解一下?
  10. python执行一段代码_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...
  11. java json float_java – Json解析问题(值自动更改为float)
  12. 《JavaScript启示录》——1.7 原始值(或简单值)
  13. android 文本分页显示,Android查看带有列表视图的分页器并动态添加文本
  14. (转)关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。...
  15. 测试人员必会用例设计方法 —— 正交表
  16. python进行列联表卡方检验
  17. XVII Open Cup Eastern Grand Prix - J Votter and Paul De Mort
  18. 知识表示的方法(1)——产生式表示法
  19. SAS2x28扩展卡
  20. 算法:五笔编码,如何根据输入的词条自动生成输入编码

热门文章

  1. IP反向追踪技术综述
  2. Python 用六种方法实现 n 的阶乘
  3. Python实现股票数据分析的可视化
  4. myelicpes2019初次使用设置_实况足球2019(PES2019)全图文攻略官方操作指南
  5. ubuntu系统修改用户权限
  6. Java字符缓冲区BufferedWriter和BufferedReader详解
  7. 第九章:连接数据库(learning julia 译)
  8. 生活片段(5)我所见过的母亲4
  9. JVM——垃圾收集器
  10. matplotlib中subplot的用法