蓝桥杯单片机开发板的数码管的消影

本文探讨了数码管显示中的鬼影现象,并分析了其产生的原因。通过对比不同的信号开启顺序,阐述了如何通过合理的控制时序来消除鬼影效应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

目录

 最初认识:

分析:

 解决方法:


 最初认识:

        当用定时器定时刷新数码管时,为保证有一定的亮度,所以是不会使用延时函数。动态刷新数码管利用的是人的视觉暂留,人的视觉暂留是0.1-0.4s左右,而我在数码管动态定时刷新一般是设置成1ms或者是2ms刷新一次,由于我试过了5ms去刷新,结果效果非常不好。

分析:

为什么会存在“鬼影”?

我的解决启发来源于

6.5 单片机数码管显示消隐_seven-soft的博客-优快云博客_数码管显示消隐

再结合这块蓝桥杯单片机的开发板来分析并解决:

先说鬼影的表现形式:

如果是先开段选后开位选,就会在显示的数字之前存在被显示数字的影子。

如果是先开位选后开段选,就会在显示的数字之后存在被显示数字的影子。

 以先开段选信号再开位选信号为例:

        你开了段选,再开位选,你段选的信号被送进来了,由于是动态刷新,位选信息还是上一根数码管的位选,而位选的某一个位从0变为1还是从1变为0,存在一个瞬态,段选信号来了,而位选信号还保留之前的状态(方便理解,可以认为是脉冲的上升沿或者是下降沿被滞后了,延迟了一段时间,在波形仿真中就可以看到),尽管时间短暂,但也是存在这短时间,而正是由于存在这极其短暂的时间使得存在“鬼影”(暗却存在),如果是白天你是看不到的,但是当你用手去遮着光就可以看到了,晚上就更加明显了,故称为“鬼影”。

    同理,先开位选再开段选在被显示数字之后存在影子就明晰了,附上图片:

 

 解决方法:

既然存在一个瞬态,那就屏蔽这个瞬态,(让这个瞬态对我不产生任何影响),在先开段选后开位选之前,让上一个位选信号对我没有影响(不选中任何数码管),所以就应该是先

位选不选择任何数码管(消除影子)->再段选->再位选

或者是

先段选不选中数码管的任何段->再位选->再段选

### 蓝桥杯竞赛中数码管隐问题的解决方案 在蓝桥杯竞赛以及实际单片机开发过程中,数码管显示中的鬼影问题是常见的挑战之一。为了有效解决这一问题并实现清晰稳定的显示效果,采用了一种基于定时器中断服务程序的方法来优化数码管刷新算法[^1]。 #### 定时器驱动机制与刷新频率调整 具体而言,在STC15F2K61S2单片机上实施了特定策略: - **定时器配置**:设置合适的定时时间间隔(通常为2到12毫秒),以便定期触发中断处理函数。 - **动态扫描技术**:每次进入中断后,依次点亮各个位上的数码管,并快速切换至下一个位置,给人眼造成持续发光的效果。这种做法不仅能够消除因长时间静态显示而产生的残像,还能显著提升整体视觉体验的质量[^3]。 ```c void Timer0_ISR(void) interrupt 1 { static unsigned char count = 0; TH0 = (65536 - 50000) / 256; // 设置重装载值,假设系统晶振为12MHz TL0 = (65536 - 50000) % 256; P2 = digit[count]; // 输出当前要显示的数据给P2口连接的数码管 bit_select(count); // 控制哪一位选通 if (++count >= DIGIT_NUM) { // 如果已经遍历完所有位,则重新开始循环 count = 0; } } ``` 上述代码片段展示了如何利用定时器溢出来周期性调用`Timer0_ISR()`函数完成对多个7段数码显示器的同时更新操作。其中`bit_select()`负责指定哪一个数码管被激活;而数组`digit[]`存储着每一位所需呈现的具体数值。 #### 集成LED控制逻辑 除了改善数码管本身的性能外,还需考虑与其他外围设备如LED灯条间的协作关系。为此引入了一个巧妙的设计——在同一套框架内兼顾两者的工作模式转换需求。当检测到来自外部按键或其他事件源发出的操作指令时,可以灵活地在这两种状态间无缝切换而不响彼此正常运作。 ```c if (key_scan() == KEY_LED_MODE) { mode_flag ^= LED_MODE; // 切换工作模式标志位 } // 根据mode_flag决定执行何种任务... if (mode_flag & LED_MODE) { led_display(); } else { seven_segment_refresh(); } ``` 这段伪代码说明了通过监听键盘输入改变系统的运行方式,从而达到分别管理不同类型的输出装置的目的。每当按下预设好的键之后就会触发表达式的异或运算进而翻转对应的二进制开关变量的状态,最终使得后续流程依据最新设定展开行动。 综上所述,通过对定时器参数精细调节配合高效的多路复用手段,再加上合理的软件架构设计,可以在很大程度上克服传统方法中存在的诸多弊端,提供更加稳定可靠的硬件接口支持。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值