单片机原理及应用:数码管的动态扫描显示、余晖效应与消影

动态显示

动态显示是一种一位一位地轮流点亮各位数码管的显示方式。 当数码管显示位数较多时,静态显示所占的I/O口多 ,这时常采用动态显示。为节省I/O口,通常将所有显示器段码线相应段并联在一起,由一个8位I/O口控制,称为“段选”;各显示位公共端分别由另一单独I/O口线控制,称为“位选”。在某一时段只选中一位数码管的位选端并送出相应的字型编码,在下一时段按顺序选通另外 一位数码管,并送出相应的字型编码。依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符,这一过程称为动态扫描显示。
我们在进行动态显示时,可以通过调整单片机的延时函数,来让数字顺序出现或同时出现。
下面用8只数码管滚动显示的案例来说明动态显示的效果。
#include<reg52.h>
#include<intrins.h>		//要用到库函数,先调包
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};              		                           //共阳数码管段码表
void  delay(uint t)				//可自定义延时函数,调用时给t赋值即可
{								//延时倍率是t乘200uchar i;while(t--) for(i=0;i<200;i++);
}//从左到右点亮数码管void  main()
{	uchar j=0x80;		    //最左位赋值1while(1){	uchar i;for(i=0;i<8;i++){	   j=_crol_(j,1);	//库函数左移//j=_cror_(j,1);		//库函数右移P0=dis_code[i];	//P0口输出段码P2=j;			//P2口输出位码delay(180);		//数码管顺序显示//delay(2);		//数码管同时显示//P0 = 0xff;		//数码管全灭消影}}
}/*	 //从右往左倒数void  main()
{	uchar j=0x01;		    //最左位开始点亮while(1){	uchar i;for(i=0;i<8;i++){	   j=_cror_(j,1);		//库函数右移P0=dis_code[7-i];	//要注意数组索引从0开始,所以要用7-iP2=j;			delay(180);		}}
} */ 
这次编写代码也犯了个啼笑皆非的错误,贴出来让大伙笑一笑引以为戒。
结果我编译了好多次都没通过,实际上看到完整的电路图大家就明白了,我赋值的0x80,这个1在最左端,实际上是一组端口的第8个引脚,之前流水灯展示的时候都是把第一个引脚对应的LED放在最右侧,所以才有的从右到左流水灯,现在引脚的“左右”和数码管排列的左右正好相反,自然左移位码就达到了右移点亮数码管的效果了。希望我的错误能给大家一个提醒,在写代码和做仿真的时候一定要认真仔细,不然就会弄巧成拙。

看到这里可能有小伙伴要问了,这样来看数码管的原理和流水灯也没什么不同,怎么样才能让数字同时出现呢。这就要用到我们人眼的余晖效应了。

余晖效应

余晖效应,即视觉暂留现象,是当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1-0.4秒左右图像的情况。原因是眼睛依靠晶状体成像,感光细胞感光,并且将光信号转换为神经电流,传回大脑引起人体视觉,而感光细胞的感光需要感光色素,感光色素的形成消耗一定时间,这就形成了视觉暂留的机理。

从效果图上可以看到,数码管的点亮速度甚至超过了计算机截屏的速度,以至于截图也呈现出视觉暂留现象。

