阿杰爱学单片机
发表于 2024-8-29 17:39:09
本帖最后由 阿杰爱学单片机 于 2024-8-29 17:58 编辑
第十三集 简易多任务中
模块化编程之后代码看着舒服多了
取反和取非得不同之处:
在实验中终于理解了取反和取非得不同之处,下面是我实验时遇到的情况
在实验中我想按键点亮熄灭一个LED,于是写下了这一句 按键按下LED1 = !LED1;发现现象没有任何问题。
但当我想改变所有LED状态时却发现,这时候用上取非!就只能改变第一位灯的状态,让我非常疑。
突然想起之前提的问题!和~有啥区别,于是就改了一下把!改成了~现象成功了。
总结一下。
!是对一位进行取反操作
~是对每一位进行取反操作
bdata 的应用,被bdata修饰的变量可以对单独位操作(可位寻址),如下所示
XXX类型名 bdata AAA变量名
sbit XXX = AAA^0; 取第0位
sbit XXX = AAA^1; 取第1位
sbit XXX = AAA^2; 取第2位
sbit XXX = AAA^X;......... 取第X位
总结 变量名加尖括号加位数即可引用
模块化编程真好用
阿杰爱学单片机
发表于 2024-8-29 19:10:22
本帖最后由 阿杰爱学单片机 于 2024-8-29 19:12 编辑
第十三集 简易任务 中 终
感觉前面的还能听懂,这集突然上强度了,状态机,还有定时器标志位配合按键使用
感觉写的非常好,以前从来没看都过这种代码,按键数序号利用左移几位,用&运算判断
按下的案件号,还有或运算,这集感觉没啥感悟,只能说冲哥很强,之前写的代码感觉
都很随意,突然就感觉不一样了。现在也只能模仿下代码了,叫我写是完全写不出来
不过我还是有个疑问 就是那个#define定义的状态 当执行到啥时候就填写状态
感觉很奇怪,因为我之前都用的是在某个状态给某个变量置数,而冲哥直接返回状态名
,会不会有啥不妥
阿杰爱学单片机
发表于 2024-8-30 11:01:43
本帖最后由 阿杰爱学单片机 于 2024-8-30 13:29 编辑
第十四集 矩阵按键
1. 矩阵按键的优点
节省io口,好像也只有这个优点
2. 矩阵按键原理,通过获取行状态值和列状态值,最后合在一起利用switch
判断键码值
3. switch的用法
switch (判断值) //判断键值
{
case 被判断值1: 条件满足执行代码;break;满足其中一个条件break跳出判断
case 被判断值2: 条件满足执行代码;break;
case 被判断值3: 条件满足执行代码;break;
case 被判断值n: 条件满足执行代码;break;
default:条件 都不满足执行代码;break;
}
4. for的用法
关键词for
书写格式
for(变量;判断条件;变量+或-)
{
条件满足执行的代码
}
5. static静态变量加局部变量的状态判断
很巧妙说不出来,只会用
6. 模仿矩阵按键写的独立按键
不用死循环也不会一直返回键码值
7. 抄冲哥的矩阵按键代码
6. 冲哥代码写错了
我当时就觉得不对劲
把键码值清零了还咋判断那个按键按下了
下面是我焊接的矩阵按键
这次焊接没啥问题,就是感觉背面丑了点
阿杰爱学单片机
发表于 2024-8-30 13:44:20
本帖最后由 阿杰爱学单片机 于 2024-8-30 13:50 编辑
第十五集 外部中断
1. 外部中断的作用,当发生一些紧急事件,需要CPU及时响应,
当发生外部中断CPU暂停现在的工作去处理中断,然后再返回继续处理之前的事
叫做中断系统,CPU可按照中断优先级工作,每个中断可独立开启关闭中断
2.STC32G12k128只有5个外部中断,分别在36,35,30,29,27,引脚上
3.中断的初始化配置
TI X外部中断触发寄存器,写一下降沿触发,写0下降沿上升沿均可触发
IE X外部中断标志位寄存器,由硬件自动置一,和清除,保险起见初始化程序中先清零
EX X外部中断使能寄存器,写一使能,写0失能,开启和关闭中断
EA总中断寄存器,写一打开总中断
具体原理如下图
再提一点,如下图,边沿触发选择位只有外部中断0和1,才有,另外的中断是没有的
只能选择下降沿触发
代码书写