标题: 请工程化,定制化你的单片机代码 [打印本页]

作者: Similarv    时间: 2019-6-6 11:48
标题: 请工程化,定制化你的单片机代码
- 系统的时钟基线 -- 按键函数举例 -
  1. void keyPress(){
  2.     static unsigned int key_press_time = 0;  // ……请记得标为静态变量
  3.     if(K1==0){
  4.         if(++key_press_time <=0 ) --key_press_time;//计量按键时间,并避免数据溢出
  5.         if(key_press_time==3000){
  6.             //在此写下按键长按3s时要做的事情;
  7.         }
  8.     }else{
  9.         if(20<=key_press_time && key_press_time < 3000){
  10.             //大于20ms小于3s,视为短按,在此写下写短按的处理代码
  11.         }
  12.         key_press_time=0;
  13.     }
  14. }
复制代码


-  多个时钟基线的方案  -
-  函数应该放在哪个时基里?  -
作者: Similarv    时间: 2019-6-6 16:41
如果有需要,我可以把相关的主程序和架构打包上传……不过说实话这些代码随便敲敲就有了,需要锻炼的是一种“精准控制”软件的逻辑的思维。
跑快了的东西我们把它放慢些,跑慢了的东西给它放快些。
对于一个系统来说,“平衡”是很重要的事情。

最后再说一句,while(1)大循环里面不要放“delay();”或者“while(按键被按下);”了……
作者: 13327291097    时间: 2019-6-6 20:53
很好的文章,请继续。感谢!
作者: nsush    时间: 2019-6-7 00:36
我对delay1s(); delay500ms()这样的延时函数就很不爽,当然程序流程很简单的,用用也没什么,如果是一个还算比较长的程序,使用delay1s(); delay500ms()这种就是在人为迟滞片子的运行,响应不过来又要骂,完全不会看自己做的程序写的是什么狗 p。你可以发现,凡是这样搞的,里面的变量,定义乱七八糟,想怎么写就怎么写。只要编译的过,不求后面优化。
以前的专业程序员,可是对单片机了如指掌,每一点一滴的性能,一个字节都很珍惜,写的程序兼职就是艺术品。
之前我们这也有个做机构设计的,画的加工件,完全不考虑加工难度,想怎么画就怎么画,机构极度粗 暴yu 蠢,我看不下去了,问他还就一句话,加工不管我的事,一个月不到就让他滚 蛋了。
作者: 1339337425    时间: 2019-6-7 00:42
真的是好文章,对51定时器的理解更深了,原来程序还能这么写
作者: Similarv    时间: 2019-6-10 10:04
nsush 发表于 2019-6-7 00:36
我对delay1s(); delay500ms()这样的延时函数就很不爽,当然程序流程很简单的,用用也没什么,如果是一个还 ...

哈哈哈,做技术的可不能只管自己那小小的一亩三分地啊,不去学习和进步终究要被淘汰的。
还有些人在步入一个新领域的时候总是抱着玩一下的心态,勉强能用就行,却不想把事情做到更好,其实也是自己限制住了自己的成长。
作者: Similarv    时间: 2019-6-10 17:25
@admin 这应该是个比较长的教程,预计下下次更新才能写完,届时再发些源码和参考例程
作者: gm388    时间: 2019-6-10 21:08
不错的文章,希望有后续
作者: abc111111    时间: 2019-6-11 10:13
很好,学习了,现在实践一下
作者: muzhi    时间: 2019-6-12 11:56
学习了  很受用  会慢慢去尝试应用  期待后续
作者: m182892    时间: 2019-6-13 09:04
谢谢分享,多发一些类似文章。
作者: 无语奥苍天    时间: 2019-6-13 10:53
他们写程序粗的不行,可能自己觉的学个框架就算是学到了整个语言的精华,殊不知差得远呢。
作者: qijun68    时间: 2019-6-13 11:30
支持持续更新,很好的东西。
作者: s1gm    时间: 2019-6-13 12:24
好文章,好理论,!通熟易懂!
作者: gpdt3209    时间: 2019-6-13 13:46
期待楼主的新文章
作者: univers    时间: 2019-6-13 21:19
专家讲解,学习了。
作者: abc111111    时间: 2019-6-14 02:25
感谢楼主,学习到了
作者: gt00666    时间: 2019-6-14 06:48
这个必须加精啊,新手不知道有没有收藏功能
作者: xiaojian365    时间: 2019-6-14 08:38
很不错的文章,启迪匪浅。
作者: 向日葵男人    时间: 2019-6-14 09:24
好文章!
作者: 狂野的野马    时间: 2019-6-14 10:18
很不错的文章,请继续
作者: stlong    时间: 2019-6-14 11:31
感谢楼主的文章!
作者: 亚可    时间: 2019-6-14 17:13
怎么关注楼主啊?感觉写的很有意思
作者: kissme    时间: 2019-6-16 11:24
新手完全不晓得你说的啥玩意
作者: Similarv    时间: 2019-6-16 12:05
kissme 发表于 2019-6-16 11:24
新手完全不晓得你说的啥玩意