#include <reg52.h>
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C};//段码,共阴极真值表
unsigned char code Col[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};  //位码,类似于点亮流水灯
void Delay()
{unsigned char i;for(i=0;i<250;i++);   //第二类延时函数
}void main()                
{unsigned char j;while(1){for(j=1;j<7;j++)	  //段码位码都采用数组法,要注意j初值1{P0=Tab[j];          //段选j,因为不显示0P1=Col[j-1];        //位选j-1Delay();P1=0xff;               //关位选,防止出现鬼影//P0=0;				 //关掉段选也可以,给低电平,}}
}

这里出现了第2类延时函数,单独的一个for循环,数量级为百,即0.1ms,用前面代码中提到的自定义延时函数也可以,传入个位数参数即可。相较于前面的移位符,数组法明显没有那么复杂。效果如图所示:

消影 

“影”指的是当切换一个数码管的数字时,由于数码管刷新频率有限,液晶分子需要一定的时间来重新排列,这可能会导致前一个数码管数字的残影留在屏幕上。我们可以通过切断段选或位选的方式来消除残影。

代码如图所示

两种方法采取一种即可,但要注意是共阴极接法还是共阳极,有可能一不小心把数码管全都打开了。

视频演示

数码管动态显示循环点亮和视觉暂留

以上就是本篇文章的全部内容了,感谢观看。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311346.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

45、激活函数 - 为什么非线性这么重要

这一节开始讲一讲神经网络中的激活函数,在讲激活函数之前,先讲一下非线性。 看一个基础知识:线性函数的叠加,我们初中学过的知识点。 假设有一个线性函数,y = kx + b, 这个函数画出来是下面的样子,这里显示 y 和 x 是线性关系。 而如果这个时候又有一个线性关系 z = hy…

C#-CSC编译环境搭建

一.Microsoft .NET Framework 确保系统中安装Microsoft .NET Framework相关版本下载 .NET Framework 4.7 | 免费官方下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net47 二.编译环境搭建 已经集成编译工具csc.exe,归档至gitcode,实现us…

trino-435: 理论基础

一、trino介绍 Trino是⼀种⽀持使⽤ SQL 访问任意数据源的 开源的分布式SQL 查询引擎&#xff0c;其能够提供更加灵活与⾼效的查询服务。为不同的异构数据源提供统⼀的sql访问&#xff0c;并⽀持联邦查询和并⾏查询。 应⽤场景 Trino是定位在数据仓库和数据分析业务的分布式S…

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的Firefly的AIO-3399J开发板的DTS配置单前置摄像头ov13850 2023/12/28 12:30 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBr…

从0到1入门C++编程——01 C++基础知识

文章目录 一、工具安装二、新建项目三、设置字体、注释、行号四、C基础知识1.数据类型2.输入输出3.运算符4.选择、循环结构5.跳转语句6.数组7.函数8.指针9.结构体 一、工具安装 学习C使用到的工具是Visual Studio&#xff0c;Visual Studio 2010旗舰版下载链接&#xff1a;点此…

【实用工具】Gradio快速部署深度学习应用1:图像分类

前言 在AI快速发展的今天&#xff0c;我们作为算法开发人员&#xff0c;也应该有一些趁手的工具帮助我们快速开发并验证自己的想法&#xff0c;Gradio可以实现快速搭建和共享的功能&#xff0c;能够展示出一个前端界面&#xff0c;把我们的算法包裹起来&#xff0c;快速验证算…

七、Redis 缓存 —— 超详细操作演示!

七、Redis 缓存 —— 超详细操作演示&#xff01; 七、Redis 缓存7.1 Jedis 客户端7.1.1 Jedis 简介7.1.2 创建工程7.1.3 使用 Jedis 实例7.1.4 使用 JedisPool7.1.5 使用 JedisPooled7.1.6 连接 Sentinel 高可用集群7.1.7 连接分布式系统7.1.8 操作事务 7.2 金融产品交易平台7…

2022.07.25 C++下使用opencv部署yolov7模型(五)

0.写在最前 此篇文字针对yolov7-1.0版本。 最近粗略的看了一遍yolov7的论文&#xff0c;关于yolov7和其他yolo系列的对比&#xff0c;咱就不多说了&#xff0c;大佬们的文章很多很详细。关于opencv部署方面&#xff0c;其实yolov7和yolov5的初期版本&#xff08;5.0以前的版本…

多维时序 | MATLAB实现SSA-CNN-GRU-SAM-Attention麻雀算法优化卷积网络结合门控循环单元网络融合空间注意力机制多变量时间序列预测

多维时序 | MATLAB实现SSA-CNN-GRU-SAM-Attention麻雀算法优化卷积网络结合门控循环单元网络融合空间注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-CNN-GRU-SAM-Attention麻雀算法优化卷积网络结合门控循环单元网络融合空间注意力机制多变量时间序列预测预测效…

费曼学习法应用:谈自私和教育的引导

今天这个还是来源于我和九迁的对话&#xff0c;起因是中午吃饭的时候&#xff0c;九迁在学校与班主任老师和数学老师对话中带来的思考。 先听音频&#xff1a; 对话内容&#xff08;以下内容可以边听边看&#xff0c;属于语音转换过来的文字&#xff0c;最后有个总结&#xff0…

【Java进阶篇】SimpleDateFormat是线程安全的吗? 使用时应该注意什么?

SimpleDateFormat是线程安全的吗?使用时应该注意什么? ✔️ 典型解析✔️拓展知识仓✔️SimpleDateFormat用法✔️日期和时间模式表达方法✔️输出不同时区的时间✔️SimpleDateFormat线程安全性✔️问题重现✔️线程不安全原因✔️如何解决✔️使用局部变量✔️加同步锁✔️…

HTML标签基础入门

HTML 基本语法概述标签关系HTML基础结构HTML常用标签标题标签示例 段落和换行标签示例 文本格式化标签示例 div和span标签示例 图像标签和路径示例 超链接标签示例 注释 ctrl/特殊字符示例 表格标签 表头单元格标签表格属性示例 合并单元格示例 列表标签无序列表有序列表自定义…