標題: 請工程化,定制化你的單片機代碼 [打印本頁]

作者: Similarv    時間: 2019-6-6 11:48
標題: 請工程化,定制化你的單片機代碼
- 系統(tǒng)的時鐘基線 -- 按鍵函數(shù)舉例 -
  1. void keyPress(){
  2.     static unsigned int key_press_time = 0;  // ……請記得標為靜態(tài)變量
  3.     if(K1==0){
  4.         if(++key_press_time <=0 ) --key_press_time;//計量按鍵時間,并避免數(shù)據(jù)溢出
  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. }
復(fù)制代碼


-  多個時鐘基線的方案  -
-  函數(shù)應(yīng)該放在哪個時基里?  -
作者: Similarv    時間: 2019-6-6 16:41
如果有需要,我可以把相關(guān)的主程序和架構(gòu)打包上傳……不過說實話這些代碼隨便敲敲就有了,需要鍛煉的是一種“精準控制”軟件的邏輯的思維。
跑快了的東西我們把它放慢些,跑慢了的東西給它放快些。
對于一個系統(tǒng)來說,“平衡”是很重要的事情。

最后再說一句,while(1)大循環(huán)里面不要放“delay();”或者“while(按鍵被按下);”了……
作者: 13327291097    時間: 2019-6-6 20:53
很好的文章,請繼續(xù)。感謝!
作者: nsush    時間: 2019-6-7 00:36
我對delay1s(); delay500ms()這樣的延時函數(shù)就很不爽,當(dāng)然程序流程很簡單的,用用也沒什么,如果是一個還算比較長的程序,使用delay1s(); delay500ms()這種就是在人為遲滯片子的運行,響應(yīng)不過來又要罵,完全不會看自己做的程序?qū)懙氖鞘裁垂?p。你可以發(fā)現(xiàn),凡是這樣搞的,里面的變量,定義亂七八糟,想怎么寫就怎么寫。只要編譯的過,不求后面優(yōu)化。
以前的專業(yè)程序員,可是對單片機了如指掌,每一點一滴的性能,一個字節(jié)都很珍惜,寫的程序兼職就是藝術(shù)品。
之前我們這也有個做機構(gòu)設(shè)計的,畫的加工件,完全不考慮加工難度,想怎么畫就怎么畫,機構(gòu)極度粗 暴yu 蠢,我看不下去了,問他還就一句話,加工不管我的事,一個月不到就讓他滾 蛋了。
作者: 1339337425    時間: 2019-6-7 00:42
真的是好文章,對51定時器的理解更深了,原來程序還能這么寫
作者: Similarv    時間: 2019-6-10 10:04
nsush 發(fā)表于 2019-6-7 00:36
我對delay1s(); delay500ms()這樣的延時函數(shù)就很不爽,當(dāng)然程序流程很簡單的,用用也沒什么,如果是一個還 ...

哈哈哈,做技術(shù)的可不能只管自己那小小的一畝三分地啊,不去學(xué)習(xí)和進步終究要被淘汰的。
還有些人在步入一個新領(lǐng)域的時候總是抱著玩一下的心態(tài),勉強能用就行,卻不想把事情做到更好,其實也是自己限制住了自己的成長。
作者: Similarv    時間: 2019-6-10 17:25
@admin 這應(yīng)該是個比較長的教程,預(yù)計下下次更新才能寫完,屆時再發(fā)些源碼和參考例程
作者: gm388    時間: 2019-6-10 21:08
不錯的文章,希望有后續(xù)
作者: abc111111    時間: 2019-6-11 10:13
很好,學(xué)習(xí)了,現(xiàn)在實踐一下
作者: muzhi    時間: 2019-6-12 11:56
學(xué)習(xí)了  很受用  會慢慢去嘗試應(yīng)用  期待后續(xù)
作者: m182892    時間: 2019-6-13 09:04
謝謝分享,多發(fā)一些類似文章。
作者: 無語奧蒼天    時間: 2019-6-13 10:53
他們寫程序粗的不行,可能自己覺的學(xué)個框架就算是學(xué)到了整個語言的精華,殊不知差得遠呢。
作者: qijun68    時間: 2019-6-13 11:30
支持持續(xù)更新,很好的東西。
作者: s1gm    時間: 2019-6-13 12:24
好文章,好理論,!通熟易懂!
作者: gpdt3209    時間: 2019-6-13 13:46
期待樓主的新文章
作者: univers    時間: 2019-6-13 21:19
專家講解,學(xué)習(xí)了。
作者: abc111111    時間: 2019-6-14 02:25
感謝樓主,學(xué)習(xí)到了
作者: gt00666    時間: 2019-6-14 06:48
這個必須加精啊,新手不知道有沒有收藏功能
作者: xiaojian365    時間: 2019-6-14 08:38
很不錯的文章,啟迪匪淺。
作者: 向日葵男人    時間: 2019-6-14 09:24
好文章!
作者: 狂野的野馬    時間: 2019-6-14 10:18
很不錯的文章,請繼續(xù)
作者: stlong    時間: 2019-6-14 11:31
感謝樓主的文章!
作者: 亞可    時間: 2019-6-14 17:13
怎么關(guān)注樓主?感覺寫的很有意思
作者: kissme    時間: 2019-6-16 11:24
新手完全不曉得你說的啥玩意
作者: Similarv    時間: 2019-6-16 12:05
kissme 發(fā)表于 2019-6-16 11:24
新手完全不曉得你說的啥玩意

