找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: Similarv
打印 上一主题 下一主题
收起左侧

请工程化,定制化你的单片机代码

    [复制链接]
回帖奖励 40 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
361#
ID:915029 发表于 2021-7-28 15:20 | 只看该作者
正好可以对以后代码风格有一个方向
回复

使用道具 举报

362#
ID:953589 发表于 2021-7-29 08:08 | 只看该作者
很好的文章,加强了对定时器的理解
回复

使用道具 举报

363#
ID:915029 发表于 2021-7-29 11:13 来自手机 | 只看该作者
Similarv 发表于 2020-1-13 16:52
你的做法当然也没有问题,不过我是这么做的:
按键就只是做按键检测,并且设置相应的“按键已触发”标志 ...

想问楼主,key press time是怎样和按压按键时间联系的,也就是按多长时间,time增加多少,这点我有点想不明白,是if(++key~press~time)这个语句吗?
回复

使用道具 举报

364#
ID:451287 发表于 2021-8-2 14:58 | 只看该作者
学到了新的编程思路,不用再DELAYMS(),浪费系统资源
回复

使用道具 举报

365#
ID:957885 发表于 2021-8-2 21:33 | 只看该作者
我想问一下,这里的
“从微观上看,单片机是没法在同一时刻做2件事情的!所以,每到10ms的时候,单片机会”先把1ms的事情做完再做10ms的事“;每到100ms的时候,单片机会”先把1ms的事情做完再做10ms的事,再做100ms的事”
是不是一个单片机一个默认的优先级吗?如果是这样,那么有些程序中“忙则等待”是不是为了避免1ms的事到10ms时还没做完,两件事同时做而让单片机死机吗?
希望楼主解答
回复

使用道具 举报

366#
ID:476527 发表于 2021-8-3 08:45 | 只看该作者
queen11 发表于 2021-7-29 11:13
想问楼主,key press time是怎样和按压按键时间联系的,也就是按多长时间,time增加多少,这点我有点想不 ...

key_press_time是一个当某键被按下时,去数(第三声)数(第四声)的一个变量;
而这个变量所在的函数,是一个每1ms执行一次的函数,故而key_press_time每数一次数,按键就被持续按下了多少ms
回复

使用道具 举报

367#
ID:476527 发表于 2021-8-3 08:47 | 只看该作者
小麦种子 发表于 2021-8-2 21:33
我想问一下,这里的
“从微观上看,单片机是没法在同一时刻做2件事情的!所以,每到10ms的时候,单片机会 ...

没有你想的那么复杂,之所以是先做1ms的事在做10ms的事再做100ms的事,只是因为编写代码时,1ms的程序被放在了10ms的程序和100ms的程序的前面,你如果喜欢的话可以把100ms的程序放前面。
回复

使用道具 举报

368#
ID:958310 发表于 2021-8-4 14:49 | 只看该作者
真是好文章啊
回复

使用道具 举报

369#
ID:816988 发表于 2021-8-4 21:15 | 只看该作者
好帖子,学习中,楼主加油
回复

使用道具 举报

370#
ID:958897 发表于 2021-8-5 20:34 | 只看该作者
初学者,受益良多!感谢
回复

使用道具 举报

371#
ID:959049 发表于 2021-8-5 22:01 | 只看该作者
堪比教科书级别的文章
回复

使用道具 举报

372#
ID:927469 发表于 2021-8-25 07:03 | 只看该作者
非常好的学习贴,谢谢分享
回复

使用道具 举报

373#
ID:810999 发表于 2021-8-25 16:40 | 只看该作者
非常不错,学习了。
回复

使用道具 举报

374#
ID:585365 发表于 2021-8-26 11:02 | 只看该作者
虽然不是特别理解,但确实值得学习
回复

使用道具 举报

375#
ID:382826 发表于 2021-8-27 19:06 | 只看该作者
收藏,学习了!
回复

使用道具 举报

376#
ID:907347 发表于 2021-8-28 09:27 | 只看该作者
确实不错,大家不要用无脑循坏了
回复

使用道具 举报

377#
ID:854029 发表于 2021-8-29 16:59 | 只看该作者
虽然我看不懂,但还是觉得很厉害的样子
回复

使用道具 举报

378#
ID:569384 发表于 2021-8-31 09:06 | 只看该作者
delay有毒
回复

使用道具 举报

379#
ID:78901 发表于 2021-11-13 17:44 | 只看该作者
真是定时延时的好文章
回复

使用道具 举报

380#
ID:34149 发表于 2021-11-15 16:49 | 只看该作者
谢谢,老师的指导!
回复

使用道具 举报

381#
ID:624685 发表于 2021-11-15 17:16 | 只看该作者
看完还是有点糊涂,努力学习
回复

使用道具 举报

382#
ID:980153 发表于 2021-11-16 09:25 | 只看该作者
谢谢分享,真的是好资料!
回复

使用道具 举报

