hxsjsuin 发表于 2025-3-15 00:53:23

【打卡第八集】蜂鸣器

一,认识蜂鸣器
蜂鸣器分有源蜂鸣器和无源蜂鸣器
一般可以通过蜂鸣器背面去判断,如果背面裸露了电路板,则为无源蜂鸣器,如果背面是黑胶,则是有源蜂鸣器。
有源蜂鸣器内部带震荡源,所以只要一通电就会叫,而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
所以游园蜂鸣器只要有一高一低电平就能工作,但是无源的需要不断给他高低电平才能工作

二,控制原理

只需要适当修改LED的方法将P54引脚给高电平关闭P54引脚给低电平打开就能实现蜂鸣器的控制

三,蜂鸣器的使用
使用蜂鸣器实现电磁炉的需求
1、按键1按下,蜂鸣10ms,
LED1-8全部点亮200ms在熄灭,表示开机。
2.开机后,按键2按下,蜂鸣10ms,LED1-8轮流点亮,表示切换煲汤、烧水等功能。
3.开机后按键1再次按下,蜂鸣10ms,LED全部熄灭,表示关机。
具体细节需要联合前面相关按键功能的逻辑一起,使用按键逻辑和延迟函数实现控制蜂鸣器的效果

hxsjsuin 发表于 2025-3-15 01:07:05

【打卡第九集】数码管

一,认识数码管
数码管也叫LED数码管,内部是由多个发光二极管封装在一起组成,可以显示多种颜色和样式,本质是通过点亮LED灯实现显示

共阳极就需要给二极管低电平来点亮,反之共阴极就需要高电平

二,控制原理

提前把0-9的数字编码好

使用数组将0-9的16进制存起来,后续可以通过索引使用
可以搭配按键的逻辑设置一个num的全局变量来实现每次点击按钮使数码管的数字加一

同理后续遇到其他的数码管也可以参照硬件的设计手册提前对所需的数字或者字母提前编码

hxsjsuin 发表于 2025-3-15 01:21:25

【打卡第十集】数码管的动态显示

一,数码管动态刷新的原理

大致就是通过打开新的一位然后关闭之前的一位数字,像是看电影一样,一幅幅画面依次经过组成动画

二,控制原理

其中要注意每个的延时不能太短,这里以1ms为准,但是循环下来不能超过20ms因为这样的刷新率才能不容易被肉眼分辨

和前面学习的一样,为了方便使用需要提前进行编码

三,8位数码管同时点亮
制作一个简易的十秒免单计数器
1,前四位数码管显示目标时间
2,后四位显示当前的计时,最小单位是10ms
3,按下按钮后每10ms最末尾的数字加一,直到按下结束按钮

整体实现思路和前面循环显示0-9差不多,但是数字的进位运算可以通过取余来化整

hxsjsuin 发表于 2025-3-15 01:47:30

【打卡第十一集】定时器的使用

一,定时器的作用和意义
定时器是定时器和计数器的统称。
1)设置为定时器时,可实现硬件计时,或者使程序每隔一固定时间完成一项操作
2)设置为计数器时候能够对脉冲进行计数
3)替代长时间的delay,提高CPU的运行效率和处理速度,能及时的响应某个事件1: 定时器是硬件实现的,可以实现硬件计时,
   也可以让程序每隔一定时间完成一个任务

中断指的是在主程序运行时,如果发生中断,则会执行中断代码,
执行完会跳回主程序,定时器与中断结合,可以实现定时一段时间产生一个中断的效果。
这样可以大大利用我们单片机的资源

二,STC32G单片机的定时器使用原理


定时方式上,不分频的计时器一个时钟就加一,而十二分频的需要十二时钟加一


定时器的工作模式

我们这次的机器总共有5个定时器


定时器的设置也是最关键的一步,就是定时器的溢出中断标志


三,定时器的简单应用


四,定时器的快速使用
在ISP中有内置定时器计算器,我们只需要填写相应的参数就能生成代码

hxsjsuin 发表于 2025-3-15 13:12:20

【打卡第十二集】计数器的使用

一,计数器的用途
常用于马达或者液体的输出机里
只要输出信号带这种高低电平变化的,想要计算个数的就可以使用计数器的功能

二,计数器的配置

