蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

news/2024/5/2 23:50:42/文章来源:https://blog.csdn.net/qq_43323677/article/details/137581705

        综合查阅了网络上目前能找到的所有关于此技能的代码,最终找到了下述方式比较可靠,且可以自定义任意显示的数值。

        传统采用延时函数的方式实现动态数码管扫描,在题目变复杂时效果总是会不佳,因此在省赛中有必要尝试采用定时计数器中断去刷新数码管,从而摒弃延时函数方式。

1. 代码目的

        采用定时计数器刷新数码管,通过S7按键进行数码管窗口切换,按下松开时有效

        窗口1:显示1 1 1 1 1 1 1 1  , (最后一位间隔0.5s亮灭)

        窗口2:显示_ _ _ _ _ _ 2 2  , ( _表示熄灭 )

2. 刷新思路

        查阅大佬博客,大佬说只要8个数码管刷新总时间不超过10ms,效果就很好。但是我在实际测试中发现,根据程序大小的不同,中断服务函数内的程序大小不同,实际刷新每一位的数码管的最佳间隔时间,会发生明显的变化。

经过测试,刷新时间基本可以这样设置:

        初始化函数要以50us产生一次中断最佳,方便后期调整

        在程序体量小的时候,可以在40次50us的中断才刷新一次数码管。但是当程序变复杂时,20次都不够。因此我们在第几次中断进行刷新的参数设置可以在2~40之间设置。本程序中,设置为20效果极佳:

        最后,我们的中断服务函数中,一定要短!刷新数码管会导致中断服务函数响应时间过长,因此必须要将无需立即处理的数据放到中断外面处理。不然程序会出问题。

        因此我们可以用定时中断,每到50us产生一次中断,然后去刷新数码管的一位

        在中断服务函数中设定刷新第几位的变量flash_count自增,当增加到最大显示个数时清零

        在数码管刷新函数SMG_flash()中用switch语句判断flash_count的值,从而去刷新对应的某位。

3. 代码参考

#include <reg52.h>
#include <intrins.h>
#include <absacc.h>sbit AUXR = 0x8e;
sbit S7 = P3^0;unsigned char code duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};void SMG_flash ();void state_SMG ( unsigned char pos_SMG , unsigned char value_SMG )
{XBYTE[0xe000] = 0xff;XBYTE[0xc000] = 0x01 << pos_SMG;XBYTE[0xe000] = value_SMG;
}void state_SMG_all ( unsigned char value_SMG_all )
{XBYTE[0xc000] = 0xff;XBYTE[0xe000] = value_SMG_all;
}	void init_sys ()
{XBYTE[0x8000] = 0xff;XBYTE[0xa000] = 0x00;state_SMG_all ( 0xff );
}void init_timer0 (void)		//50微秒@11.0592MHz,定时器0
{AUXR &= 0x7F;		//定时器时钟12T模式TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x02;		//设置定时器模式TL0 = 0xD2;		//设置定时初值TH0 = 0xD2;		//设置定时重载值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时EA = 1;ET0 = 1;
}unsigned char flash_count = 0;
unsigned char count_50us = 0;
unsigned char count_5ms = 0;
bit SMG_flag = 0 ;	//窗口切换标志
bit SMG_stop = 0;	//数码管间隔0.5s亮灭标志
void timer0_service () interrupt 1
{count_50us ++;if ( count_50us % 20 == 0 ){if ( SMG_flag == 0 ){if ( ++flash_count == 8 ){flash_count = 0;}}else if ( SMG_flag == 1 ){if ( ++flash_count > 1 ){flash_count = 0;}}SMG_flash ();}}void valuerunning ()
{if ( count_50us == 200 ){if ( ++count_5ms == 50 ){count_50us = 0;SMG_stop = ~SMG_stop;}}	}void Delay2ms()		//@11.0592MHz
{unsigned char i, j;_nop_();_nop_();i = 22;j = 128;do{while (--j);} while (--i);
}void keyrunning ()
{if ( S7 == 0 ){Delay2ms();if ( S7 == 0 ){while ( S7 == 0 );SMG_flag = ~SMG_flag;}}
}void SMG_flash ()
{state_SMG_all ( 0xff );if ( SMG_flag == 0 ){switch ( flash_count ){case 0:				state_SMG ( 0 , duanma[1] );break;case 1:				state_SMG ( 1 , duanma[1] );break;case 2:				state_SMG ( 2 , duanma[1] );break;case 3:				state_SMG ( 3 , duanma[1] );break;case 4:				state_SMG ( 4 , duanma[1] );break;case 5:				state_SMG ( 5 , duanma[1] );break;case 6:				state_SMG ( 6 , duanma[1] );break;case 7:	if ( SMG_stop == 0 ){state_SMG ( 7 , duanma[1] );}else{state_SMG ( 7 , 0xff );}break;}}else if ( SMG_flag == 1 ){switch ( flash_count ){case 0:				state_SMG ( 6 , duanma[2] );break;case 1:				state_SMG ( 7 , duanma[2] );break;}}}void main ()
{init_sys();init_timer0 ();while ( 1 ){keyrunning ();valuerunning ();}
}

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

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

相关文章

洪水预警:如何通过数据可视化提前应对灾害

