fcxqczzyjdxx
发表于 2023-5-21 15:33:37
本帖最后由 fcxqczzyjdxx 于 2023-5-21 18:08 编辑
第十三集 第四讲 简易多任务处理
KEY_Deal函数,如果放在定时器里面做按键状态的扫描,当单击状态时,如果刚好主函数没有获得单击状态,这样就丢了一次按键单击,也可能主函数的程序多次获得了单击状态,这样是不是应该有个标志位,在使用过一次后,按键状态就切换到另外一种已经使用过单击状态。
--------------------------
课程讲解的是把按键扫描和按键功能放到了if(TIM_10MS_Flag==1)里面,保证按键扫描在按键功能前面,这时的按键每次变化都能被按键功能识别到。
fcxqczzyjdxx
发表于 2023-5-21 19:36:12
第十四集 矩阵按键
用for 代替if判断密码
bit a=0; //1 密码正确 ,0 密码错误
for(u8 i=0; (Show_Tab==1)&&(i<8),i++)
{
a=1;
//开锁
}
if(a==0)
{
BEEP_ON(200);
}
如果密码不都是1,每一位都不相同,可以把密码存到一个数组里面
u8 mima={1,2,3,4,5,6,7,8};
for(u8 i=0; (Show_Tab==mima)&&(i<8),i++)
{
//开锁
}
扩展功能
这样修改mima数组内容就可以修改密码
fcxqczzyjdxx
发表于 2023-5-21 20:45:30
第十五集 外部中断
STC32G的外部中断触发方式上升沿下降沿触发和下降沿触发
需要及时相应的开关都需要外部中断,比如限位器,在轨道上运行的设备,碰到限位器,及时停止。
神农鼎
发表于 2023-5-21 21:12:32
也抓紧请 STC 的客服立即 免费+包邮送 STC32G12K128实验箱 V9.6版,实验立即做起来,提高学习效率
【免费+包邮】 送/申样热线:0513-55012928、0513-55012929、0513-55012966
工作时间:8:30-12:0013:00-17:30(周一 到 周五, 法定节假日除外),也可加如下 QQ 或 微信 申请
加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592要求 【免费+包邮】 送, 还免费教你仿真
加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教你仿真
加STC华东区客服聂经理QQ:2593903262;微信:18106296598要求 【免费+包邮】 送, 还免费教你仿真
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593要求 【免费+包邮】 送, 还免费教你仿真
加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876要求 【免费+包邮】 送, 还免费教你仿真
加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教你仿真
加STC东北区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教你仿真
加STC西南区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教你仿真
fcxqczzyjdxx
发表于 2023-5-21 23:12:27
第十六集 IO中断
除外部中断设置的外部中断外,所有IO口都可以做外部中断。
IO中断在按下后不松开,设置成高电平触发或低电平触发时,中断会反复触发,直到松开。数据手册上上升沿触发和下降沿触发在STC32G12K128-Beta版芯片不要使用,正式版芯片没有写,应该是可以用了,等我申请到了试验箱试试。
fcxqczzyjdxx
发表于 2023-5-27 11:02:37
第十七集 模数转换ADC上
ADC 模拟转换成数值。
用单片机内部1.19V转换成ADC反推出 Vref脚是多少伏,当Vref接电源电压时,就可以得到当前的工作电压是多少。
Vref必须接参考电源,可以用电源电压来代替。
ADC_PROWER寄存器控制ADC开关,掉电时关闭,降低功耗。
flag位,中断标志位,可以检测该为是1就可以读取现在的ADC值,需要软件清零这个位
ADC建议用慢点的时钟
fcxqczzyjdxx
发表于 2023-5-27 12:44:06
本帖最后由 fcxqczzyjdxx 于 2023-5-27 13:04 编辑
第十七集 模数转换ADC下
选着通道时,先把通道选着位清零,再赋值选择。
冲哥的写法是 ADC_CONTR &=0Xf0;
ADC_CONTR |=no;
库函数选择通道时这样写的ADC_CONTR = (ADC_CONTR & 0xf0) | channel;// 设置ADC转换通道
预编译指令,是在编译器把一部分代码划入需要便于的地方,一部分代码当做没写。
宏定义也是预编译的一部分,就是定义一段代码起个名字,这段代码可以是数字,可以是一个语句,可以是一段类似于函数的代码。用的时候把这个名字当做语句写到代码中,编译的时候,这个名字说代表的那段代码就替换了上了。
fcxqczzyjdxx
发表于 2023-5-27 19:17:18
第十八集 ADC采集电源电压和ADC按键上
芯片内部有一个1.19V基准电压。
1.19v的数值直接读取CHIPID7 CHIPID8两个寄存器,15通道读取Vref的值只用设置通道,不用设置引脚,查看数据手册20.5.4。
fcxqczzyjdxx
发表于 2023-5-27 20:39:58
第十八集 ADC采集电源电压和ADC按键中
刚刚按下触发一次,按到3秒触发一次,松开触发一次,按到3秒后每0.1秒接着触发一次。原理和按键扫描里的短按长按功能一样
-------------------
按键按下,记录下按下状态,用一个变量记录按下了多长时间,每10ms进入一次按键扫描,如果按键还是上次按下的状态,记录按下时间的变量加1,当这个数加到30ms的时候触发一次按键按下,如果没有松开,接着记录时间,当按到3s的时候认为长按,每个10ms触发一次按键按下。
fcxqczzyjdxx
发表于 2023-5-27 21:23:35
第十八集 ADC采集电源电压和ADC按键下
按钮长按和单击区分出来,长按的时候在按键值最高位写1,