![]() |
發布時間: 2021-9-15 11:05
正文摘要:也摸索了快一年的單片機了,看書,開發板上各種練習,可一到實際應用就懵逼了,下面是一段以前工程師寫的實際項目代碼,完全看不懂呀,, 老手們指點一二,謝謝! |
好的,謝謝你們的回答! |
首先你得知道,單片機里邊用的執行,其實是一堆寄存器的執行。那么寄存器是怎么交互的呢?只能通過數據了,你這里的所有數據都是最終賦值給寄存器的,而且寄存器的每一位都有其對應的特殊意義。 |
漲知識了。 |
就是給右邊那些數字啊,公式啊之類的一個名字,左邊那些字母就是。下次想用那些東西直接寫他們的名字就行,也就是你定義的那些 |
是LED7(0)或LED7(1),只是看起來像個函數,實質還是一句表達式 |
jiahz2019 發表于 2021-9-15 15:34 調用時為LED(0)或LED(1);對應m=0或m=1 編譯時把后面定義式中的m代換為0或1 |
主要是把這些單一離散的輸入輸出信號組合到一個寄存器中統一處理。比如5個按鍵經過按鍵處理程式得到的結果是11110或00001,表示KEY1被按下;11101或00010表示KEY2被按下。一個位代表一個按鍵,依次類推。 |
#define LED7(m) (Dram[0] = Dram[0]&(~(1<<6))|(m<<6)) 這句有人講解一下嗎? 里面的數據定義如下: uint8 Dram[2]; m 怎么理解,程序里面也沒有關于它的定義 |
tzs233 發表于 2021-9-15 15:23 好的,謝謝,有點理解了。 |
程序都是從0開始編號計數的 ,然后我們實際生活中大多從1開始計數。 比如 (1<<4) 變成10000,如果每一位(0或1)代表一個按鍵狀態(閉合或斷開),不就可以表示5個按鍵狀態了嗎? 這樣很通俗易懂了吧 |
ByanouQ 發表于 2021-9-15 14:33 (1<<4) 就是1左移4位,》這句能理解, 意思是key5那個引腳設置為高電平》這句理解不了,咋就成了高電平, 難道是 1左移4位=10000, “1” 剛好對應第5位 ? |
#define key5 (1<<4) 就是1左移4位,意思是key5那個引腳設置為高電平 |
devcang 發表于 2021-9-15 13:18 你講的替換我肯定是知道的,我不明白的是后面的那些表達式。 |
實際代碼中,用前面的,直接用后邊的替換上去。 |