数据可视化在应对洪涝灾害问题中发挥着重要作用。洪涝灾害是一种常见而严重的自然灾害&#xff0c;给人们的生命、财产和生活带来了巨大的威胁和损失。而数据可视化技术通过将海量的数据转化为直观、易懂的图表、图像或地图等形式&#xff0c;帮助人们更好地理解洪涝灾害的发生…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换&#xff0c;包括YUV444 颜色编码格式 转为 RGB 格式 &#xff0c;RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV …

数据结构——线性表(顺序存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

电能质量问题有几类?再怎样进行谐波治理

一、为什么要进行电能质量的治理 电能质量是指电力系统中电能的质量。理想的电能应该是完美对称的正弦波。一些因素会使波形偏离对称正弦&#xff0c;由此便产生了电能质量问题。一方面我们研究存在哪些影响因素会导致电能质量问题&#xff0c;一方面我们研究这些因素会导致哪…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络&#xff0c;可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例&#xff0c;它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络&#xff1a; 首先&#xff0c;确保你已经安装了 Node.js 和 Electron。 然后&am…

linux 搭建Samba服务

Samba简介 SAMBA是⼀个实现不同操作系统之间⽂件共享和打印机共享的⼀种SMB协议的免费软件&#xff0c; SMB(Server Message block)协议是window下所使⽤的⽂件共享协议&#xff0c;我们在linux系统或 者其类unix系统当中可以通过samba服务来实现SMB功能。 &#xff08;1&…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定,

无法从该网站添加应用、扩展程序和用户脚本确定 chrome google浏览器添加插件扩展失败怎么办&#xff0c;无法从该网站添加应用、扩展程序和用户脚本确定&#xff0c; 需要打开调试模式 chrome://extensions/

NzN的数据结构--选择排序

接上文&#xff0c;本章我们来介绍选择排序。先三连后看才是好习惯~~~ 目录 一、基本思想 二、直接选择排序 三、堆排序 一、基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待…

Burp Suite Professional 2024.3.1 for macOS x64 ARM64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2024.3.1 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接&#xff1a;Burp Suite Professional 2024.3.1 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件&#xff0c;查看最新版。原…

[机器学习Day 1~3

[机器学习]Day 1~3 数据预处理第1步&#xff1a;导入库第2步&#xff1a;导入数据集第3步&#xff1a;处理丢失数据第4步&#xff1a;解析分类数据创建虚拟变量 第5步&#xff1a;拆分数据集为训练集合和测试集合第6步&#xff1a;特征量化 简单线性回归模型第一步&#xff1a;…

Echarts-实现地图并轮播地图信息

目录 ./map-geojson/jinhua.json./CenterMap.vue./center.vue 使用地图组件效果 ./map-geojson/jinhua.json {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":330…

redis过期监听机制

转自&#xff1a;https://www.cnblogs.com/wangyunhong/articles/16505079.html 1.redis配置 1.打开conf/redis.conf 文件&#xff0c;取消注释&#xff1a;notify-keyspace-events Ex 2.重启redis 3.如果设置了密码需要重置密码&#xff1a;config set requirepass **** 3…

uniapp小程序中使用video视频播放卡顿

问题:在使用uniapp小程序的video视频播放,视频已经在播放了,但是进度条没走,还是卡顿的状态(测试ios能正常使用,安卓手机会出现此问题) 在网上找了很多方法,最多的说是用:custom-cache"false",试了并没有效果,看来和我问题不一样,后来用了个简单粗暴的方法,发现是有效…

前端三剑客 —— JavaScript (第四节)

目录 内容回顾&#xff1a; 函数 *** 什么是函数 函数定义 函数调用 函数使用示例 匿名函数 无参函数 箭头函数 1、无参无返回值 2、无参有返回值 3、无参有返值&#xff0c;但函数体只有一条语句&#xff0c;则大括号可以省略&#xff0c; return 语句可以省略 4…

零售EDI:Princess Auto EDI对接

Princess Auto 是一家加拿大零售连锁店&#xff0c;专门从事农场、工业、车库、液压和剩余物品的销售。 Princess Auto 总部位于马尼托巴省温尼伯&#xff0c;截至 2024 年 1 月在 10 个省份拥有并经营 55 家商店以及三个配送中心。各种商品均以其“Powerfist”和“Pro.Point”…

【3GPP】【核心网】【5G-A】5G-A三载波聚合介绍

1. 欢迎大家订阅和关注&#xff0c;3GPP通信协议精讲&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 目录 1. 5G-A概念 2. 什么是3CC 3. 3CC的技术看点 4. 3CC的应用场景 5. 3CC支持的终端 1. 5G-A概念 5G-A全称5G…

Unity核心学习

目录 认识模型的制作流程模型的制作过程 2D相关图片导入设置图片导入概述纹理类型设置纹理形状设置纹理高级设置纹理平铺拉伸设置纹理平台打包相关设置 SpriteSprite Editor——Single图片编辑Sprite Editor——Multiple图片编辑Sprite Editor——Polygon图片编辑SpriteRendere…

深度解析SPARK的基本概念

关联阅读博客文章&#xff1a; 深入理解MapReduce&#xff1a;从Map到Reduce的工作原理解析 引言&#xff1a; 在当今大数据时代&#xff0c;数据处理和分析成为了企业发展的重要驱动力。Apache Spark作为一个快速、通用的大数据处理引擎&#xff0c;受到了广泛的关注和应用。…