那就请新手(自称)们加油,这帖子本来就是进阶教程,希望他们先将基础打牢
作者: pxj666    时间: 2019-6-17 18:05
感谢楼主,学到了很多
作者: QZQ1973    时间: 2019-6-17 22:30
很不错的文章
作者: ealoo    时间: 2019-6-18 09:05
很好的编程思路,条理清晰,把复杂的事情简单化。
作者: JokerAlon    时间: 2019-6-18 12:55
好贴!!!
作者: bruce-lou    时间: 2019-6-18 16:16
送人玫瑰,手有余香
作者: yachcs    时间: 2019-6-19 15:30
很好的技术贴
作者: wulingqing    时间: 2019-6-20 08:39
很好的文章,请继续。感谢!
作者: 人有福    时间: 2019-6-20 10:48
楼主经验丰富,编程思想总结的很好,文章写得也很棒,希望可以继续分享,感谢!
作者: tesrsm    时间: 2019-6-20 12:01
去除按键的抖动 不用延时函数的话,怎么处理
作者: Similarv    时间: 2019-6-20 13:30
tesrsm 发表于 2019-6-20 12:01
去除按键的抖动 不用延时函数的话,怎么处理

用静态变量去统计按键的时间,随后对此时间进行裁决。
延时只会让你的程序卡在那里一段时间,动弹不得。
作者: lianzai    时间: 2019-6-20 13:46
好文章,不知楼主能否弄成pdf格式上传呢,想保存起来
作者: Similarv    时间: 2019-6-20 14:29
lianzai 发表于 2019-6-20 13:46
好文章,不知楼主能否弄成pdf格式上传呢,想保存起来

等我抽空把状态机的下半部分写完先再说吧
作者: 1534545848    时间: 2019-6-20 18:27
这样就是操作系统的雏形
作者: xqs_118    时间: 2019-6-21 15:13
高手,膜拜了。
作者: jacklgl    时间: 2019-6-24 11:34
不错学习了
作者: csanta    时间: 2019-6-24 12:56
很实用!谢分享!
作者: kip1998    时间: 2019-6-24 17:21
写的很好楼主niubi,优化设计真的要很仔细的打磨!
作者: wangwing    时间: 2019-6-24 20:26
非常有指导意义
作者: wangwing    时间: 2019-6-24 22:33
非常有参考意义,受教了
作者: TTQ001    时间: 2019-6-25 09:10
好技术, 好文章,感谢分享


