32G12K128学习记录
32G12K128是我第一个学习的单片机,目前刚上大二,想学习单片机一块的知识,有c语言,数据结构和模电的基础希望能学得轻松一点。第一天:第1集:介绍了单片机是是什么,单片机是一种集成电路芯片,它集成了计算机的基本功能部件,内含cpu,存储器,io口等。讲解了原理与应用第二集:对STC试验箱的外设进行介绍,讲解了一些硬件的功能第三集:讲解开发环境如何搭建,keil5软件和stc-isp的使用,感觉keil5的环境搭建真的很复杂,搞了好几次才搞定,为什么keil5没有自动补全功能呀,编码过程中变量打错大小写也没提示,这个能调吗求教。第四集:讲解了LED灯的点亮原理,通过产生高低电平来实现LED灯的点亮,创建了一个用来复制的基本项目,还实现了软件复位可以解放双手不用每次烧录都需要按复位按钮了,虽然弄了好久。第五集:讲了ASCII值,二进制的转换,printf函数,这些我大多都学过,但是我在实践中还是产生了很多问题比如if( DeviceState != DEVSTATE_CONFIGURED ) // continue; if( bUsbOutReady ) { usb_OUT_done(); }为什么输出只能在这一部分中写呢,这是什么呀,然后我想创建变量,数组啥的都会报错,报错位置都在创建变量和数组的地方,然后我后面发现把创建变量放在循环内部创建就不会 报错这是为什么呀,有人解答吗,对了还有,有人知道这个软件的调试功能怎么用吗,为什么我设置不了断点呀,求救。 u16 DATA是我定义的变量 第二天:
第一天的问题已经解决啦,但是不知道原因..... ,可能是之前的环境搭建问题吧?
第六集LED电灯和花式点灯,定义一个delay函数可以实现闪烁功能,延时功能还是非常好写的,然后我在网上查了一些资料,发现点灯是可以对那一整排进行操作的,例如让P6=1111 1110;那么就可以只让最最后一个灯亮啦
而且可以把二进制转换成16进制,如上的可以等效为P6=0xFE;这样更加简短更方便,应该还可以用数组做个变化的灯型,试验了一下果然可以。
第七集按键点灯,这个上面就发现了很多问题......,先讲内容吧,通过查看P32等端口的电位变化来判断按键是否按下,因为机械抖动的问题可能会导致开关误判,所以可以稍微延迟来减少误差(但是我感觉真的无法避免,是这个原因吗?我用同学的试验箱测试的时候发现按键会多次判断,会导致按键写的程序多次执行,比如我写的按下切换灯型程序,它会连续瞬间执行两次甚至多次?这个可以避免吗,增加延时可以避免吗?),然后就是第二个问题为啥使用bool变量会报错呀?如图:attach://53741.png
甚至false也报错了,为啥会没定义呢,甚至编译器都给bool类型标记了都报错了。
我找了一下头文件如图: attach://53742.png
里面也包含了stdio.h呀,我又有了发现头文件中把bit加了一个别名BOOL,但是也只能用0和1表示呀。最后我也就只能使用bit类型的变量了,如果用枚举的话应该是可以写出来一个bool类型的变量的,但bool不是c语言的头文件stdio.h中的变量吗,为什么无法使用呢。
有人能解答我的疑问吗,求救{:4_199:}
有大佬来帮忙吗 BOOL大小写的问题,还有他这个typedef bit BOOL相当于关键字的重命名,bit是用来定义位变量的,值支持0,1不支持true和flase,如果要支持可以加个
#define true 1
#define flase 0
{:4_165:}{:4_165:}{:4_165:} 这学习能力太厉害了👍 hyjs 发表于 2024-8-15 06:44
BOOL大小写的问题,还有他这个typedef bit BOOL相当于关键字的重命名,bit是用来定义位变量的,值支持0,1 ...
哦哦,明白了,感谢感谢{:5_300:} 共同学习,共同进步 第三天:第二天的按键多次触发问题解决啦{:4_188:},冲哥视频中说过按键的过程中会产生机械振动导致误触,所以要在按键前加上延迟函数。我就推测是按键结束后会不会也有振动,产生多次触发。
然后我就去网上找按键去除机械振动的方法,果然网上给出的去振动的代码中有去松开振动的延迟。
去机械振动代码如下:
if(key == 0) //假设key是检测按键的引脚,0为通路即按下
{
delay_ms(10);
if(key == 0)
{
/*****按下后执行的代码******/
}
while(!key); //防止误触
delay_ms(10); //去机械振动
while(!key); //判断是否松开
}
{:4_188:} 本帖最后由 不会书 于 2024-8-16 02:33 编辑
第八集:蜂鸣器的应用,由蜂鸣器电路图就可以知道将P54设置为低电压时可以使三极管进入饱和导通状态,设置为高电压就为截止状态,即P54引脚=0时导通蜂鸣器触发,P54=1截止不触发。
通过以上原理可以实现控制蜂鸣器,作业结合前几节课知识即可完成。
第九集:数码管,原理与led类似,由多个发光二极管组成,单个数码管的显示顺序为顺时针a,b,c,d,e,f,g,dp。由原理图知P6可以控制所有数码管共用的笔画。P7则是控制多个数码管的显示。
但是我有点疑问:P6所有数码管共用的话那岂不是每一个数码管的显示都是一模一样的,那不是有点奇怪吗.....
还有一个小发现:P6和之前的LED的引脚是共用的,冲哥这期视频中好像是直接丢弃了led灯,我尝试了一下把P40口打开,然后发现led灯还是可以用的,led显示的都是数码管的时P6所存储的。