学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答

这篇具有很好参考价值的文章主要介绍了学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

课后练习解答

增加按键3,按下后表示启动,选择的对应的功能的LED持续闪烁,表示正在工作,且在工作的时候无法切换功能。
学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答,STC32,学习,笔记,单片机,电磁炉控制,小家电控制逻辑

需求分解

  • 1 增加按键3
#define KEY3 P34  //增加按键3
  • 2 按下后表示启动 电平控制
  • 3 工作状态锁定
    表示正在工作,且在工作的时候无法切换功能。
    该功能需要检测的标志位,且工作的时候无法进行切换。
    增加:bit Run_Now = 0; //0停止工作 1 开始工作。

增加KEY3控制代码如下:

/*=======================按下按键3,执行本段代码=====================*/
		if (KEY3 == 0)    //必须是按键按下才会执行以下代码,key3被点击,灯在一闪一闪的时候,KEY3非按下模式
		{
			delay_ms(10);  //防抖
			if (KEY3 == 0)
			{
				while(KEY3 == 0);	//等待按键松开,将要执行按下蜂鸣
				if(Run_Mode > 0)   //表示有模式,已经选择了模式,Run_Mode=0时,未选择模式,不执行
				{
					BEEP = 0;		//打开蜂鸣
					delay_ms(10);   //延迟10ms
					BEEP = 1;		//关闭蜂鸣
					Run_Now = !Run_Now; //运行和停止之间的切换
				}

			}

		}
		if( Run_Now = 1)   //正在运行
		{
			P2 = 0XFF; 	//全部熄灭
			delay_ms(200);   //延迟200ms
			P2 = ~(1<< (Run_Mode - 1));	//点亮这个灯
			delay_ms(200);   //延迟200ms
		}
		else  			//停止运行时,没有工作,灯和上面的一样
		{
			P2 = ~(1<< (Run_Mode - 1));
		}

按动KEY2后,0位LED持续闪烁,不能实现既定功能。

第一版代码问题分析

与编译提示的“ warning C137: constant in condition expression”有关,这里应该是判断,不是赋值。修改。
调整后,可以控制状态等闪动,但是接着按KEY2,移动不受影响,有逻辑错误,继续排查。
即工作的时候,功能无法切换没有实现。工作状态,变量Run_Now为1,而KEY2能切换的前提是Run_Now状态为0,所以增加条件限制:“if(Run_Now == 0) //Run_Now状态为0(未工作)时才能切换”。
另外,代码KEY2松开后才能执行,实际运行中,按下后有没有松开不太确定,改成按下就执行,等到它松开,调整while循环的位置到最后:while(KEY3 == 0); //等待按键松开,将要执行按下蜂鸣
KEY1,KEY2也可根据调整。
注意:if …else可看做是一个整体,中间不能加入其他保留字,如while等。
编译,写入开发板,下载成功,功能正常。

Tips:STC-ISP的设置

可保存,方便调用:

学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答,STC32,学习,笔记,单片机,电磁炉控制,小家电控制逻辑
按键需要按的稍微久一点,原因后期课程会分析,讲定时器的时候优化。

Tips:定时器

参考链接:单片机定时器工作原理是什么单片机定时器工作方式有哪些
学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答,STC32,学习,笔记,单片机,电磁炉控制,小家电控制逻辑

使用单片机时经常用到一个元件,那就是单片机定时器,单片机定时器的作用主要是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位,也可以用于将器件从休眠或空闲模式唤醒,还能用做精确延时处理,常被应用于时间控制、程序延时、对外部时间计数和检测等工作范围内。那么单片机定时器原理是什么呢?
单片机定时器,其实质是一个计数器,脉冲每一次下降沿,计数寄存器数值将加1,如果计数的脉冲是来源于单片机内部的晶振,由于其周期极为准确,则称为定时器;如果计数的脉冲来源于单片机外部的引脚,由于其周期一般不准确,则称为计数器。
单片机定时器工作方式有哪些
单片机定时器的工作方式有很多,大致可分为以下几种:1、方式0
方式0为13位计数,由TLO的低5位(高3位未用)和THO的8位组成TLO的低5位溢出时向THO进位,THO溢出时,置位TCON中的TFO标志,向CPU发出中断请求。
2、方式1
方式1的计数位数是16位,由TLO(TL1)作为低8位、THO(TH1 )作为高8位,组成了16位加1计数器。3、方式2
方式2为自动重装初值的8位计数方式。在方式2下,当定时器计满255( FFH)溢出时,CPU自动把TH的值装入TL中,不需用户干预,比较适合于用作较精确的脉冲信号发生器。
4、方式3
方式3只适用于定时器/计数器TO,定时器T1方式3时相当于TR1=0,停止计数。方式3将TO分成为两个独立的8位计数器TLO和THO。