作者: 深情不是舔    时间: 2019-6-25 15:23
模块化值得学习
作者: genbenbuhui    时间: 2019-6-27 10:47
学到了 感谢楼主
作者: 凯旋小飞    时间: 2019-6-27 17:25
小生愚钝,指导内容抱回家感悟,感谢楼主教导!
作者: univers    时间: 2019-7-3 22:51
我以仔细看了一遍,谢谢大神。
作者: scq330    时间: 2019-7-5 00:25
新手努力学习中,谢谢楼主的好资料。
作者: m182892    时间: 2019-7-5 09:00
期待后续章节,源程序打包上传。
作者: yzhbyyy    时间: 2019-7-5 10:07
受益匪浅啊,继续学习。
作者: FJ2018    时间: 2019-7-5 10:49
好文章,值得学习
作者: cliang223    时间: 2019-7-5 14:32
写的很好,很值得学习
作者: 鹏博士PBs    时间: 2019-7-6 00:23
涨知识了
作者: 小小的树叶    时间: 2019-7-6 08:13
好文章,谢谢分享
作者: 164652999    时间: 2019-7-6 17:20
好文章,让人茅塞顿开
作者: 阿纹    时间: 2019-7-6 21:38
思路很重要,经验也很重要,感谢分享。
作者: waerdeng    时间: 2019-7-7 09:11
感谢楼主谢谢分享
作者: wj_yuq    时间: 2019-7-7 11:43
好文章,随着涉及的“设备”从LED开始逐渐广泛到以功能、总线林林总总不同类别的器件,工程化,系统化,模块化是必由之路,也是掌握编程软件由入门到不同深入水平的标志
作者: xoxojojo    时间: 2019-7-7 14:19
打开新世界大门
作者: Similarv    时间: 2019-7-7 19:26
很抱歉的告诉大家,之前的想法还是太乐观,现在每天忙成狗,完全不确定啥时候能抽时间写完,7月15日要是没有更新的话还请大家谅解。

不过我是不会就这么停笔的,只是不知道啥时候有时间写而已。作为打工仔,真的身不由己。
为了不辜负大家的期待,下次更新时我会把文档做成pdf,附带源码,流程图,表格一并上传。

其实还有很多可以写的地方,但是现在这篇帖子就写这3点——时基,模块化,状态机——已经够大家消化一阵子了。而且,如果帖子的篇幅太长了,其实不利于阅读的。
以后如果还有别的分享,我会另开帖子的,多蹭点管理员的黑币,哈哈。

作者: 313583581    时间: 2019-7-7 22:06
焕然一新的思路,受教了
作者: 2448289424    时间: 2019-7-8 01:36
楼主是出来工作了还是还在读书自学单片机,看了你发了这篇写得挺好的,之前读书那会对时钟这东西根本就没概念,就像你说的只会delay 或者while死等,,,你发的这个对于在自学或者准备入门单片机的人来说很好,,想到以前在学校老师哪懂这些就按书本delay教,根本不会联系实际去告诉我们,直到毕业出来工作才知道自己多么笨,,还停留在delay这玩意,,看完你写了这个真是感慨!!!
作者: mengchen12    时间: 2019-7-8 05:34
楼主的创意非常好,支持!
作者: m182892    时间: 2019-7-8 08:21
我觉得这个帖子可以继续加深,例程要多,到一定的程度可以出版书籍。
作者: shouhmzhl    时间: 2019-7-8 08:45
不错,非常感谢你的分享!
作者: 大娃丶    时间: 2019-7-8 09:03

高手,膜拜了。
作者: perfect98    时间: 2019-7-8 10:20

感谢楼主谢谢分享
作者: Similarv    时间: 2019-7-8 19:54
2448289424 发表于 2019-7-8 01:36
楼主是出来工作了还是还在读书自学单片机,看了你发了这篇写得挺好的,之前读书那会对时钟这东西根本就没概 ...

刚好毕业一年而已,在这过程中也算学了点皮毛,就想整理一下思路
作者: Similarv    时间: 2019-7-8 19:57
m182892 发表于 2019-7-8 08:21
我觉得这个帖子可以继续加深,例程要多,到一定的程度可以出版书籍。