那就請新手(自稱)們加油,這帖子本來就是進階教程,希望他們先將基礎(chǔ)打牢
作者: pxj666    時間: 2019-6-17 18:05
感謝樓主,學(xué)到了很多
作者: QZQ1973    時間: 2019-6-17 22:30
很不錯的文章
作者: ealoo    時間: 2019-6-18 09:05
很好的編程思路,條理清晰,把復(fù)雜的事情簡單化。
作者: JokerAlon    時間: 2019-6-18 12:55
好貼。!
作者: bruce-lou    時間: 2019-6-18 16:16
送人玫瑰,手有余香
作者: yachcs    時間: 2019-6-19 15:30
很好的技術(shù)貼
作者: wulingqing    時間: 2019-6-20 08:39
很好的文章,請繼續(xù)。感謝!
作者: 人有福    時間: 2019-6-20 10:48
樓主經(jīng)驗豐富,編程思想總結(jié)的很好,文章寫得也很棒,希望可以繼續(xù)分享,感謝!
作者: tesrsm    時間: 2019-6-20 12:01
去除按鍵的抖動 不用延時函數(shù)的話,怎么處理
作者: Similarv    時間: 2019-6-20 13:30
tesrsm 發(fā)表于 2019-6-20 12:01
去除按鍵的抖動 不用延時函數(shù)的話,怎么處理

用靜態(tài)變量去統(tǒng)計按鍵的時間,隨后對此時間進行裁決。
延時只會讓你的程序卡在那里一段時間,動彈不得。
作者: lianzai    時間: 2019-6-20 13:46
好文章,不知樓主能否弄成pdf格式上傳呢,想保存起來
作者: Similarv    時間: 2019-6-20 14:29
lianzai 發(fā)表于 2019-6-20 13:46
好文章,不知樓主能否弄成pdf格式上傳呢,想保存起來

等我抽空把狀態(tài)機的下半部分寫完先再說吧
作者: 1534545848    時間: 2019-6-20 18:27
這樣就是操作系統(tǒng)的雛形
作者: xqs_118    時間: 2019-6-21 15:13
高手,膜拜了。
作者: jacklgl    時間: 2019-6-24 11:34
不錯學(xué)習(xí)了
作者: csanta    時間: 2019-6-24 12:56
很實用!謝分享!
作者: kip1998    時間: 2019-6-24 17:21
寫的很好樓主niubi,優(yōu)化設(shè)計真的要很仔細的打磨!
作者: wangwing    時間: 2019-6-24 20:26
非常有指導(dǎo)意義
作者: wangwing    時間: 2019-6-24 22:33
非常有參考意義,受教了
作者: TTQ001    時間: 2019-6-25 09:10
好技術(shù), 好文章,感謝分享