实现完整电磁炉显示功能的代码

void Test(void)   //电磁炉的功能
{
		if (KEY1 == 0)   //开关机键
		{
			delay_ms(1000);  //长按1s开机
			if (KEY1 == 0)
			{
/*=======================还没有开机的情况下,执行本段代码=====================*/
				if (Run_Flag == 0)  //表示还没有开机
				{
					Run_Flag = 1;   //开机变量改为1,表示已经开机
					BEEP = 0;		//打开蜂鸣
					delay_ms(10);   //延迟10ms
					BEEP = 1;		//关闭蜂鸣
					P40 = 0;		//打开了LED总电源
					P2 = 0X00;		//全部点亮
					delay_ms(300);   //延迟200ms
					P2 = 0XFF; 		//全部关闭
				}
				else
				{
					Run_Flag = 0;   //标记已关机
					BEEP = 0;		//打开蜂鸣(提醒)
					delay_ms(10);   //延迟10ms
					BEEP = 1;		//关闭蜂鸣
					P2 = 0XFF;		//状态指示全部关闭
					P40 = 1;		//关闭总电源LED
					Run_Mode = 0;   //模式清零
					Run_Now = 0;	//运行状态清零(改成停止)
				}
				while(KEY1 == 0);	//按钮按下,先执行并等待按钮松开

			}

		}
/*=======================按下按键2,执行本段代码=====================*/
		if (KEY2 == 0 && Run_Flag == 1 )   //切换模式,且处于开机状态,状态选择键有效
		{
			delay_ms(10);  //防抖
			if (KEY2 == 0)
			{
					if (Run_Now == 0)	//Run_Now状态为0(未工作)时才能切换
					{
						BEEP = 0;		//打开蜂鸣
						delay_ms(10);   //延迟10ms
						BEEP = 1;		//关闭蜂鸣
						Run_Mode++;		//每次按下,模式+1(移至下一个led)
						if (Run_Mode > 8)  //如果模式大于8,回到模式1
							Run_Mode = 1;  //Run_Mode超过8后清零,回到第一个灯
						//错误写法,执行结果是8个灯中仅1个不亮
													//灯是低电平点亮,1<< Run_Mode,即1<<1,左移以后为0000 0010,仅1个LED灭,继续左移,尾部补0,还是只有1个LED灭
													//解决方法:RunMode先减1,再左移,最后全部取反。这里用~为全取反。而!是位取反。
															//P2 = 0XFX;  P6<< 1 + 1;  也可以实现
						P2 = ~(1<< (Run_Mode - 1));
					}
					while(KEY2 == 0);	//按钮按下,并等待按钮松开
			}

		}
/*=======================按下按键3,执行本段代码=====================*/
		if (KEY3 == 0)   //必须是按键按下才会执行以下代码,key3被点击,灯在一闪一闪的时候,KEY3非按下模式
		{
			delay_ms(10);  //防抖
			if (KEY3 == 0)
			{
				if(Run_Mode > 0 )   //表示有模式,已经选择了模式且处在开机状态下,Run_Mode=0时,未选择模式,不执行
				{
					BEEP = 0;		//打开蜂鸣
					delay_ms(10);   //延迟10ms
					BEEP = 1;		//关闭蜂鸣
					Run_Now = !Run_Now; //运行和停止之间的切换
				}
				while(KEY3 == 0);	//等待按键松开,先执行
			}
		}
		if( Run_Now == 1)   //正在运行
		{
			P2 = 0XFF; 	//全部熄灭
			delay_ms(200);   //延迟200ms
			P2 = ~(1<< (Run_Mode - 1));	//点亮这个灯
			delay_ms(200);   //延迟200ms
		}
		else  			//停止运行时,没有工作,灯和上面的一样
		{
			P2 = ~(1<< (Run_Mode - 1));
		}
}

测试流程

先KEY1开机蜂鸣一声LED点亮
切换模式KEY2(需处于开机状态下)
按一下KEY3,当前LED闪(在当前模式下运行),运行状态下,切换模式短按长按都失效
再按一下KEY3,LED停闪(运行停止),可以切换模式。
后期学完定时器的章节,再解决按键反应迟钝的问题。或者学完数码管以后,既可以修理一下。

总结

厘清正常、简单的逻辑。疯狂的在用if和else做一个判断。文章来源地址https://www.toymoban.com/news/detail-674143.html

