51单片机——动态数码管实验,小白讲解,相互学习
多位数码管介绍:
多位数码管,即两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时,他们内部的公共端是独立的,二负责显示什么数字的段线(a-dp)全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。
一般一位数码管有 10 个引脚, 二位数码管也是 10 个引脚, 四位数码管是 12 个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办 法就是用数字万用表测量,若没有数字万用表也可用 5V 直流电源串接 1k 电阻后 测量,将测量结果记录,通过统计便可绘制出引脚标号。多位数码管有许多是按 一定要求设计的,引脚不完全按照一般规则设定,所以需要在使用时查找手册,最直接的办法就是按照数码管上的标示向生产商要求。
数码管显示原理:
多位数码管依然可以静态显示,但是显示时要么只显示一位数码管,要么多 位同时显示相同内容。当多位数码管应用于某一系统时,它们的“位选”是可独 立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码 管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因 为它们的段选是连接在一起的,送入所有数码管的段选信号都是相同的,所以它 们显示的数字必定一样,数码管的这种显示方法叫做静态显示。而动态显示,就是利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。比如在第一次选中第一位数码管时,给段选数据 0,下一次位选中第二位数码管时显示 1。为了在显示 1 的时候,0 不会消失(当然实际上是消失了),必须在人肉眼观察不到的时间里再次点亮第一次点亮的 0。而这时就需要记住,人的肉眼正常情况下只能分辨变化超过 24ms 间隔的运动。也就是说,在下一次点亮 0 这个数字的时间差不得大于 24ms。这时就会发现,数码管点亮是在向右或者向左一位一位点亮,形成了动态效果。如果把间隔时间改长就能直接展现这一现象。
通过前面内容的介绍我们知道,要使单片机能控制开发板上 2 位一体的共阴 数码管显示,仅靠单片机 IO 口来驱动是不行的,这里就需要增加外部驱动芯片, 开发板上使用的是 74HC245 芯片。2 个 4 位一体的共阴数码管的位选线有 8 根, 直接让单片机 IO 口控制是没有任何问题的,但考虑到 51 单片机 IO 口资源的限制,通常我们会使用一种 IO 扩展芯片,比如74HC138,74HC164,74HC595 芯片 等,只需要很少的单片机 IO 口就可以扩展出 8 个控制口,通过级联式甚至可 扩展出更多的控制口(这个在后面 LED 点阵实验章节中会有详细介绍)。我们开 发板上使用的是 74HC138 译码器芯片,只需单片机 3 个 IO 口就可以实现 8 个位 选管脚的控制,节省了芯片的 IO 资源。
通常我们使用 74HC245 芯片用作驱动只会让其在一个方向输出,即 DIR 管脚 为高电平,传输方向是 A->B。
74HC138 芯片简单简介:详细看芯片中文资料
备注:L低电平 H高电平
软件设计
/**********************************************************************************
****
实验名称:动态数码管实验
接线说明:
实验现象:下载程序后“数码管模块”显示 01234567
注意事项:
***********************************************************************************
****/
#include "reg52.h"
typedef unsigned int u16;//对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//定义38译码器输入管脚,也是数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//共阴极数码管显示 0~F 的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*******************************************************************************
* 函 数 名 : delay_10us
* 函数功能 : 延时函数,ten_us=1 时,大约延时 10us
* 输 入 : ten_us
* 输 出 : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{while(ten_us--);
}
/*******************************************************************************
* 函 数 名 : smg_display
* 函数功能 : 动态数码管显示
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void smg_display(void)
{u8 i=0;for(i=0;i<8;i++){switch(i)//位选数据,i循环次数{//当i=0时候就进入这个case 0语句, LSC=1;LSB=1;LSA=1 就是111,换算十进制就是7,//就是Y7端输出是有效的,所以LED8数码管点亮case 0: LSC=1;LSB=1;LSA=1;break; //当i=0时候就进入这个case 0语句, LSC=1;LSB=1;LSA=0 就是110,换算十进制就是6,//就是Y6端输出是有效的,所以LED7数码管点亮,后面都是一样的原理case 1: LSC=1;LSB=1;LSA=0;break;case 2: LSC=1;LSB=0;LSA=1;break;case 3: LSC=1;LSB=0;LSA=0;break;case 4: LSC=0;LSB=1;LSA=1;break;case 5: LSC=0;LSB=1;LSA=0;break;case 6: LSC=0;LSB=0;LSA=1;break;case 7: LSC=0;LSB=0;LSA=0;break;}SMG_A_DP_PORT=gsmg_code[i];//传送段选数据delay_10us(100);//延时一段时间,等待显示稳定SMG_A_DP_PORT=0x00;//消隐,是为了消除上个数码管数据对下个数码管数据的影响}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{while(1){smg_display();}
}
51单片机——动态数码管实验,小白讲解,相互学习相关推荐
- 51单片机 | 动态数码管实验
文章目录 一.数码管介绍 1.多位数码管简介 2.数码管动态显示原理 二.74HC245和74HC138芯片介绍 1.74HC245 芯片简介 2.74HC138 芯片简介 三.硬件设计 四.软件设计 ...
- 51单片机动态数码管显示自己学号
实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018 在此原理图又分两种连接方式: 第一种是8位数码管接38译码器来减少端口使用. 第二种是,没有端口要求接好就可以那就是,把位 ...
- 51单片机动态数码管显示时间+protues仿真
项目场景: 纯小白 第一次写文章 写的不好请见谅 做51单片机数码管显示时间实验的时候protues 仿真出现了问题 问题描述 做51单片机数码管显示时间实验的时候protues 仿真出现了问题 仿真 ...
- 51单片机 动态数码管显示
本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上 1.首先将上一章节使用子函数方法的代码复制过来 将Nixie( , )移到下方while循 ...
- 3.6 51单片机-动态数码管
3.6 动态数码管 3.6.1 数码管原理图 图3-6-1 图3-6-2 注意:使用排线连接时,排线有金属触点的一片必须朝右
- 51单片机动态数码管显示
1.数码管介绍 LED数码管:数码管是一种简单.廉价的显示器,是由多个发光二极管封装在一起组成"8"字型的器件 2.位选 选第几位显示,G1,G2A,G2B为使能端,有效就工作.图 ...
- 51单片机八位数码管1到F动态滚动显示仿真及程序
51单片机八位数码管1到F动态滚动显示仿真及程序 动态滚动显示仿真及程序 #include<reg51.h> #define uchar unsigned char #define uin ...
- 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真
51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...
- 51单片机实现数码管显示小数
51单片机实现数码管显示小数 要求 1 Proteus 面向编程的模型搭建 2 代码实现 2.1. 实现数码管刷新 2.2 对小数进行分解的函数 3 测试用例 4 仿真结果 要求 要求1:根据整数部分 ...
最新文章
- 搞机器学习,Python和R哪个更合适?
- git reset和git revert
- mysql5.6cmd中代码_Mysql5.6.22源代码安装
- 【机器学习】机器学习中缺失值处理方法大全(附代码)
- Spark RDD创建操作
- java在acm中的一些应用
- pp助手苹果版_再见!PP助手iOS端即将下线 曾是中国最大的苹果助手
- 人生总是起起落落落落落落...
- 中兴通讯、江苏联通联合成立5G消息开放实验室
- tensorflow之add_n
- fiddler软件抓包工具超详细配置方法
- for(atuo x : s)
- python获取页面隐藏元素_python之selenium操作隐藏元素
- DDD(Domain-Driven Design)领域驱动架构介绍
- 什么是微波信号发生器
- __参加华为新员工培训有感
- [ 操作系统 ] 假定在单CPU条件下有下列要执行的作业,用一个执行时间图描述在采用非抢占优先级算法时执行这些作业的情况;对于上述算法,各个作业的周转时间是多少?平均周转时间是多少?
- 用JS做10以内的加法(带按钮)
- ORGANIZATION
- 新手入门WPF之TreeView控件(一)
热门文章
- AI图像大师(安卓)
- Gazebo导入SolidWorks模型
- 河南地矿“牵手”中原云大数据 共建“地矿云”大数据平台
- 百度收购YY,其实挺值得
- 微商朋友圈吸粉难?这样发朋友圈让你吸粉无数
- jmete察看结果树和body data乱码问题的解决办法
- 西工大计算机组成与系统结构实验,Mars4_5.jar 文件怎么使用,为什么我打不开吖?
- 活体检测——CelebA-Spoof
- Ubnt路由器使用WinSCP登录后直接就是root权限可操作任何文件
- Unity安卓如何调用小键盘对配置文件进行修改