作者: 深情不是舔    時間: 2019-6-25 15:23
模塊化值得學(xué)習(xí)
作者: genbenbuhui    時間: 2019-6-27 10:47
學(xué)到了 感謝樓主
作者: 凱旋小飛    時間: 2019-6-27 17:25
小生愚鈍,指導(dǎo)內(nèi)容抱回家感悟,感謝樓主教導(dǎo)!
作者: univers    時間: 2019-7-3 22:51
我以仔細看了一遍,謝謝大神。
作者: scq330    時間: 2019-7-5 00:25
新手努力學(xué)習(xí)中,謝謝樓主的好資料。
作者: m182892    時間: 2019-7-5 09:00
期待后續(xù)章節(jié),源程序打包上傳。
作者: yzhbyyy    時間: 2019-7-5 10:07
受益匪淺啊,繼續(xù)學(xué)習(xí)。
作者: FJ2018    時間: 2019-7-5 10:49
好文章,值得學(xué)習(xí)
作者: cliang223    時間: 2019-7-5 14:32
寫的很好,很值得學(xué)習(xí)
作者: 鵬博士PBs    時間: 2019-7-6 00:23
漲知識了
作者: 小小的樹葉    時間: 2019-7-6 08:13
好文章,謝謝分享
作者: 164652999    時間: 2019-7-6 17:20
好文章,讓人茅塞頓開
作者: 阿紋    時間: 2019-7-6 21:38
思路很重要,經(jīng)驗也很重要,感謝分享。
作者: waerdeng    時間: 2019-7-7 09:11
感謝樓主謝謝分享
作者: wj_yuq    時間: 2019-7-7 11:43
好文章,隨著涉及的“設(shè)備”從LED開始逐漸廣泛到以功能、總線林林總總不同類別的器件,工程化,系統(tǒng)化,模塊化是必由之路,也是掌握編程軟件由入門到不同深入水平的標志
作者: xoxojojo    時間: 2019-7-7 14:19
打開新世界大門
作者: Similarv    時間: 2019-7-7 19:26
很抱歉的告訴大家,之前的想法還是太樂觀,現(xiàn)在每天忙成狗,完全不確定啥時候能抽時間寫完,7月15日要是沒有更新的話還請大家諒解。

不過我是不會就這么停筆的,只是不知道啥時候有時間寫而已。作為打工仔,真的身不由己。
為了不辜負大家的期待,下次更新時我會把文檔做成pdf,附帶源碼,流程圖,表格一并上傳。

其實還有很多可以寫的地方,但是現(xiàn)在這篇帖子就寫這3點——時基,模塊化,狀態(tài)機——已經(jīng)夠大家消化一陣子了。而且,如果帖子的篇幅太長了,其實不利于閱讀的。
以后如果還有別的分享,我會另開帖子的,多蹭點管理員的黑幣,哈哈。

作者: 313583581    時間: 2019-7-7 22:06
煥然一新的思路,受教了
作者: 2448289424    時間: 2019-7-8 01:36
樓主是出來工作了還是還在讀書自學(xué)單片機,看了你發(fā)了這篇寫得挺好的,之前讀書那會對時鐘這東西根本就沒概念,就像你說的只會delay 或者while死等,,,你發(fā)的這個對于在自學(xué)或者準備入門單片機的人來說很好,,想到以前在學(xué)校老師哪懂這些就按書本delay教,根本不會聯(lián)系實際去告訴我們,直到畢業(yè)出來工作才知道自己多么笨,,還停留在delay這玩意,,看完你寫了這個真是感慨。!
作者: mengchen12    時間: 2019-7-8 05:34
樓主的創(chuàng)意非常好,支持!
作者: m182892    時間: 2019-7-8 08:21
我覺得這個帖子可以繼續(xù)加深,例程要多,到一定的程度可以出版書籍。
作者: shouhmzhl    時間: 2019-7-8 08:45
不錯,非常感謝你的分享!
作者: 大娃丶    時間: 2019-7-8 09:03

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

感謝樓主謝謝分享
作者: Similarv    時間: 2019-7-8 19:54
2448289424 發(fā)表于 2019-7-8 01:36
樓主是出來工作了還是還在讀書自學(xué)單片機,看了你發(fā)了這篇寫得挺好的,之前讀書那會對時鐘這東西根本就沒概 ...

剛好畢業(yè)一年而已,在這過程中也算學(xué)了點皮毛,就想整理一下思路
作者: Similarv    時間: 2019-7-8 19:57
m182892 發(fā)表于 2019-7-8 08:21
我覺得這個帖子可以繼續(xù)加深,例程要多,到一定的程度可以出版書籍。