T1_C/T:控制定时器1用作定时器或计数器,清0则用作定时器(对内部系统时钟进行计数),置1用作
计数器(对引脚T1/P3.5外部脉冲进行计数)。
T0_GATE:控制定时器0,置1时只有在INT0脚为高及TR0控制位置1时才可打开定时器/计数器0。

在编码过程中还需要注意keil中的0xFD问题,即使用汉字时需要避开这些字


三,计数器的应用
需求

解题思路

用下降沿来记录五次脉冲的个数实现计数所以公式为

hxsjsuin 发表于 2025-3-15 14:08:18

【打开第十三集】简易多任务处理

回顾
一、认识单片机
二、了解单片机硬件(介绍开发板)
三、开发环境搭建和下载,新工程建立资料下载
四、点亮点一个LED(CDC和HID下载)                        
五、C语言运算符和进制数入门      
六、LED闪烁和花式点灯                              
七、按键点亮灯                                       
八、蜂鸣器                                       
九、数码管的静态使用                        
十、数码管动态点亮                                 
十一、定时器                                       
十二、计数器的使用

应用模块化编程
需要将前面写的硬件都封装成模块以.c+.h的形式保留源文件
我们还需要在封装的函数上添加介绍的注释
//=================================
// 函数名称:
// 函数功能:
// 入口参数: @
// 函数返回:
// 当前版本: VER1.0
// 修改日期: 2023
//当前作者:
// 其他备注:
//==========================
也可以使用keil的函数头功能实现更加便捷的添加和修改函数头

工程文件编写
我们需要将每个硬件的函数单独提取出来,改成通用型的代码框架
我们还需要仔细添加注释以便函数后续的使用

按键按下后可能发生的状态变化依次为:
   <30ms 消抖
   =30ms 单击
   <3000ms 单击结束
   =3000ms 长按结束
   >3000ms 长按结束

对蜂鸣器等产生动作的元件,可以封装成类似:
   BEEP_ON
   BEEP_RUN
   BEEP_OFF
   的形式,简化蜂鸣器的控制
全局变量在退出函数时值不会消失,可以用于控制蜂鸣器的工作时间,

hxsjsuin 发表于 2025-3-15 14:18:39

【打卡第十四级】矩阵按键

一,矩阵按键是什么

矩阵按键的目的就是为了在按键数量多时,能够节省我们的I/O口的使用
因为按键是排列成矩阵排列的形式所以称为矩阵按键

二,矩阵按键的控制原理
按键识别原理:端口默认为高电平,实时读取到引脚为低电平是表示按下。

第一步:扫描列输入,现将P0.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。
第二步:扫描行输入,现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
第三步:根据行列确定按键位,行列组合一下就可以判断出是哪个按键按下了。

三,矩阵按键的程序编写
密码锁需求:
1.通过LED0模拟门锁状态,LED点亮表示门锁打开,熄灭表示门锁锁上;
2.增加8位数码管,可以动态显示8位的密码,无密码时显示 “- - - - - - - -”;
3.通过矩阵按键可以输入1-8的数字表示密码,并依次显示在数码管上;
4.每输入一个数字,蜂鸣器响20ms表示有数字按下;
5.密码正确打开LED0,密码错误蜂鸣响2秒;

具体函数的编写参考视频
我们需要善用串口消息来测试函数的运行

注意:
GPIO加上高电平到读取反馈时要加一个延时给电路的反应时间
读取矩阵按键的按钮,需要重复两次为GPIO设置高电平,并读取结果电平
建议使用case返回矩阵按键的值
可以通过索引数组实现移位显示

hxsjsuin 发表于 2025-3-15 14:31:21

【打开第十五集】外部中断

一,中断和中断系统
1,什么是中断系统
2,中断的优点
手册的定义

3,中断系统中的中断源

4,中断次序


二,什么是外部中断
外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),
而通过捕获这个变化,单片机内部自主运行的程序就会被暂时打断,转而去执行相应的中断处理程序,
执行完后又回到原来中断的地方继续执行原来的程序。
只有在有 标记的 引脚上才能使用外部中断

三,外部中断的用法

设置中断源


总之中断可以更高效的利用单片机,可以一些及时响应的功能
页: 1 [2]
查看完整版本: 看冲哥视频分享学习心得打卡