
跟着吴坚鸿老师学单片机
文章平均质量分 77
本专栏为我学习《手把手教你单片机程序框架》的学习笔记,吴坚鸿老师原创【文章原文部分为吴老师原创帖子】,原文链接:https://bbs.21ic.com/icview-691804-1-1.html
小辉_Super
..
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跟着吴坚鸿学单片机——第16天:矩阵键盘的组合按键触发
代码和上一个实验(矩阵按键单击)相比,变化挺大,因为上一个实验同时只判断一个按键的状态,但本实验要同时判断16个按键的状态,所以用了数组来存放每个按键的消抖计数值和自锁状态。此外,还增加了多个按键的组合判断。原创 2021-11-27 23:03:08 · 2815 阅读 · 10 评论 -
跟着吴坚鸿学单片机——第15天:矩阵键盘单个触发的压缩代码编程
吴老师提到,他这份代码将上一个实验代码的1558个字节压缩到860个字节的程序容量,将近压缩了一半,压缩的代码全部来自key_scan函数。在上一讲中,吴老师说“代码写多一点,可读性强,修改起来也非常方便”,吴老师经验丰富,他这样说肯定有他的道理,但我觉得本实验中压缩后的代码可读性也不差,或许是因为我对矩阵按键扫描的原理比较熟悉了,所以才会这么觉得。(不过说实话,压缩后的代码确实需要动动脑子才能看懂,不像上一个实验那样直观,但这种让人读不懂的代码不就是人们最喜欢的吗——喜欢装X。。。)不管怎样,我觉得原创 2021-11-27 23:02:20 · 909 阅读 · 2 评论 -
跟着吴坚鸿学单片机——第14天:矩阵键盘的单个触发
这次的代码最大的特点就是量大,key_scan函数的switch语句有12个case,key_service函数的switch语句有16个case,代码是真的多,但是只要搞懂了实现过程,你就会发现,核心的部分代码量并不多。首先是扫描函数(下面是核心代码),这部分代码只检测第一列按键(将key_dr1置为低,其他都置高),检测4行按键(key_sr1-key_sr4),如果检测某按键的行电平为低,其他行都是高电平,说明该行的按键被按下,又因为当前检测的是第1列,所以就能确定按下的按键的行数和列数,即确定了原创 2021-11-26 01:19:44 · 865 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第13天:按住一个独立按键不松手的加速匀速触发
这是所有按键触发方式里最复杂的一个,变量太多,我就不分析了,直接练习吧。原创 2021-11-25 23:50:13 · 971 阅读 · 2 评论 -
跟着吴坚鸿学单片机——第12天:按住一个独立按键不松手的连续步进触发
还是按照惯例,分析核心代码:这次比之前的实验多了一个`uiKeyCtntyCnt1`计数器,用来记录连按触发时连按的时间。下面代码的前半部分和之前的一样,也就是说单击按键和之前的实验没有区别,但是如果第一次按下后没有松开,再过1秒,程序就开始间隔为0.25秒的连续触发,直到按键松开。原创 2021-11-24 23:31:04 · 1058 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第11天:同一个按键短按与长按的区别触发
吴老师原文中keyscan()函数的注释没写好,这部分代码也是本实验的核心代码,下面简单分析一下核心代码:如果按键没被按下,就对一些标志进行清理(按键自锁、按键消抖计数值)。由于本实验需要处理按键短按,所以这时还要判断按键的短按触发标志ucShortToucFlag1(该标志为1说明按键已经按下过,但还没有到达长按的要求时间)如果短按标志为1,则设置按键功能值(按键1短按对应功能1)。如果检测到有按键按下,且ucKeyLock1为0(按键刚被按下),此时对uiKeyTimeCnt进行累加(进行去抖延时原创 2021-11-23 23:15:12 · 1528 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第10天:两个独立按键的组合按键触发
与之前的实验相比,本实验不同之处在于` if(key_sr1==1||key_sr2==1)`这行语句,单个按键只需要判断一个按键被按下,而组合按键需要判断两个按键是否同时被按下。其他代码几乎没区别。原创 2021-11-22 23:49:26 · 2062 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第9天:独立按键的双击按键触发
双击版的按键实验和单击版按键差别不大,变量上增加了ucKeyTouchCntx和uiKeyIntervalCntx,前者用于记录按键有效按下的次数(在双击间隔时间内有效),后者是双击间隔时间计数器。代码结构上的改动也不大,增加了下面这段代码(if(ucKeyTouchCnt1>0)之后的那部分),这部分代码的功能是:先判断当前是否是第二次按下(第一次按下时,ucKeyTouchCnt1已经加1),如果是,开始累加uiKeyIntervalCnt1。当uiKeyIntervalCnt1大于const_i原创 2021-11-21 00:41:28 · 1682 阅读 · 2 评论 -
跟着吴坚鸿学单片机——第8天:在定时中断函数里执行独立按键的扫描程序
吴老师说这是他用的最多的一种方式,不过我很少会将按键扫描放到定时器服务函数中,因为在一些对时间苛刻的应用中,定时器代码越少越好。这个版本可以说是上两个版本的融合版:第一个版本的计数值累加是放在KeyScan函数中,但计数间隔不固定(由main函数while循环内的代码量决定);第二个版本的计数值累加放到定时器中断中,KeyScan函数只负责开启或关闭计数,计数间隔为一个定时器中断间隔。而这个版本,直接将KeyScan函数放到定时器中断函数里,这样一来,按键检测的间隔时间就变成了定时器中断的间隔时间(吴老原创 2021-11-20 23:58:06 · 2928 阅读 · 4 评论 -
跟着吴坚鸿学单片机——第7天:在主函数中利用累计定时中断的次数来实现独立按键的检测
这一讲的代码和上一讲差别不大,改动的地方包括:(1)增加了定时器计时开关ucKeyStartFlag1和ucKeyStartFlag2,替换原来按键服务函数中的计数值累加。(2)按键计数值uiKeyTimeCnt1和uiKeyTimeCnt2放到了定时器中断中,这样的好处是提高了按键消抖延时的准确性。原创 2021-11-19 00:22:30 · 811 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第6天:在主函数中利用累计主循环次数来实现独立按键的检测
吴老师的按键驱动框架应该说是很经典了,我在自己摸索的过程中也是使用了类似的框架(不过计时肯定不会放main函数中),但是总是觉得肯定有更高级的做法,直到今天看到吴老师的框架,发现按键处理并没有太复杂(至少这个简单的框架就能应用到很多场景中)。原创 2021-11-18 22:39:59 · 1183 阅读 · 5 评论 -
跟着吴坚鸿学单片机——第5天:蜂鸣器的驱动程序
吴老师提到,这个程序已经将他的实战程序框架完整展示,原来,一个实用的单片机程序框架竟然如此简单,只需要一个switch语句、个步骤变量、再加一个累加定时计数值,最后在定时器中断中提供计数值更新(这个系统的心跳),这个简单的微型系统的确不错,麻雀虽小五脏俱全。原创 2021-11-04 19:12:52 · 2080 阅读 · 3 评论 -
跟着吴坚鸿学单片机——第4天:累计定时中断次数使LED灯闪烁
通过定时器累加实现延时这种方法我在实战中也能轻易悟出来,但吴老师凭借自己丰富的实践经验,告诉我们在使用定时器中断实现累加延时时需要注意的事项:1:在定时器中断里,如果要操作一些全局变量(除了延时期间的累加值),比如外部的状态值,且这些值可能被外部函数改变,这时需要先将定时器中断关闭,然后进行赋值操作(如累加计数值清零),不然可能会是程序存在隐患。的确,一般人都能意识到这点。2:定时器中断的间隔应该适宜,不能过大,过大会导致计数分辨率太小,也不能过小,,,原创 2021-11-01 22:23:44 · 988 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第3天:累计主循环次数使LED灯闪烁
通过循环次数的累加实现延时是一种十分实用的延时技巧,在处理一些对时间精度没要求,又要不间断切换状态的任务时,就可以使用这种方法实现延时处理。虽然用定时器会更好,但这种方法的特点是操作简便,不用配置定时器。原创 2021-10-31 11:58:37 · 1068 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第2天:delay()延时实现LED灯的闪烁
本文提到了他定义的三区一线理论,第一区:initial_myself(),用来初始化单片机寄存器和外围高速设备,继电器初始电平、LED默认状态、蜂鸣器默认电平等,先初始化它们是为了防止刚上电之后,由于输出IO口电平状态不确定而导致外围设备误动作;第二区:initial_peripheral(),用来初始化不要求上电立即处理的外围芯片和模块,液晶模块,AT24C02存储芯片,DS1302时钟芯片,这些都是通过串口或并口和单片机通信的外设;第三区:while(1){}主函数循环区属于第三区,专门用来编写被循环扫原创 2021-10-30 19:59:41 · 2601 阅读 · 0 评论 -
跟着吴坚鸿学单片机——第1天:吴坚鸿谈初学单片机的误区
对于我一个刚入行的单片机小白,能学到吴老师这样出自公益心而写的技术文章,我深感幸运,这犹如茫茫汪洋中发光的灯塔,他告诉我们单片机开发并不难,只要先掌握一些基础的知识点:运算符、逻辑关系符、数据类型、进制转换、函数、数组,这些都是C语言的基本知识,通过对这些知识的应用,我们就可以编写出任何逻辑功能的单片机程序。希望能跟着吴老师,尽快地完善我的单片机技能。原创 2021-10-30 16:52:51 · 851 阅读 · 0 评论 -
[51单片机] 免费授权给全世界的单片机教程——吴坚鸿
谷歌的安卓系统免费授权给全世界的手机厂家,我深受感动,我决定用毕生的精力写一个单片机教程免费授权给全世界的出版社和做单片机学习板的厂家,然后再用毕生的精力不断修改完善升级,一年至少发布一次最新的教程版本,我本人不卖书也不卖学习板也不搞线下培训永远不考虑在这件事情上去赢利,纯粹是为了自我价值的一种成就感。我今后也会在此教程里主动淡化自己个人的名字,真正把它做成一种公共资源。《从单片机基础到程序框架》从2016年开始写,每周一帖,计划到2020年左右可以完成初稿,会涉及单片机基础,程序框架,汇编程序,硬件知识转载 2021-10-10 16:04:26 · 833 阅读 · 0 评论