到了这里,关于学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 机器学习课后练习题(期末复习题目附答案)

    此为第一章绪论部分 一. 单选题 1. 移动运营商对客户的流失进行预测,可以使用下面哪种机器学习方法比较合适( ) A. 一元线性回归分析 B. 关联方法 C. 聚类算法 D. 多层前馈网络 正确答案: A 2. 下面哪种说法有关机器学习的认识是错误的?( ) A. 高质量的数据、算力和算法对一个机

    2024年02月07日
    浏览(12)
  • 微信小程序开发实战课后习题解答————第二章(作业版)

    一、填空题 1.微信小程序通过   bindtap/catchtap    方式实现单击事件。 2.微信小程序的flex布局中, flex-direction: row   属性来实现子元素的横向排列 3.微信小程序中按钮通过    button   组件来实现 4.微信小程序通过  display: flex 来实现felx布局 5.微信小程序中执行页面数据加载完

    2024年02月15日
    浏览(14)
  • 微信小程序开发实战课后习题解答————第四章(作业版)

    一、填空题 1、  组件  是视图层的基本组成单元。 2、 swiper内部只可以放置   swiper-item    组件。 3、 设置text文本内容长按可选的属性是   selectable   。    4、navigator组件通过设置   open-type    属性,来区分不同的跳转功能。 5、通过image的  mode    属性来设定不同的图

    2024年02月06日
    浏览(10)
  • 微信小程序开发实战课后习题解答————第三章(作业版)

    微信小程序开发实战课后习题解答————第三章(作业版)

    一、填空题 1、微信小程序中用    navigationBar      组件可以实现导航栏 2、 微信小程序中能够实现轮播效果的组件是    swiper    3、 微信小程序中实现滚动条事件的绑定方法是    bindscroll   4、 微信小程序中引入音频的组件是   InnerAudioContext   5、 微信小程序中控

    2024年02月09日
    浏览(48)
  • <HarmonyOS第一课>1·运行Hello World【学习笔记+课后考核】

    <HarmonyOS第一课>1·运行Hello World【学习笔记+课后考核】

    其中详细如下: AppScope中存放应用全局所需要的资源文件。         在AppScope,其中有resources文件夹和配置文件app.json5。AppScoperesourcesbase中包含element和media两个文件夹          其中,element文件夹主要存放公共的字符串、布局文件等资源。media存放全局公共的多媒体资

    2024年02月11日
    浏览(11)
  • 【学习笔记、面试准备】机器学习西瓜书要点归纳和课后习题参考答案——第3章

    【学习笔记、面试准备】机器学习西瓜书要点归纳和课后习题参考答案——第3章

    目录地址 线性模型定义: 其中x是输入向量 优点:形式简单,易于建模,可解释性好。 输入预处理:连续值可以直接用,离散值若有序,可以按序赋值变连续(如“高,中,低”变为“1,0.5,0”,否则可以单热点码编码。 回归常用MSE,要偏导数为0,当输入是一维时可以算

    2024年02月08日
    浏览(6)
  • python教程 入门学习笔记 第8天 安装插件sublimeREPL 设置快捷键 BUG解答

    6、安装插件sublimeREPL 需要安装插件:sublimeREPL,才能在sublime编译器中接受键盘输入的信息,才能执行交互结果 插件安装快捷键:ctrl+shift+P,打开插件安装面板 输入install后,选择package control:install package 安装插件管理器, 提示安装成功后,重新按快捷键ctrl+shift+P 选择package

    2024年02月14日
    浏览(14)
  • sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

    sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

    目录:目录 1.“人工智能是新电力” 这个比喻指的是什么? A. 【  】人工智能为我们的家庭和办公室的个人设备供电,类似于电力。 B. 【  】通过“智能电网”,人工智能正在传递新一波的电力。 C. 【  】人工智能在计算机上运行,因此由电力驱动,但它让计算机做以前

    2024年02月07日
    浏览(11)
  • verilog学习笔记- 10)按键控制 LED 灯实验

    verilog学习笔记- 10)按键控制 LED 灯实验

    目录 简介: 实验任务: 硬件设计: 程序设计: 下载验证 : 总结与反思: 按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时

    2023年04月16日
    浏览(12)
  • 【51单片机】LED与独立按键(学习笔记)

    【51单片机】LED与独立按键(学习笔记)

    LED:发光二极管 补:电阻读数 102 = 10 00 = 1k 473 = 47 000 1、新建工程:Project = New Project Ctrl + Shift + N :新建文件夹 2、选型号:Atmel-AT89C52 3、xxx提示?选否 4、Source Group = 右键 = Add New Item … = C文件\\\"main.c\\\" 5、设置勾选创建HEX File文件 6、编译 CPU通过对寄存器的控制,寄存器通过驱

    2024年02月06日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包