我是嵌入式編程的新手,我需要你的幫助。瞭解爲STM32編寫的函數
回答
該功能簡單地返回一個int與線的二進制組合的值旋轉的5倍到左側,collumn旋轉2次的左側和命令(其已在枚舉定義的值)
所以,如果你這樣做:
測試= setLED(3,2,LED_TOGGLE)
測試將等於:((00000011 < < 5)|(00000010 < < 2)| 00000011)
這將給:
01100000 OR
00001000 OR
00000011
--------
01101011
邏輯的其餘部分是依賴基於代碼的少量代碼
但爲什麼他們旋轉5次和2次?我試圖改變數字,但我的遊戲不能正常工作,LED只是閃爍。 –
這取決於你的代碼的其餘部分,這個函數並沒有真正設置任何led,它只是返回輸入變量的組合,我試圖研究其餘的代碼,看看它是如何應用的 –
@Alena Everdeen it不旋轉。它被轉移。這有很大的不同。爲什麼。在一塊數據中編碼位置和命令。但是這個功能無論如何不會起作用。要從0到15編碼,你需要4位。所以實際的代碼是:(line << 6)|(collumn << 2)| cmd,並且在此前2位包含cmd之後,接下來的四列和接下來的四行 –
的其餘部分的張貼在這裏:
定居()不是做任何事情來真正設置LED。它看起來像它是用來創建一個地址(行/列)和期望狀態組合的值。這可能會被寫入控制寄存器。
如果你想知道return (line<<5)|(collumn<<2)|cmd;
,它可能有助於其分割,所以你可以逐步並看看會發生什麼:
setLED(1, 1, LED_ON);
result = (line << 5); // result -> 0x20
result = result | (collumn << 2); // result -> 0x24
result = result | cmd; // result -> 0x25
int setLED(int line, int collumn, enum command_e cmd) { int result = (line << 5); result = result | (collumn << 2); result = result | cmd; return result; }
: 基於給出的值可能的寄存器位定義(狀態0-3和16x16矩陣)
// Bits: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
// Field: RRRRRRRRRR CCCCCCCCCC SSSS
// Range of Values: 0-15 0-15 0-3
編輯: 確定的基礎上,6位地址,然後限制爲7的最大行和列的事實:
if(collumn < 7){
collumn++;
}
else{
collumn=0;
(line < 7) ? (line++) : (line = 0);
}
它看起來像您使用的是8×8 LED矩陣,可用6位尋址(3行代表行,3列代表)。我已經更新了我的「寄存器描述」,它應該清楚2和5的位移來自哪裏。
// Bits: 7 6 5 4 3 2 1 0
// Field: RRRRRRR CCCCCCC SSSS
// Range: 0-7 0-7 0-3
的16×16矩陣的每個象限是寫入用下面的命令,這些8×8矩陣中的一個:
send.led0 = ...;
send.led1 = ...;
send.led2 = ...;
send.led3 = ...;
謝謝你的幫助。我理解這一部分,但我不明白爲什麼這個數字(5和2)... –
我已經更新了我的問題。 –
它可能在數據表中規定了您正在編程的任何部分。查找寄存器的描述,您可能會看到如下內容:位0-1指定狀態。位2-5指定列,位6-9指定行。它需要4位(0x0到0xA)來尋址行和4位來尋址16x16顯示器的列。根據數據表仔細檢查2和5。你的功能可能有一個錯誤。 –
- 1. 瞭解MakeFile for STM32應用程序
- 2. 瞭解Azure函數行爲
- 3. 爲ggplot編寫函數
- 4. 如何編程STM32
- 5. 瞭解lambda函數
- 6. 瞭解set()函數
- 7. 瞭解PHP函數
- 8. 瞭解printf函數
- 9. 瞭解atoi()函數
- 10. 瞭解lambda函數
- 11. 瞭解JavaScript函數
- 12. 瞭解JavaScript函數
- 13. 瞭解分解函數
- 14. 編寫一個名爲spelling_corrector的函數。
- 15. 瞭解帶函數的函數作爲Swift中的關聯值
- 16. 瞭解scala的Vs函數
- 17. 在STM32上寫入閃存
- 18. 編寫php函數
- 19. 編寫Array.every()函數
- 20. php編寫的sql函數
- 21. 編寫委託作爲函數求
- 22. 如何爲列表編寫replace()函數
- 23. 爲隨機函數編寫測試
- 24. 爲C++程序編寫MASM函數
- 25. 爲jquery函數編寫插件?
- 26. 爲所有scrapy蜘蛛編寫函數
- 27. 如何爲Node.js編寫異步函數
- 28. 如何爲ede編寫定位函數
- 29. 如何爲Zapier編寫回調函數
- 30. 如何爲此編寫javaScript函數?
沒有什麼特定的架構或在這裏嵌入式編程。函數'setLED()'對參數執行一些相對簡單的算術運算並返回結果。如果你不知道他們在做什麼,請在參考資料或教程中查找涉及的操作符('<<'和'|')。如果你不明白(C的味道)'enum's,那麼閱讀關於C的教程或教科書。 –
這裏似乎沒有真正的問題,它是否被刪除? – jcoder