383#
ID:927850 发表于 2021-11-16 10:23 | 只看该作者
学习了,非常不错的文章
回复

使用道具 举报

384#
ID:384081 发表于 2021-11-17 08:43 | 只看该作者
高手,膜拜了
回复

使用道具 举报

385#
ID:410182 发表于 2021-11-22 15:33 | 只看该作者
多谢楼主分享!有空的话能再分享一些吗
回复

使用道具 举报

386#
ID:254747 发表于 2021-11-24 17:20 | 只看该作者
if(++key_press_time <=0 ) --key_press_time; 这句我理解不了 哪个大师给我将一下  怎么加了又减啊 是防止数据溢出吗  能讲一下吗   

回复

使用道具 举报

387#
ID:254747 发表于 2021-11-24 17:21 | 只看该作者
这个帖子安逸   我这几天就到处找 怎么把按键的 while()这个检测给干掉  没有想到在这里看到了  现在我写的程序都不用 delay了 哈哈哈
回复

使用道具 举报

388#
ID:984566 发表于 2021-11-25 11:09 | 只看该作者

很不错的文章,启迪匪浅。
回复

使用道具 举报

389#
ID:548757 发表于 2021-11-25 17:49 | 只看该作者
两年多!众望期待更新!!!!!
回复

使用道具 举报

390#
ID:875095 发表于 2021-11-27 17:04 | 只看该作者
入门必备啊,写的好
回复

使用道具 举报

391#
ID:59830 发表于 2021-11-27 18:43 | 只看该作者
不错的知识点,值得初学者学习.
回复

使用道具 举报

392#
ID:964852 发表于 2021-11-28 10:29 | 只看该作者
大师,更新下,正好想学习下状态机
回复

使用道具 举报

393#
ID:509408 发表于 2021-11-29 17:27 | 只看该作者
不同的功能函数可以单独定义一套自己的计时时基变量(通常是1ms)、调用标志、内部子步骤执行号(step)等等。其中把时基变量放进定时器里面累加或递减,一些你想要共享给外部调用数据可以定义成全局变量、方便独立调试排除问题。 以下是我常用的程序框架 (这里随便放了一段)
void Demon_B(void)  {
    if(lgRunTime_B <cTimes_B)     return;        //定时时间未到 return不往下执行。
    {
        lgRunTime_B = 0;        //定时时间清0
        if(FLAG_B & SET_Flow1){        //需要演示的标志立起?

          if(cgStep_B==0){       //步骤0
             //执行代码
            cTimes_B = 10;    //延时10ms  
        }else if(cgStep_B==1){   //步骤1
            //执行代码  
           cTimes_B = 1000;//延时1000ms   
       } else{;}
         if(++cgStep_B>5)     cgStep_B = 0;        //步骤号大于5
      }}}
按照这样思路创建不同功能的ABCD函数(名字懒得取-_-),每个函数有自己的独立延时而不会引起干扰动作。执行步骤号中也可以塞入一些带返回值函数、其他功能的全局变量、标志什么的 if 判断一下,不符合就简单粗暴的return掉,前提是你自己的逻辑思路要清晰,原则上应尽量减少函数之间的耦合以提高效率。最后主调函中用 FLAG_B 标志调用或关闭它们,很方便灵活。
回复

使用道具 举报

394#
ID:254747 发表于 2021-11-29 17:31 | 只看该作者

哪位大哥给我讲一下哦     是不是 残值  就比如  用户随便按了一下  保留的值在里面    后面自己清理了
回复

使用道具 举报

395#
ID:965189 发表于 2021-11-29 22:06 | 只看该作者
好料,是我等初哥学习的好东西。
回复

使用道具 举报

396#
ID:476527 发表于 2021-11-30 09:12 | 只看该作者

是防止它溢出,限制它只往上加,加到最大之后就不再增加
其实这个代码我一般不这么写的,这案例是我把我经常用的 宏函数 给展开了:

#define JINC(x) if(++x <= 0) --x  //自增x,且不使其溢出

这样定义一个宏之后,以后凡是只想进行 “变量自增”操作又不想要变量溢出的时候,只要直接用这个宏就好啦。
例如本案例的源码其实是:

JINC(key_press_time);
回复

使用道具 举报

397#
ID:254747 发表于 2021-11-30 09:56 | 只看该作者
Similarv 发表于 2021-11-30 09:12
是防止它溢出,限制它只往上加,加到最大之后就不再增加
其实这个代码我一般不这么写的,这案例是我把我 ...

非常感谢指导  谢谢  
回复

使用道具 举报

398#
ID:969161 发表于 2021-11-30 22:12 | 只看该作者
好资料,好文章。
回复

使用道具 举报

399#
ID:969161 发表于 2021-11-30 23:30 | 只看该作者
这个资料让我增长很多思路,写代码有明显提高了。
回复

使用道具 举报

400#
ID:986929 发表于 2021-12-2 16:15 | 只看该作者
受益匪浅
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表