哦?小伙子,我覺得你說的很有道理耶,不過寫書確實是個大工程,篇幅也要夠,目前還是以分享為主,日后再整理成稿。
作者: a524075233    時間: 2019-7-9 06:54
優(yōu)秀的文章 感謝樓主的指導(dǎo) 我會繼續(xù)努力
作者: donydong    時間: 2019-7-9 13:54
非常好,期待更新。
作者: 我要打十個    時間: 2019-7-9 19:36
看到開口的吐槽就深得我心
作者: liu888888    時間: 2019-7-10 15:17
這是實戰(zhàn)貼,接地氣,看懂了受益頗多
作者: lsz28    時間: 2019-7-11 00:52
很好的文章,請繼續(xù)。感謝!
作者: ztb096001    時間: 2019-7-26 08:27

謝謝分享,多發(fā)一些類似文章。
作者: zhuyuye    時間: 2019-7-26 08:57
分析的好極了,加油!
作者: qq76832893    時間: 2019-7-26 08:59
感謝大神,期待后續(xù)!
作者: 小黑屋525    時間: 2019-7-26 09:11
好文,最近師傅也這樣子說太浪費單片機資源。
作者: 454473587    時間: 2019-7-28 11:09
謝謝樓主慷慨,很好的一篇文章,不過得慢慢消化,期待源碼
作者: yasi666    時間: 2019-7-31 16:53
謝謝了,這位兄弟分享了他的編程精髓,看了之后很受教。我是一個初學(xué)者,萬分感謝
作者: shenchaobiao    時間: 2019-7-31 21:08
好文,這是結(jié)合硬件實際的結(jié)構(gòu)化編程思想、
作者: ccdmcu    時間: 2019-8-2 16:22
按鍵的松手檢測呢?怎么用定時器寫?
作者: 難得糊涂2018    時間: 2019-8-2 18:55
學(xué)習(xí)了,你的想法好!
作者: 上善若水001    時間: 2019-8-2 19:56
感謝發(fā)出這么好的文章,持續(xù)關(guān)注中!
作者: Similarv    時間: 2019-8-2 20:36
ccdmcu 發(fā)表于 2019-8-2 16:22
按鍵的松手檢測呢?怎么用定時器寫?

我不是給了個keyPress()程序么,你再好好看看。
簡單來說,有鍵按下時,時間就會++;
無鍵按下時,時間就會清零。
但在清零之前會先檢查,時間是否大于0,時間值大于0(或者消抖值)說明曾經(jīng)有鍵按下過,并且剛剛松開。這時候處理“這次按鍵”不就好了。
作者: 澤文i    時間: 2019-8-5 10:34
將單片機程序工程化的好處,就在于后期升級和改進,將變得無比的方便。尤其是模塊化以后,對相關(guān)的功能進行升級,只需要針對這一部分進行修改就可以。


作者: DJDN    時間: 2019-8-7 08:33
Mark      

作者: happynocn    時間: 2019-8-7 09:04
感謝分享,前來學(xué)習(xí)一下。
作者: 鵬博士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
工程復(fù)雜用狀態(tài)機方式編程,或上實時系統(tǒng)
作者: zcl1976    時間: 2019-8-9 12:09
文章不錯,搞技術(shù)的多替客戶想一點,肯定沒錯。忽悠是做不了長遠的。
作者: tt98    時間: 2019-8-9 14:31
寫得不錯,后續(xù)有更深入的文章更好!
作者: a89588038    時間: 2019-8-9 14:38
持續(xù)關(guān)注,樓主厲害。。!
作者: laishu12345    時間: 2019-8-9 17:08
if(++key_press_time <=0 ) --key_press_time;//計量按鍵時間,并避免數(shù)據(jù)溢出        樓主問個問題,key_press_time這個參數(shù)是無符號整型,++key_press_time 不會小于等于0吧!
作者: shenyuqiu    時間: 2019-8-10 10:38
樓主這文章比那些所謂的教科書好多了,那些教科書按鍵消抖動不動就是delay(20ms),真是誤人子弟,真正出來做到大型項目才知道 DELAY是多么不實際。希望樓主繼續(xù)更新,最好轉(zhuǎn)成PDF,多點例程,尤其是一些按鍵的,短按,長按,雙擊組合鍵例程,F(xiàn)在絕大部份寫按鍵程序都喜歡delay消抖,while松手檢測。郭天詳?shù)臅彩沁@么教的,一點不實用




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1