![]() |
發(fā)布時間: 2022-9-23 23:28
正文摘要:本人初學51單片機,最近在搞一個步進電機的小制作,主要功能就是用51控制A4988模塊,驅(qū)動步進電機實現(xiàn)正反轉(zhuǎn),加減速,存儲當前速度等功能。拜論壇各位前輩所賜,下了些代碼拼到一塊,磕磕絆絆倒也實現(xiàn)了主要功能。 ... |
最簡單的是根據(jù)要顯示的內(nèi)容直接對顯示變量進行位操作,就不用考慮數(shù)組了 |
yzwzfyz 發(fā)表于 2022-9-26 11:15 謝大師指點,B站上有高手做了一個數(shù)碼管跑馬燈視頻,正反流水、斜跑、追光等等很多復雜效果,很是酷炫。我剛學51,C語言基礎(chǔ)不扎實,屬于現(xiàn)學現(xiàn)賣的程度,現(xiàn)在是一看數(shù)組就頭暈的狀態(tài) ![]() https://www.bilibili.com/video/BV1fJ411b7cU/?spm_id_from=333.337.search-card.all.click |
很簡單的事: 臺面上無論有多少個LED燈,只要你能將特定的一些LED燈,輪流亮、滅就達成了跑馬了。 舉一反三:滾字、閃動、閃光標、斜走字都一樣。 下面教你一個通用的方式: 本例你有4個數(shù)碼管,計8*4個LED燈。 1、用一個數(shù)組來表達每一個LED的明暗,本例:一個數(shù)組=4個字節(jié),計32位,每位的0/1對應一個LED燈的暗/明。 2、將每一種顯示狀態(tài)用一個這個數(shù)組用表達:例如:全亮={FFH,FFH,FFH,FFH};全暗={00H,00H,00H,00H},如此你有100個狀態(tài),就建立100數(shù)組。 本例轉(zhuǎn)一圈,共狀態(tài),建8個數(shù)組就行了。 3、寫個程序,每間隔一段時間依序取出一組數(shù)據(jù),送至IO口去顯示LED……,循環(huán)重復。 以上思路簡單、清晰、還易實現(xiàn)。顯示機動靈活,修改數(shù)組就玩轉(zhuǎn)了各種顯示方式了。 如果是點陣LED,做個紅心,弄個燈塔,擺個方陣,上移、下跳、斜跑……隨意,全在數(shù)組中編輯(EXCEL表中排排,導入到數(shù)組中),程序都不用改動。 |
wulin 發(fā)表于 2022-9-25 06:37 多謝大師指導,感覺您代碼里有好多技巧,C語言控制單片機已經(jīng)用的得心應手了,我還得繼續(xù)學習提高啊! |
ningsy 發(fā)表于 2022-9-24 23:44 給你補充正反轉(zhuǎn)顯示,糾正s的數(shù)據(jù)類型。 ![]() |
15,14,13,11,7,57,49,41,25,56 |
感謝各位前輩指導,尤其感謝8樓wulin大師,您這個代碼容我好好消化下,腦子已經(jīng)繞暈了![]() |
像顯示數(shù)字那樣,搞個字形,按數(shù)字那樣顯示。 |
看原理圖,找到每段對應代碼,做個數(shù)組,按順序讀出數(shù)字中數(shù)字輸出到端口。 |
你的想法沒錯,就是萬能的狀態(tài)機嘛,一個個寫倒是沒必要,又不是Verilog,完全可以用數(shù)組存儲狀態(tài),然后循環(huán)調(diào)用 你的P0不復位確定不會影響下一個狀態(tài)? |
![]() ![]() |
把現(xiàn)在代碼里的顯示數(shù)據(jù)取個反 |
遇到一個新問題:把代碼帶入主程序,也許是delay時間太長,主程序都不干活了,電機不轉(zhuǎn)了![]() ![]() |
先顯示 [ ] ,再逐段熄滅。 |
先想辦法讓指定的段亮起來,然后按順序執(zhí)行,就實現(xiàn)了數(shù)碼管筆劃跑馬燈。 |
不規(guī)則的、萬能的碼表! |
Powered by 單片機教程網(wǎng)