哦?小伙子,我觉得你说的很有道理耶,不过写书确实是个大工程,篇幅也要够,目前还是以分享为主,日后再整理成稿。
作者: a524075233    时间: 2019-7-9 06:54
优秀的文章 感谢楼主的指导 我会继续努力
作者: donydong    时间: 2019-7-9 13:54
非常好,期待更新。
作者: 我要打十个    时间: 2019-7-9 19:36
看到开口的吐槽就深得我心
作者: liu888888    时间: 2019-7-10 15:17
这是实战贴,接地气,看懂了受益颇多
作者: lsz28    时间: 2019-7-11 00:52
很好的文章,请继续。感谢!
作者: ztb096001    时间: 2019-7-26 08:27

谢谢分享,多发一些类似文章。
作者: zhuyuye    时间: 2019-7-26 08:57
分析的好极了,加油!
作者: qq76832893    时间: 2019-7-26 08:59
感谢大神,期待后续!
作者: 小黑屋525    时间: 2019-7-26 09:11
好文,最近师傅也这样子说太浪费单片机资源。
作者: 454473587    时间: 2019-7-28 11:09
谢谢楼主慷慨,很好的一篇文章,不过得慢慢消化,期待源码
作者: yasi666    时间: 2019-7-31 16:53
谢谢了,这位兄弟分享了他的编程精髓,看了之后很受教。我是一个初学者,万分感谢
作者: shenchaobiao    时间: 2019-7-31 21:08
好文,这是结合硬件实际的结构化编程思想、
作者: ccdmcu    时间: 2019-8-2 16:22
按键的松手检测呢?怎么用定时器写?
作者: 难得糊涂2018    时间: 2019-8-2 18:55
学习了,你的想法好!
作者: 上善若水001    时间: 2019-8-2 19:56
感谢发出这么好的文章,持续关注中!
作者: Similarv    时间: 2019-8-2 20:36
ccdmcu 发表于 2019-8-2 16:22
按键的松手检测呢?怎么用定时器写?

我不是给了个keyPress()程序么,你再好好看看。
简单来说,有键按下时,时间就会++;
无键按下时,时间就会清零。
但在清零之前会先检查,时间是否大于0,时间值大于0(或者消抖值)说明曾经有键按下过,并且刚刚松开。这时候处理“这次按键”不就好了。
作者: 泽文i    时间: 2019-8-5 10:34
将单片机程序工程化的好处,就在于后期升级和改进,将变得无比的方便。尤其是模块化以后,对相关的功能进行升级,只需要针对这一部分进行修改就可以。


作者: DJDN    时间: 2019-8-7 08:33
Mark      

作者: happynocn    时间: 2019-8-7 09:04
感谢分享,前来学习一下。
作者: 鹏博士PBs    时间: 2019-8-7 10:14
不错不错 涨知识了
作者: laishu12345    时间: 2019-8-8 17:09
楼主的程序确实写得很好,思路清晰,比教材上的程序更实用
作者: 252622979    时间: 2019-8-8 20:46
好文章,收藏了
作者: duanyazhou    时间: 2019-8-9 08:38
难得的良师
作者: zyi    时间: 2019-8-9 10:26
工程复杂用状态机方式编程,或上实时系统
作者: zcl1976    时间: 2019-8-9 12:09
文章不错,搞技术的多替客户想一点,肯定没错。忽悠是做不了长远的。
作者: tt98    时间: 2019-8-9 14:31
写得不错,后续有更深入的文章更好!
作者: a89588038    时间: 2019-8-9 14:38
持续关注,楼主厉害!!!!
作者: laishu12345    时间: 2019-8-9 17:08
if(++key_press_time <=0 ) --key_press_time;//计量按键时间,并避免数据溢出        楼主问个问题,key_press_time这个参数是无符号整型,++key_press_time 不会小于等于0吧!
作者: shenyuqiu    时间: 2019-8-10 10:38
楼主这文章比那些所谓的教科书好多了,那些教科书按键消抖动不动就是delay(20ms),真是误人子弟,真正出来做到大型项目才知道 DELAY是多么不实际。希望楼主继续更新,最好转成PDF,多点例程,尤其是一些按键的,短按,长按,双击组合键例程。现在绝大部份写按键程序都喜欢delay消抖,while松手检测。郭天详的书也是这么教的,一点不实用




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1