FRSTC
发表于 2024-9-2 12:27:29
第六集:LED闪烁和花式电灯
1、基于Delay的LED闪烁
LED的闪烁可以使用Delay函数实现,Delay函数使用了枚举的软延时方法,用此方法可以便捷地实现LED闪烁,但是运行效率不高,在延时的时间内无法完成其他事情,极大损耗了单片机的性能。
2、新建文件格式
为了防止重复定义,在建立新文件时需要使用模块化编程。
xxx.h格式
#ifndef __XXX_H
#define __XXX_H
调用头文件
函数声明
#endif
xxx.c格式
#include "xxx.h"
函数定义
FRSTC
发表于 2024-9-2 12:49:31
第七集:按键电灯
1、按键的原理
按键是一个开关,按下时开关导通,松开时按键断开,通过IO口读取高低电平就能接收到按键的开关情况了。按键在按下时会发生抖动,在一个极短的时间内,按键在导通和断开中反复切换,为了消除抖动影响,需要为按键添加防抖动程序。
2、按键电灯实现
按键电灯是基于循环加Delay实现的。在一个循环中反复判断按键的状态,若被按下,则改变LED的开关状态。按键防抖的实现在按下按键后,程序会延时10ms后再判断按键是否被按下,这样可以有效地防抖,但是执行效率较低。
FRSTC
发表于 2024-9-3 14:10:35
第八集:蜂鸣器的应用
1、认识蜂鸣器
蜂鸣器分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部自带震荡源,一通电就会叫,而无源蜂鸣器内部不带振荡原,需要单片机提供振荡信号才能发声,无源蜂鸣器发声音调可以随着振荡信号而改变,价格更低。本教程使用有源蜂鸣器,驱动原理类似LED驱动方式,通电就响。
2、蜂鸣器控制原理
如下图1为蜂鸣器控制原理图。P5.4连接三极管基极,当P5.4输出低电平时,三极管导通从而驱动蜂鸣器发声。
3、蜂鸣器实战应用
while(1){
if( KEY1 == 0){
delay_ms(10);
if(KEY1 == 0 ){
if( Run_Flag==0 ){
Run_Flag = 1;
BEEP = 0;
delay_ms(10);
BEEP = 1;
P40 = 0;
P6 = 0X00;
delay_ms(200);
P6 = 0XFF;
}
else{
Run_Flag = 0;
BEEP = 0;
delay_ms(10);
BEEP = 1;
P6 = 0XFF;
Run_Mode = 0;
Run_Now = 0;
}
while(KEY1 == 0 );
}
}
if( KEY2 == 0 ){
delay_ms( 10 );
if( KEY2 == 0 ){
if( Run_Now==0 ){
BEEP = 0;
delay_ms(10);
BEEP = 1;
Run_Mode ++;
if( Run_Mode>8 )
Run_Mode = 1;
P6 = ~(1<< (Run_Mode-1));
}
while( KEY2 == 0);
}
}
if( KEY3 == 0 ){
delay_ms( 10 );
if( KEY3 == 0 ){
if( Run_Mode>0 ){
BEEP = 0;
delay_ms(10);
BEEP = 1;
Run_Now = !Run_Now;
}
while( KEY3 == 0);
}
}
if( Run_Now == 1 ){
P6 = 0XFF;
delay_ms(200);
P6 = ~(1<< (Run_Mode-1));
delay_ms(200);
}
else{
P6 = ~(1<< (Run_Mode-1));
}
}
FRSTC
发表于 2024-9-4 13:25:55
第九集:数码管的静态使用
1、认识数码管
数码管也叫LED数码管,内部是由多个发光二极管封装在一起组成,可以有多种颜色、多种外形、多种样式,理论上可以显示任意字符或图案,但是本质上来说他们都是通过点亮内部LED来显示。
按LED单元连接方式可分为共阳极数码管和共阴极数码管(如图1 所示),尾缀A表示共阳,K表示共阴。
2、控制原理
若要控制数码管显示不同的数字,只需控制连接数码管的不同IO口输出指定的高低电平。如图1所示,以共阳极接法为例,假使要显示数字0,就要点亮abcdef,熄灭g,因此需要abcdef口输出低电平,g口输出高电平,显示其他数字同理。
3、数码管实现0-9显示
显示0-9数字可以使用数组将每个数字需要点亮的IO口通过16进制记录下来,最后直接调用数字修改最低位的IO口即可。
FRSTC
发表于 2024-9-6 15:10:05
第十集:数码管的动态显示
1、数码管动态刷新原理
单片机在同一时间只能点亮一个数码管,因此,若想点亮多个数码管需要采用动态刷新策略。因为视觉暂留现象,只需要让单片机在极短时间内依次点亮每个数码管,再重复这一过程,就能造成数码管都点亮的假象。
2、控制原理
控制原理如下图所示,首先选择第一位数码管输出对应的位码,然后输出数码管应显示的数字,最后延时一定的时间。
xyxxqfxl
发表于 2024-9-6 16:37:39
阿杰爱学单片机 发表于 2024-8-30 21:39
可以先申请一个屠龙刀先学着,找客服申请
我今天刚肝完15集,试验箱已经发货了 ...
请问,怎么联系客服?在论坛里吗,还是微信上?
阿杰爱学单片机
发表于 2024-9-6 20:57:33
sdg2a15er 发表于 2024-9-6 16:37
请问,怎么联系客服?在论坛里吗,还是微信上?
论坛里那个试验箱申请下面不是有联系方式吗
FRSTC
发表于 2024-9-8 16:31:11
第十一集:定时器的使用
1、定时器的作用和意义
定时器是定时器和计数器的统称,当设置为定时器模式时,可以实现硬件计时或者时程序每隔固定的时间产生一次中断,完成某项操作;当设置为计数器模式时,能够对脉冲进行计数;此外定时器能够替代长时间的delay,提高CPU运行效率,能够及时的响应某个事情。
2、STC32G单片机定时器使用原理
第一步:对定时器T0,用它们在特殊功能寄存器TMOD中相对应的控制位C/T来选择T0为定时器还是计数器。
第二步:当定时器T0设置为定时模式时,特殊功能寄存器AUXR中的T0x12决定定时器是12分频还是不分频。
第三步:设置定时器的工作模式
第四步:设置TCON寄存器
第五步:设置中断使能寄存器
3、定时器的简单应用
定时器的频率、周期如下图所示公式计算
最后,通过STC-ISP的定时器计算器功能可以便捷的生成想要的定时器哦。
FRSTC
发表于 2024-9-9 11:02:56
第十二集:计数器的使用
1、计数器的功能
计数器可以记录高低电平变化的次数,例如光电编码器,可以通过计数器记录光电编码器在一段时间内产生的脉冲次数来确定电机的转速。
2、计数器的配置
计数器的配置流程与定时器类似。
3、keil中的0xFD问题
在keil软件的8051和80251编译器版本中,字符串不能带有0xFD编码的汉字,否则在编译时会跳过0xFD而出现乱码,解决办法就是在带有0xfd的汉字后面增加一个0xfd。另外,keil项目路径名也不能含有带0xFD编码的汉字。
FRSTC
发表于 2024-9-16 11:23:36
第十三集:简单多任务处理
1、应用模块化编程
模块化编程是指将一个程序工程分成许多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一个模块,每一个模块都有其各自的功能,而每一个.h文件则是声明该模块,相当于功能说明书 模块化编程在嵌入式中为必须要掌握的技能。在写完一个函数后需要对其添加函数头加以说明。
修饰符extern的作用:如果在一个a.c文件中定义了一个变量int v,需要让b.c文件直接访问int v变量,则需要使用extern函数。extern用在变量的声明前,用来说明“此变量实在别处定义的,要在此处引用”