其实是我一直没有搞明白的一件事请:

问题描述,按键控制蜂鸣器和继电器。但是每当我打开蜂鸣器,继电器总会开,打开继电器,蜂鸣器总会响。蜂鸣器一响,脑子直接晕头转向。我把我的代码贴出来:

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希望大家多多三连!!!!!!!!!!!!!!!!!!!!!!!

蓝桥杯蜂鸣器和继电器你不知道的秘密相关推荐

  1. 蓝桥杯单片机关闭蜂鸣器、继电器LED及数码管

    01关闭蜂鸣器.继电器LED及数码管: 蓝桥杯大赛CT107D 芯片模块基本知识 74138 3-8译码器 74573 锁存器 CT107D开发板上通过74138来控制74573的所存状态来实现扩展单 ...

  2. 蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动

    此片文章用于记录蓝桥杯单片机的学习. LED 蜂鸣器 继电器 数码管 这些都是比赛时常用的外设,如下原理图:  LED部分:  蜂鸣器和继电器部分(图中还有步进电机部分):  数码管部分: 可见,上述 ...

  3. 【蓝桥杯单片机】Led+蜂鸣器+继电器

    实验开发板为CT107D蓝桥官方板,编译环境为MDK5  工程搭建 CT107D开发板初始化 点亮Led 位运算控制Led(小端CPU位运算需要从右向左看) 控制继电器及蜂鸣器 #include< ...

  4. 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器

    蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...

  5. [蓝桥杯python] 秘密行动:小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层

     [蓝桥杯python] 秘密行动 1.资源限制 2.输入格式 3.输出格式 4.样式输入及输出 5.代码及解析 大功告成!编写不易,大家成功后点个关注or赞谢谢~ 问题描述 小D接到一项任务,要求他 ...

  6. 蓝桥杯_嵌入式:蜂鸣器(库函数)

    目录 一.原理图: 二.部分代码: 总结: 一.原理图: 图下是蜂鸣器使用的引脚 PB4 二.部分代码: 1.deep.h: #ifndef __DEEP_H #define __DEEP_H/* I ...

  7. 《蓝桥杯CT107D单片机竞赛板》:蜂鸣器模块

    蜂鸣器模块 实验简介 实验原理图 实验原理 实验程序 关闭蜂鸣器与继电器 简易报警器原理 实验简介 采用软件方式,使得CT107D单片机竞赛板上的蜂鸣器和继电器分别不发声和不吸附. 实验原理图 实验原 ...

  8. 第jiu届蓝桥杯单片机省赛真题_第九届蓝桥杯单片机组省赛试题.pdf

    第九届蓝桥杯单片机组省赛试题 "彩灯控制器"的程序设计与调试 (70 分) 一.基本要求 1.1 使用CT107D 单片机竞赛板,完成"彩灯控制器"功能的程序设 ...

  9. 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...

    [蓝桥杯单片机01]从历年决赛真题中寻找单片机常见的考点 广东职业技术学院  欧浩源 [第三届:门禁系统] 1.功能简述 "门禁系统"主要有两种工作模式: 模式1:7:00-22: ...

最新文章

  1. RabbitMQ消息应答------ack机制
  2. linux 为什么有时用killall指令找不到要杀死的进程?(no process found)
  3. 2019年房贷利率会下调吗?
  4. 2016年计算机网考,2016年电大:计算机网考(全)练习题.doc
  5. 云视通存储怎么不是24小时_降压目标不是一次血压正常,而是24小时血压都要正常...
  6. .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署
  7. 手机号正则_一起刷题学习正则表达式
  8. Lenovo ServerGuide 10.4
  9. html按钮功能的实现原理,触摸按键原理是什么 触摸按键原理介绍【图文详解】...
  10. iOS12 捷径(热门推荐)
  11. 路径规划算法:Dijkstra
  12. 空气质量天气质量数据来源整理
  13. 安卓开发中的 “Android高手” ,需要具备哪些技术?
  14. 乐视2 pro2 IMAX手机root权限 刷rece 解锁 刷系统等
  15. Kali linux 学习笔记(四十一)Web渗透——扫描工具之w3af 2020.3.18
  16. pandas筛选数据_2_条件筛选
  17. HTML和PHP输出国际象棋,PHP实现国际象棋棋盘的样式效果(代码示例)
  18. JAVA开发(JAVA架构师成长之路)
  19. windows7微软官方_Microsoft Windows 7 | 第4部分
  20. 谷歌浏览器无限添加快捷方式

热门文章

  1. 基于yolov5的mjpg-streamer服务器搭建
  2. MFC--关于NOTIFYICONDATA的一些新特性
  3. 浅谈前端安全以及如何防范
  4. 用canvas实现红心飘飘的动画效果
  5. 高通三屏显示-副屏display[1] dpi密度修改
  6. 三分钟教你Word修改默认样式
  7. linux bochs安装,bochs安装以及使用
  8. 奥运圣火门口过 广东四市公布奥运圣火路线图
  9. SpringSecurity Oauth2 - 自定义 SpringBoot Starter 远程访问受限资源
  10. EasyStream(流汇聚,转发工具)