1400878695
发表于 2025-2-27 09:46:42
第六集下
在模块化编程里,函数使用分为如下三个步骤:
1、函数定义
返回值 函数名称(入口参数)
{
函数要执行的功能
}
@返回值:没有返回值就是void
@函数名称:避开关键词,不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数“,”分开,空就写void
2、函数声明
返回值 函数名称(入口参数);
3、函数调用
函数名称(入口参数);
模块化编程,新建xxx.c和xxx.h文件,代表一个功能块。
xxx.h格式:
#ifdef __XXX_H
#define __XXX_H
调用头文件
函数声明
#endif
xxx.c格式
#include “xxx.h”
函数定义
添加文件一定要记得引用路径和添加到工程里
添加包含路径
添加后,调用时直接使用 #include"文件名,.h”就可以将需要的文件包含进来,编译器会自动到以上路径下面寻找所包含的文件。这种情况下,使用双引号""包含头文件,编译器首先在当前目录下查找头文件,如果没有找到,编译器会到 kei 设置路径查找,还没有的话再到系统路径下查找。(注:系统路径是编译器安装位置存放头文件的目录)
1400878695
发表于 2025-2-27 14:26:25
第七集上按键的本质就是控制两个引脚之间的通断,对于机械开关,当机械触点断开、闭合是,由于机械触电的弹性作用,一个开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。两个等号是判断符,一个等号是赋值。
机械按键原理 结构:通常由键帽、弹簧、触点等组成。工作原理:按下键帽时,弹簧被压缩,使原本分离的两个触点相互接触,电路导通,产生电信号,信号传至控制器,系统识别为按键按下操作。松开键帽后,弹簧恢复原状,触点分离,电路断开,信号消失,系统识别为按键松开操作。
在单片机系统中,按键去抖主要有硬件和软件两种原理及方法:硬件去抖:RC滤波电路:在按键的输出端与单片机的输入引脚之间连接一个RC滤波电路。当按键按下或松开时,产生的抖动信号包含高频成分。电容对于高频信号呈现低阻抗,能将高频抖动信号旁路到地,使输出到单片机的信号变得平滑,从而消除抖动影响。双稳态电路:采用如RS触发器等双稳态电路。按键连接到RS触发器的输入端,利用其两个稳定状态来存储按键的状态。当按键按下和松开时,只有在输入信号满足特定条件下,RS触发器才会改变状态,从而避免了因抖动产生的不稳定状态变化,输出稳定的按键信号给单片机。软件去抖:延时检测法:当单片机检测到按键按下时,不立即响应,而是延迟一段时间(如10ms到20ms)后再次检测按键状态。如果此时按键仍然保持按下状态,才认为是真实的按键按下操作;松开时同理。因为一般按键抖动时间较短,而人为按下或松开按键的时间间隔远大于抖动时间,通过延时检测可有效避开抖动时间,确保检测到的是稳定的按键状态。多次采样法:在一个较短的时间内对按键状态进行多次采样,如在10ms内采样5次。若这5次采样结果一致,就认为此时的按键状态是稳定的;若不一致,则认为是抖动,不进行处理。通过多次采样并判断采样结果的一致性,可排除抖动干扰,得到准确的按键状态。
按键消抖的必要性按键抖动会导致系统误判按键的按下或松开次数。比如在一个计数程序中,若按键有抖动,可能按一次键却被系统识别为多次按下,导致计数结果错误,影响整个系统的数据准确性和可靠性。对于一些依赖按键操作来切换工作模式或执行特定任务的系统,按键抖动可能使系统频繁进入错误的模式或重复执行不必要的操作,进而引发系统运行异常,甚至崩溃,严重影响系统的稳定性和正常运行。在人机交互界面中,用户期望按键操作有准确、即时的反馈。若按键存在抖动,会出现按一次键却有多次响应,或者按键响应不及时等情况,给用户带来困扰,降低用户对产品的满意度和使用体验。频繁的按键抖动会使电路中的电子元件频繁通断,加速元件的老化和磨损,如导致按键的触点过早损坏、单片机的输入引脚过度损耗等,缩短硬件的使用寿命,增加维修和更换成本。
1400878695
发表于 2025-2-27 15:22:26
第七集下
在往左移位时要末尾会自动补零,可以在+1使末尾为1。
数组的使用分为两步:
1.定义
类型 名称[长度] = {数值};
数组是一种数据结构,它是由相同类型的数据元素按照一定顺序排列组成的集合,这些元素在内存中连续存储。比如一个存储整数的数组,可以包含若干个整数,像 就是一个简单的整数数组。
2.使用
赋值:名称[索引] = 数值
调用:名称[索引]
3.特点
数据类型一致性:数组中的每个元素都必须是相同的数据类型,比如全是整数、全是字符或全是浮点数等。
内存连续性:数组在内存中是连续存储的,这使得计算机可以通过简单的算术运算快速定位和访问数组中的元素。
下标索引:数组中的元素通过下标(索引)来访问,下标从0开始。例如,对于数组 arr = , arr 表示第一个元素10, arr 表示第二个元素20,以此类推。
4.作用
数据存储与管理:可以方便地存储和组织大量同类型的数据,便于对这些数据进行统一的处理和操作。例如,存储一个班级学生的考试成绩,就可以使用数组。
算法实现基础:许多算法和数据结构的实现都依赖于数组,如排序算法(如冒泡排序、快速排序等)、搜索算法(如二分搜索)等,常常需要对数组中的元素进行比较、交换等操作来实现相应的功能。
5.分类
一维数组:最简单的数组形式,元素排列成一条直线,只有一个维度,就像前面提到的 这样的数组。
多维数组:是一维数组的扩展,有多个维度。常见的有二维数组,可看作是由多个一维数组组成的数组,通常用于表示矩阵、表格等数据结构,如 [, , ] 。
1400878695
发表于 2025-2-27 20:44:45
第八集
1、蜂鸣器
有源蜂鸣器内部带震荡源,所以只要一通电就会叫,而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
结构
有源蜂鸣器:内部含有振荡器、驱动电路等,能将直流电转换为一定频率的脉冲信号。
无源蜂鸣器:内部没有振荡源和驱动电路,结构相对简单。
工作原理
有源蜂鸣器:接通直流电源后,内部振荡器产生特定频率电信号,驱动发声部件振动发声。
无源蜂鸣器:利用电磁感应现象,音圈接入交变电流后形成电磁铁与永磁铁相吸或相斥推动振膜发声,需外部提供特定频率的方波信号驱动。
声音特性
有源蜂鸣器:声音频率通常固定,由内部振荡电路决定。
无源蜂鸣器:声音频率由输入的方波信号频率决定,可通过改变输入信号频率发出不同频率声音,能实现更丰富的音效。
应用场景
有源蜂鸣器:适用于对声音要求不高,仅需简单提示音或报警声的场合,如微波炉、洗衣机等家电的提示音,火灾报警器、汽车安全带提示等。
无源蜂鸣器:常用于需要灵活控制声音频率、实现复杂音效的场合,如电子音乐盒、语音提示器等。
2、如何控制蜂鸣器
P54引脚给高电平关闭,P54引脚给低电平打开。
代码
1400878695
发表于 2025-2-27 20:47:18
问题
我在MCU上外接了一个蜂鸣器,USB插在电脑上,按键能控制蜂鸣器的通断,但是把USB插在充电宝,按下按键没有反应是为什么?
而且我又尝试用按键点灯的代码去尝试,也是一样,连在电脑上能正常点灯,但一插到充电宝上,还是不亮。
1400878695
发表于 2025-2-27 22:26:43
第九集
1、数码管是一种可以显示数字和其他信息的电子设备,通常由引脚、塑料壳、PCB板、发光二极管(LED灯珠)、显示面板等组成。数码管也叫LED数码管,内部是由多个发光二极管封装在一起组成,本质来说他们都是通过点亮内部的LED来显示的。按发光二极管单元连接方式,可分为共阳极数码管和共阴极数码管;按显示内容,可分为指示型数码管和显示型数码管;按位数,有1位、2位、4位等数码管;按颜色,有红、绿、蓝、白等不同颜色的数码管。数码管的基本单元是发光二极管,通过控制各个发光二极管的亮灭来显示数字、字母或符号。以常见的七段数码管为例,它由七个段码(a、b、c、d、e、f、g)和一个小数点(dp)组成,当给特定的段码加上合适的电压时,对应的段就会发光,从而组合成不同的数字或字符。
2、静态显示驱动
基本原理:静态显示驱动是指数码管显示某一字符时,相应的段(a - g及小数点dp)始终保持恒定的电平,即各段的驱动信号在显示期间一直保持不变。以共阴极数码管为例,要显示数字“0”,则将a、b、c、d、e、f段接高电平,g段和小数点dp接低电平,且在整个显示过程中,这些电平状态保持稳定。对于共阳极数码管,逻辑相反,显示“0”时a、b、c、d、e、f段接低电平,g段和小数点dp接高电平。
主要由译码器、驱动器和数码管组成。译码器将输入的二进制代码转换为对应的数码管段码信号,驱动器则对译码器输出的信号进行功率放大,以驱动数码管的各段发光二极管。以四位数码管为例,每个数码管的同名段(如a段)连接在一起,共同接至译码器和驱动器的相应输出端,而每个数码管的公共端(共阴极或共阳极)则根据需要接地或接电源。
3、共阴极和共阳极
(1)共阴极数码管:所有发光二极管(LED)的阴极连接在一起形成公共阴极(COM),每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)。工作时,公共阴极接低电位,当某个LED的阳极为高电平时,该发光二极管点亮,相应的段被显示。
共阳极数码管:将所有发光二极管的阳极接到一起形成公共阳极(COM),各段的阴极各自独立连接。应用时公共阳极接高电位,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
(2)共阴极数码管的优点是当需要显示多个数字时,只需要控制对应数字的阳极引脚,控制电路简单,且能显示更多字符;缺点是亮度相对较低,内部引脚较多,与其他电路连接更复杂。共阳极数码管的优点是电路控制比较简单,所有阳极连接在一起,可通过增加电流提高亮度;缺点是显示多个数字时,需同时控制多个LED的阴极引脚,控制电路复杂,功耗大,且只能显示数字和少量字母。
(3)判断方法
共阴极数码管:找一个3到5伏的电源和一个1k的电阻,Vcc串接电阻后和GND接在任意两个脚上,找到一个使LED发光的组合后,GND不动,Vcc(串电阻)逐个碰剩下的脚,如果有多个LED发光,一般是8个,则是共阴的。也可以直接用数字万用表,红表笔接电源正极,黑表笔接电源负极进行测试。
共阳极数码管:用Vcc不动,GND逐个碰剩下的脚,如果有多个LED发光,一般是8个,那就是共阳的。
1400878695
发表于 2025-2-28 09:20:13
充电宝供电的问题已经解决了,把USB打印的那串代码注释掉就可以了{:baoquan:}
1400878695
发表于 2025-2-28 14:10:38
第十集
1、动态显示驱动
分时复用原理:动态显示驱动是利用人眼的视觉暂留效应,轮流点亮数码管的各个位。以四位数码管为例,先使第一位数码管的公共端有效,通过段码线送出第一位要显示字符的段码,使其显示相应字符,保持一段时间(如1ms),然后关闭第一位数码管的公共端;接着使第二位数码管的公共端有效,送出第二位的段码并显示,依此类推,循环往复。只要循环速度足够快,人眼就会感觉所有数码管在同时显示。主要由段码驱动器、位码驱动器和数码管组成。段码驱动器用于向数码管的各段提供段码信号,位码驱动器用于控制数码管的公共端,决定哪一位数码管显示。所有数码管的段码线对应连接在一起,由段码驱动器统一驱动;而位码线则分别连接到各位数码管的公共端,由位码驱动器独立控制。
2、8位数码管同时点亮
8位数码管的段码线对应连接在一起,接至段码驱动器;位码线分别连接到各位数码管的公共端,接至位码驱动器。在程序中,设置一个较短的扫描周期,如1ms。在每个扫描周期内,依次为每一位数码管设置要显示的字符段码,并使该位的位码有效,短暂显示后关闭该位。由于扫描速度很快,利用人眼的视觉暂留效应,看起来8位数码管就像同时点亮一样。
3、共阴极数码管0-9段码
0: 0x3F(00111111)
1: 0x06(00000110)
2: 0x5B(01011011)
3: 0x4F(01001111)
4: 0x66(01100110)
5: 0x6D(01101101)
6: 0x7D(01111101)
7: 0x07(00000111)
8: 0x7F(01111111)
9: 0x6F(01101111)
4、共阳极数码管0-9段码
0: 0xC0(11000000)
1: 0xF9(11111001)
2: 0xA4(10100100)
3: 0xB0(10110000)
4: 0x99(10011001)
5: 0x92(10010010)
6: 0x82(10000010)
7: 0xF8(11111000)
8: 0x80(10000000)
9: 0x90(10010000)
1400878695
发表于 2025-2-28 15:16:37
第十一集
1、定时器的功能
精确定时:能为单片机的各种操作提供精确的时间基准,比如让LED灯每隔特定时间闪烁一次,或控制电机按一定时间间隔启停。
计数功能:对外部输入的脉冲信号进行计数,可用于测量转速、频率等物理量,如通过对旋转编码器输出的脉冲计数来计算电机转速。
产生PWM信号:通过设置定时器的参数,能输出不同占空比的脉冲宽度调制(PWM)信号,用于控制电机的转速、调节液晶显示屏的亮度等。
2、工作原理
以内部时钟信号为基准,利用计数器对时钟脉冲进行累加计数。当计数值达到预先设定的值时,就会产生溢出中断或触发相应的事件,通知单片机定时时间已到,进而执行相应的操作。
对于外部计数模式,定时器对来自外部引脚的脉冲信号进行计数,每检测到一个脉冲,计数器的值就加1,达到设定值时同样会产生相应的动作。
3、相关寄存器
控制寄存器:用于设置定时器的工作模式、计数初值、启动或停止定时器等。如选择定时器是工作在定时模式还是计数模式,以及设定计数的初始值。
状态寄存器:用于反映定时器当前的工作状态,比如是否产生了溢出标志、是否正在计数等,单片机可通过读取状态寄存器来了解定时器的工作情况。
4、STC32G的定时器使用原理
STC32G 系列单片机内部设置了5个 24 位定时器/计数器(8 位预分频+16 位计数)。5 个 16 位定时器 TO、T1、T2、T3 和 T4 都具有计数方式和定时方式两种工作方式。对定时器/计数器 T0 和 T1,用它们在特殊功能寄存器 TMOD 中相对应的控制位 C/T 来选择 TO 或 T1为定时器还是计数器。对定时器/计数器 T2,用特殊功能寄存器 AUXR 中的控制位 T2 C/T 来选择 T2 为定时器还是计数器。对定时器/计数器 T3,用特殊功能寄存器 T4T3M 中的控制位 T3 C/T 来选择 T3 为定时器还是计数器。对定时器/计数器T4,用特殊功能寄存器 T4T3M 中的控制位 T4 C/T 来选择 T4 为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12 个时钟或者每1个时钟得到一个计数脉冲,计数值加 1;如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加1。
(1)先设置功能为定时器/计数器
(2)如果在定时器模式下,设置不分频或者12分频(默认是12分频)
(3)设置定时器的工作模式
(4)定时器设置
(5)开中断
中断号与中断类型是固定的。中断频率越低越好。
5、使用ISP的定时器计算,定时时间的计算
1400878695
发表于 2025-2-28 15:58:43
第十二集
1、计数器的用途
计数器是一种能够对输入信号进行计数操作的电子装置或软件模块,在生产线上对产品数量进行统计,如饮料瓶灌装生产线,计数器可对经过的瓶子数量计数,便于统计产量和控制生产进度。记录设备运行次数、启停次数等,为设备维护提供数据支持,如记录电机启动次数,达到一定次数后提醒维护人员检查电机状况。配合定时器,在一定时间内对输入的周期性信号脉冲进行计数,计算单位时间内的脉冲数得出信号频率,是频率计的核心工作原理。测量两个事件之间的时间间隔,通过对时钟脉冲计数,根据脉冲数和时钟周期计算出时间间隔。在跑步机、跳绳等健身器材中,计数器用于记录运动次数、距离等数据,帮助用户了解运动情况。
2、计数器的配置
当C/T=1 时,多路开关连接到外部脉冲输入 P3.5/T1,即 T1 工作在计数方式。STC单片机的定时器1有两种计数速率:一种是 12T模式,每 12 个时钟加 1,与传统 8051 单片机相同:另外一种是 1T模式,每个时钟加 1,速度是传统 8051单片机的 12 倍。T1的速率由特殊功能寄存器 AUXR中的 T1x12 决定,如果 T1x12=0,T1 则工作在 12T 模式;如果 T1x12=1,T1 则工作在 1T模式定时器1有两个隐藏的寄存器 RL TH1 和 RL TL1。RL TH1与TH1 共有同一个地址,RL TL1与TL1共有同一个地址。当 TR1=0 即定时器/计数器1被禁止工作时,对 TL1 写入的内容会同时写入 RL TL1,对TH1 写入的内容也会同时写入 RL TH1。当 TR1=1 即定时器/计数器1被允许工作时,对 TL1 写入内容,实际上不是写入当前寄存器 TL1 中,而是写入隐藏的寄存器 RL TL1 中,对 TH1写入内容,实际上也不是写入当前寄存器 TH1 中,而是写入隐藏的寄存器 RL TH1,这样可以巧妙地实现 16 位重装载定时器。当读 THI和 TL1的内容时,所读的内容就是 TH1 和 TL1 的内容,而不是 RL TH1 和 RL TL1 的内容。
当定时器1工作在模式1(TMOD/=00B)时,的溢出不仅置位 TF1,而且会自动将的内容重新装入。
当 TICLKO/INTCLKO.1=1 时,P3.4/T0 管脚配置为定时器1的时钟输出 TICLKO。输出时钟频率为 T1溢出率/2。如果 C/T=1,定时器/计数器 T1 是对外部脉冲输入(P3.5/T1)计数,则:输出时钟频率 =(T1 Pin CLK)/(65536-)/2
3、定时器1(外部计数一扩展T1为外部下降沿中断)
4、应用
TH表示高8位,TL表示低8位。在字符串中不能包含带有0xFD编码的汉字。可以在带有0xFD的汉字后面增加一个0xFD即可。
编译的时候有个警告,怎么解决