单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
上一页
8/13
下一页
楼主: Similarv
打印上一主题下一主题

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

  [复制链接]
回帖奖励40 黑币
回复本帖可获得 2 黑币奖励! 每人限 1 次
281#
ID:754694发表于 2021-1-2 22:44来自手机|只看该作者
学习了,受益匪浅!
282#
ID:865556发表于 2021-1-11 16:34|只看该作者
感谢楼主的分享,对我的帮助极大
283#
ID:161939发表于 2021-1-12 10:25|只看该作者
长知识了,原来还可以这样。
284#
ID:684871发表于 2021-1-12 12:59来自手机|只看该作者
太强了,能够提醒初学者
285#
ID:856401发表于 2021-1-12 22:04|只看该作者
认真学习51单片机
286#
ID:484408发表于 2021-1-15 20:33|只看该作者
很nice,学习了
287#
ID:750420发表于 2021-1-20 21:23|只看该作者
醍醐灌顶,结合了ucos的理解
288#
ID:102800发表于 2021-1-21 09:37|只看该作者
学习力,很不错的资料。谢谢楼主的分享
289#
ID:855897发表于 2021-1-23 08:07|只看该作者
好贴,这些没工作过的人一般是想不到的。
290#
ID:798201发表于 2021-1-24 15:10|只看该作者
新手还没看懂,目前只会while(!KEY) 判断,先收藏我会回来的,感谢楼主分享!
291#
ID:728202发表于 2021-1-25 11:11|只看该作者
谢谢教学,很实用
292#
ID:878420发表于 2021-1-25 23:04来自手机|只看该作者
这个教程真详细,码字不容易
293#
ID:880678发表于 2021-1-26 15:11|只看该作者
学习了  虽然不是很懂
294#
ID:288629发表于 2021-1-27 14:34|只看该作者
是的,程序应该标准化,至少自已要想法把自已的程序标准化
295#
ID:880128发表于 2021-1-27 15:45|只看该作者
程序标准化,有利于程序复用,规范
296#
ID:516612发表于 2021-1-29 21:39|只看该作者
写的真好,建议添加转载清楚注明出处。
297#
ID:366464发表于 2021-1-31 20:01|只看该作者
宗师级,膜拜!
298#
ID:120672发表于 2021-2-1 12:01|只看该作者
这确实是篇很好的文章!
299#
ID:520510发表于 2021-2-1 17:08|只看该作者
受教了,感觉之前学的实际基本无法使用
300#
ID:83634发表于 2021-2-9 14:59|只看该作者
这样就是操作系统的雏形
301#
ID:466112发表于 2021-2-10 08:41|只看该作者
难得的好按键处理程序,必须学习。
302#
ID:880867发表于 2021-2-10 10:17|只看该作者
好文章
303#
ID:693230发表于 2021-2-10 11:08|只看该作者
谢谢教学,膜拜!
304#
ID:699003发表于 2021-2-10 19:26|只看该作者
已收藏,对初学者有很大的帮助,值得小萌新收藏吸收,谢谢作者
305#
ID:232366发表于 2021-2-11 09:20|只看该作者
受益匪浅感谢
306#
ID:282850发表于 2021-2-23 19:25|只看该作者
讲思路的一般都是好的,赞一下
307#
ID:87000发表于 2021-2-23 21:16|只看该作者
写的不错,值得参考
308#
ID:884426发表于 2021-2-24 08:00来自手机|只看该作者
学习了,易懂
309#
ID:885875发表于 2021-2-24 10:52|只看该作者
新手完全不晓得你说的啥玩意
310#
ID:569384发表于 2021-2-24 11:50|只看该作者
以前从来没有人教过这些,后来真正做产品的时候慢慢理解了,程序中绝对不用while或delay(),可以想象整个程序就像一个车轮,一直在转圈圈,4ms转一圈,所有功能4ms执行一次,如果中途有while那么车轮就会卡顿卡顿,如果需要延时可以用一个变量进行计数,计数到100次后就执行相应的程序,比如如果是4ms转一圈,那么100次就等于400ms的延时了,这样就不会影响其他程序的执行。
311#
ID:569384发表于 2021-2-24 12:08|只看该作者
Similarv 发表于 2019-8-2 20:36
我不是给了个keyPress()程序么,你再好好看看。
简单来说,有键按下时,时间就会++;
无键按下时,时间 ...

我自己的经验是:在定时里做一个4ms的标志位,主程序里面用这个4ms扫描一次按键,有按下,计数++,无按下计数清零,加一个按下松开标志位,按下计数达到3次(消抖值)后判为成功按下并且按下松开标志位=1,未松开就不做第二次按下计数;写的有点乱,写个伪代码:

定时器中断函数()
{//假设定时中断时间是250us
     4ms计数++;
     if(4ms计数 >= 16)//4ms/250us=16
     {
         4ms计数 = 0;
         4ms标志位 = 1;
     }
}


main()
{
     while(1)
   {
       if(4ms标志位)
       {
           4ms标志位 = 0;
           keypress();
           其他功能函数();
       }
   }
}

void keypress()
{
       if(按键io口 == 0)//假设低电平为按下
       {
         if(按下松开flag == 0)
         {
               按下计数++;
               if(按下计数 >= 5)
             {
                   按下计数 = 0;
                   按下松开flag = 1;
                   //按键按下
             }
           }
       }
       else
       {
           按下计数 = 0;
           按下松开flag = 0;//松开后标志位清零,可以检测下一次按键
       }
}
312#
ID:871566发表于 2021-2-25 14:27|只看该作者
哇,谢谢,帮助很大
313#
ID:428114发表于 2021-2-25 16:27|只看该作者
有点意思
314#
ID:476527发表于 2021-2-27 11:59|只看该作者
mm36d 发表于 2021-2-24 10:52
新手完全不晓得你说的啥玩意

请加油,要相信自己的潜力
315#
ID:548757发表于 2021-3-1 13:16|只看该作者
好文章,谢谢分享!!!!
316#
ID:639169发表于 2021-3-2 22:13|只看该作者
好文章,大佬666
317#
ID:88023发表于 2021-3-3 14:29|只看该作者
那么有个问题,就是你在跟某个芯片通讯时,要使用模拟时序时候不就要用到Delay函数了嘛?这个你是怎么解决的??
318#
ID:886043发表于 2021-3-3 16:20|只看该作者
大佬牛逼,向大佬学习
319#
ID:869417发表于 2021-3-5 16:50|只看该作者
学习了,编程精髓。
320#
ID:491577发表于 2021-3-6 10:45|只看该作者
haokey 发表于 2021-2-24 11:50
以前从来没有人教过这些,后来真正做产品的时候慢慢理解了,程序中绝对不用while或delay(),可以想象整个程 ...

不是绝对不能用while或delay(),只是要少用,几个微秒的延时还是可以用的,只是毫秒级别的延时要少用,还有一点你理解错了,你说的车轮的旋转是在中断中进行的,中途有while或delay()那么车轮并不会卡顿,中断有优先权,自动会打断主程序优先执行,如果是4ms转一圈,那么100次就等于400ms的延时(不受while或delay()的影响),只是delay()会影响单片机的执行效率,特别是大于毫秒级别的延时有可能错过一些操作,编写小程序可能没有感觉,但是编写复杂的程序就影响大了,所以要养成好的编程习惯。

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

Powered by 单片机教程网