蓝桥杯蜂鸣器和继电器你不知道的秘密
其实是我一直没有搞明白的一件事请:
问题描述,按键控制蜂鸣器和继电器。但是每当我打开蜂鸣器,继电器总会开,打开继电器,蜂鸣器总会响。蜂鸣器一响,脑子直接晕头转向。我把我的代码贴出来:
void buzz_dis()
{P0 |= 0x40;latch(5);
}void buzz_init()
{P0 &= 0xbf;latch(5);
}void jdq_init()
{P0 &= 0x7f;latch(5);
}void jdq_dis()
{P0 |= 0x10;latch(5);
}///蜂鸣器是P06口控制的,继电器是P04口控制的,我在这里其实也犯错误了,记录下来加深印象
大家有没有发现这个问题所在呢?
问题分析:为什么按位操作在这里不行了呢,既然不是引脚搞错了,那还有什么干扰了程序呢?我思来想去,看着这满满一屏幕的bug,突发奇想,可能是主函数里还有对P0口的操作,果然,我既有数码管显示操作P0还有led显示也操作P0。所以问题的根已经找到了。再细细思考一下,我又发现数码管对P0的操作影响真的有这么大吗?理论上是可能存在这种情况的,但是我这种情况是必然的呢?原来是我每次按键按下还要操作led。这一前一后对P0的操作才造成了这种情况。
问题解决:其实我们放弃按位操作这种方式就可以了。例如:
void buzz_dis()
{P0 = 0x40;latch(5);
}void buzz_init()
{P0 = 0;latch(5);
}void motor_init()
{P0 = 0;latch(5);
}void motor_dis()
{P0 = 0x10;latch(5);
}
我们直接对P0赋值,那么相当于每次赋值时还将其他口进行了初始化。但这种方法还有一点缺陷就是两个器件不能同时工作。其实我们还有解决办法,那就是增加一个中间变量,如下:
void buzz_dis()
{P0_buff |= 0x40;P0 = P0_buff;latch(5);
}void buzz_init()
{P0_buff &= 0xbf;P0 = P0_buff;latch(5);
}void jdq_init()
{P0_buff &= 0x7f;P0 = P0_buff;latch(5);
}void jdq_dis()
{P0_buff|= 0x10;P0 = P0_buff;latch(5);
}
这种方法就可以解决这个问题了。
事后反思:其实这个问题挺隐蔽的,如果是考试现场我的个人能力可能不足以让我解决。所以对我和大家都有警醒作用,即使再简单的模块,我们稍微不注意细节逻辑都有可能造成一个功能的缺失。写下这篇文章既为加深印象,也为和各位共勉!
感谢阅读,欢迎三连!!!!!!!
也欢迎观看我的B站主页:
宿管大爷211的个人空间_哔哩哔哩_bilibilihttps://space.bilibili.com/630519178?spm_id_from=333.1007.0.0希望大家多多三连!!!!!!!!!!!!!!!!!!!!!!!
蓝桥杯蜂鸣器和继电器你不知道的秘密相关推荐
- 蓝桥杯单片机关闭蜂鸣器、继电器LED及数码管
01关闭蜂鸣器.继电器LED及数码管: 蓝桥杯大赛CT107D 芯片模块基本知识 74138 3-8译码器 74573 锁存器 CT107D开发板上通过74138来控制74573的所存状态来实现扩展单 ...
- 蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动
此片文章用于记录蓝桥杯单片机的学习. LED 蜂鸣器 继电器 数码管 这些都是比赛时常用的外设,如下原理图: LED部分: 蜂鸣器和继电器部分(图中还有步进电机部分): 数码管部分: 可见,上述 ...
- 【蓝桥杯单片机】Led+蜂鸣器+继电器
实验开发板为CT107D蓝桥官方板,编译环境为MDK5 工程搭建 CT107D开发板初始化 点亮Led 位运算控制Led(小端CPU位运算需要从右向左看) 控制继电器及蜂鸣器 #include< ...
- 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器
蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...
- [蓝桥杯python] 秘密行动:小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层
[蓝桥杯python] 秘密行动 1.资源限制 2.输入格式 3.输出格式 4.样式输入及输出 5.代码及解析 大功告成!编写不易,大家成功后点个关注or赞谢谢~ 问题描述 小D接到一项任务,要求他 ...
- 蓝桥杯_嵌入式:蜂鸣器(库函数)
目录 一.原理图: 二.部分代码: 总结: 一.原理图: 图下是蜂鸣器使用的引脚 PB4 二.部分代码: 1.deep.h: #ifndef __DEEP_H #define __DEEP_H/* I ...
- 《蓝桥杯CT107D单片机竞赛板》:蜂鸣器模块
蜂鸣器模块 实验简介 实验原理图 实验原理 实验程序 关闭蜂鸣器与继电器 简易报警器原理 实验简介 采用软件方式,使得CT107D单片机竞赛板上的蜂鸣器和继电器分别不发声和不吸附. 实验原理图 实验原 ...
- 第jiu届蓝桥杯单片机省赛真题_第九届蓝桥杯单片机组省赛试题.pdf
第九届蓝桥杯单片机组省赛试题 "彩灯控制器"的程序设计与调试 (70 分) 一.基本要求 1.1 使用CT107D 单片机竞赛板,完成"彩灯控制器"功能的程序设 ...
- 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...
[蓝桥杯单片机01]从历年决赛真题中寻找单片机常见的考点 广东职业技术学院 欧浩源 [第三届:门禁系统] 1.功能简述 "门禁系统"主要有两种工作模式: 模式1:7:00-22: ...
最新文章
- RabbitMQ消息应答------ack机制
- linux 为什么有时用killall指令找不到要杀死的进程?(no process found)
- 2019年房贷利率会下调吗?
- 2016年计算机网考,2016年电大:计算机网考(全)练习题.doc
- 云视通存储怎么不是24小时_降压目标不是一次血压正常,而是24小时血压都要正常...
- .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署
- 手机号正则_一起刷题学习正则表达式
- Lenovo ServerGuide 10.4
- html按钮功能的实现原理,触摸按键原理是什么 触摸按键原理介绍【图文详解】...
- iOS12 捷径(热门推荐)
- 路径规划算法:Dijkstra
- 空气质量天气质量数据来源整理
- 安卓开发中的 “Android高手” ,需要具备哪些技术?
- 乐视2 pro2 IMAX手机root权限 刷rece 解锁 刷系统等
- Kali linux 学习笔记(四十一)Web渗透——扫描工具之w3af 2020.3.18
- pandas筛选数据_2_条件筛选
- HTML和PHP输出国际象棋,PHP实现国际象棋棋盘的样式效果(代码示例)
- JAVA开发(JAVA架构师成长之路)
- windows7微软官方_Microsoft Windows 7 | 第4部分
- 谷歌浏览器无限添加快捷方式