18344371880
发表于 2023-5-22 12:30:06
第三集打卡:
stc的烧录软件功能还是非常强大的,但是我们在进行程序烧录的时候,需要注意几点
1、如果是直接使用usb硬件下载的话,需在烧录软件上进行usb驱动的安装
2、如果是使用其他烧录器进行下载的话,就以ch340比喻,我们需要安装ch340的驱动程序,而且有一个需要注意的是,我们最好在单片机的rx口上串联一个二极管,防止灌电流
其实这些内容都能在官方手册上找到答案,包括在gnd和vcc直接是否需要钽电容、瓷片电容,官方手册上是建议要的,但有网友说,不要也能用,但可能会有纹波,影响adc等的采集精准度
还要一个点,在程序里定义了时钟频率,在烧录的时候一定要设置成相同的频率,但我以前在stc8g的时候,早期是没有去定义的,好像也能用,也没有去深入了解,后来都是定义11.0592
18344371880
发表于 2023-5-22 17:08:32
本帖最后由 18344371880 于 2023-5-22 18:46 编辑
第四集打卡:
作业学习单片机的第一个程序,决定的点亮一个LED灯,在编写这个程序的时候,也出现了几个关键词
1、sfr:是一个特殊功能寄存器的声明;
2、sbit:就是定义位变量,比如sbit LED=P0^4,这就是P0口的第4位,把他的名称叫做LED,以后在程序里输入LED就等于输入P04
3、#include:是预处理命令,就是单片机执行的时候,会先编译这一块的命令,然后程序就可以直接调用,然后又分为“”和< >类型,双引号就是我们自己加入的库函数,尖括号就是系统自带的库函数
然后在讲述不停电下载的时候,还涉及到EA寄存器,其实这个就是所有中断的总开关,好比家里的灯,你把开关打开了,如果总闸没打开的话,也是不会亮的
最后再说一下端口配置:他分为四个模式:准双向口模式(老式51单片机的就是这个,而且只有这个)、高阻输入模式、开漏输出模式、推挽模式(这个特别适合驱动LED,个人觉得)
最后说一下课后作业
这个就不用再进行位定义的,直接P6=0x00;就行了,如果是输出的话,就是0xff
yuyy1989
发表于 2023-5-22 19:06:26
已看到22集,打卡贴https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2110&extra=page%3D1
18344371880
发表于 2023-5-22 19:13:53
第五集打卡:
这集主要学习了C语言的一些基础内容,如调试输出的printf(),各种字符类型,如最常见的%d,%f,%u等等,还要就是数据类型,如char,int,long等等,而又再细化为有符号和无符号型,如signed int,就是有符号整形,数据长度不变,占用字节不变,有正负值,如unsignd int就是无符号整形,就是没有负数的,也是数据长度不变,占用字节不变
还有就是一个级别的数据运算符,=,+,-,*,/等,也有逻辑判断的,如==,!=,>=,<=等,还要数据类型的与(&&)或(||)非(!),再延伸就是,按位或|=,按位与&=等等,还有一个左移<<=,右移<<=,这个在涉及流水灯的时候也是一个运用
然后还有就是ascii码的认知,这个并不是stc公司定义的,也不是单片机系统定义的,这是国家通用的转换码
还要就是二进制、十进制、十六进制的转换,其实还要一个是八进制,基本上用不到,有涉及到cbd格式的时候,才用的比较多
longi
发表于 2023-5-22 21:39:16
打卡。二十二集学习了CDC串口通信,知道如何配置来实现CDC串口通信
18344371880
发表于 2023-5-22 21:49:35
第六集打卡:
这集主要跟着冲哥学习了延时函数和模块化编程
先说一下延时函数,这个是消耗时钟周期去进行延时的,缺点就是:在延时期间无法执行其他程序,然后精准性比较差,好处就是方便,如果我们要精准的话,还是要采取定时器的方式,这个在stc官方烧录软件上就有这个选项,选择需要的定时器然后选择1T还是12T模式,并输入每次的延时就可以;
再说一说模块化编程,模块建议是保存在工程文件的同一目录下,其中每一个模块都需要.c和.h文件,比如我们需要弄一个delay延时函数,我能就会用到数据类型,假设我们还是采用U16的情况下,我们就还需要再该工程里引用相关的头文件,我觉得模块化最大的优点就是移动性强,后期不用反复输入,我加在别的工程里,只要引用一下,就能使用这个函数
再说一下课后作业
while(1)
{
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
P60=0;
delay_ms(1500);
P60=1;
delay_ms(1500);
P60=0;
delay_ms(1500);
P60=1;
delay_ms(1500);
P60=0;
delay_ms(1500);
P60=1;
delay_ms(1500);
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
P60=0;
delay_ms(500);
P60=1;
delay_ms(500);
}
当然,这是一直比较简单的手段,那如果非常多的时候呢,那手都得打断,我们可以采取函数,如do while,或者for函数的方式
不仅提高了代码可读性,还提高了编程效率
18344371880
发表于 2023-5-22 23:00:51
第七集打卡:
按钮消抖:其实有两个办法,一个是软件消抖,也就是检测到按下的时候,延时有一段时间,再检测是否被按下,如果是就执行程序,还有一种办法就是硬件消抖,其实就是焊接一个瓷片电容,起到滤波的作业
为什么要消抖,主要是单片机反应是很快的,如果不消抖可能会存在执行两次程序的情况
if函数:if函数里有一个经常犯的错误就是if(KEY=0);这个是错误的函数,只有一个=,那是赋值的意思,两个等于才是判断的意思,要写成if(KEY==0);
if不仅仅仅是if,还要else,也还有else if,else就是否则,else if 就是再如果
状态取反:也就是取反电平状态,原本是1的就变成0,是0的就变成1,但还是那句话,程序反应时间是在几微秒的,所以说,我们要让他锁死,也就是while()判断,确保按下一次就是取反一次,而不会一直取反
按键也可分为按下后执行,也可抬起后再执行,其实很简单,就是锁死在后,程序在前就是按下执行,锁死在前,程序在后就是抬起后执行
LED等左移再回来左移,可以采用检测取判断,然后再赋值,还有一个办法,就是采用数值的形式,先把0xfe,0xfd,0xfb等等的输入到数组里去,然后再配合if函数和一个变量也能实现循环的效果
然后关于冲哥中途说的,怎么样中途的时候实现右移,我觉得最优方案应该就是采用数值的方式,左移是变量++,右移就是变量--
流水灯的话,那就直接for函数再加上判断就好啦
再说说课后作业,切换led不同的输出效果,其实就是数值输入比如0xfe,0xa5,0xe3等等,再多不怕,就能实现不同的效果了,而且从某种意义上来说,这个数值没跑完的时候,是不会有重复的效果的
yuyy1989
发表于 2023-5-23 08:54:22
23集打卡,https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=2110&pid=15901
8051启蒙者
发表于 2023-5-23 10:41:45
冲哥视频真的精品!打卡学习送实验箱啦~
18344371880
发表于 2023-5-23 14:39:14
第八集打卡:
有源蜂鸣器和无源蜂鸣器的区别就是,前者仅需输入电平就可以发声,后者需要输入pwm信号才可以发声
这上半段主要还是对if函数进行了强化练习,关于课后作业,我是这样理解的,还是采用if函数的形式,只要启动这个程序后,赋值一个变量为1,然后其他按键按下的时候,不仅检测是否按下,还检测这个变量是否为1,如果为1就不执行,直到我们再按下按键3对他进行置零,当然,会有人问,这个一个按键能进行连个操作,其实就是if和else的配合啦、
然后下半段就是关于课后作业的讲解,确实也是和我描述的思路类似
其实我觉得,学习单片机,学习C语言,就是一个逻辑的问题,只要逻辑通畅,其实就已经入门了,要是没有逻辑性,哪怕你对单片机再了解,对C语言再熟悉,都做不出好的产品来