找微控制器鍵盤的C程式編寫方法。 一鍵式多用途。 不要使用中斷的。

發布 科技 2024-08-20
17個回答
  1. 匿名使用者2024-02-01

    你能說得更具體一點嗎,我以前用的C51程式還沒儲存,現在是MSP430,你要嗎?

  2. 匿名使用者2024-01-31

    請新增詳細說明:

    每個引腳的外圍都布置好了,四個LED顯示屏都連線到該埠,無論是共陰極還是共陽極連線2鍵盤連線到該埠。

    3.每個相應鍵的含義。

  3. 匿名使用者2024-01-30

    它。。。。。。太亂了吧? 你能理清這整堆邏輯,我真的很佩服你。 你按住它,短按立刻生效,長按等於無。

    既然用了定時器,就不要耽擱了,那個東西只出現在教科書上,很少在實際應用中使用。 使用定時器,設定乙個基準時間,如200us乙個中斷,然後設定乙個10ms的按鈕掃瞄時間,即50個中斷,並使用兩個連續的按鈕掃瞄低電平來判斷按鈕的有效性,延遲可以是88,教條主義要人命。 按鈕生效後,我會立即“計算中斷”,對吧?

    按下加按鈕,鬆開清除0,下次重新計數,2秒就是20000次中斷,表示長按有效,不統計這個數字短按有效,這樣就可以單獨處理了,就這麼簡單,不要一直拿著計時器開機關。 理清思路,不要說長按短按,連雙擊都可以。

  4. 匿名使用者2024-01-29

    因為初始值沒有分配給中間和後面,所以它從第一毫秒到毫秒變化,相應地,關鍵時間也發生了變化。

  5. 匿名使用者2024-01-28

    1:鍵值記錄。

    2:時間記錄。

    3:是同乙個鍵嗎?

    以上三個條件組合在一起,乙個條件使用乙個變數。

  6. 匿名使用者2024-01-27

    每個按鈕設定乙個狀態標誌,當標誌為 1 時函式是什麼,當函式為 2 時函式是什麼,依此類推。

  7. 匿名使用者2024-01-26

    定時器可在按下第一按時啟動,然後記錄1s以內的按鍵次數,並可對各種情況進行編碼,實現不同的功能。

  8. 匿名使用者2024-01-25

    它是乙個狀態機,它在什麼狀態下使用什麼。

    雙擊實際上是一種繁瑣且難以除錯的方法。

    使用它的簡單方法是檢視在什麼介面(狀態)中表示什麼函式。

  9. 匿名使用者2024-01-24

    你可以新增乙個定時器來實現你說的功能,先把矩陣鍵盤掃瞄寫成乙個獨立的函式,比如char keyread(void)(沒有按鍵返回0,否則返回鍵的值),然後設定定時器到1s(根據你需要按的次數來確定時間), 主程式直接呼叫keycan(),當檢測到返回值不為0時,啟動定時器,然後進入while無限迴圈掃瞄金鑰,在定時器達到1s之前,如果再次檢測到該值,則將標記加到1,當定時器到達定時器時,將標記的值讀入金鑰處理程式中,將標記清除為零。

  10. 匿名使用者2024-01-23

    檢查您要按下該鍵的時間長度以確定該鍵的功能。

  11. 匿名使用者2024-01-22

    網上有很多這樣的例子,所以我給你乙個參考。

    while(1)

    if(!key2)}}

  12. 匿名使用者2024-01-21

    矩陣鍵盤。

    #include

    #include

    unsigned char code table = ;公陽數碼管顯示 0 f

    void delay() delay 子例程。

    void display(unsigned char s) 顯示子例程。

    unsigned char keycan(void) keyscanner for line lines for column lines.

    while((p1&0xf0) != 0xf0);等待金鑰被釋放。

    return ((rcode) +ccode));返回金鑰編碼。

    elsercode = (rcode<<1)|0x01;線掃瞄程式碼向左移動一位}}

    return 0;如果按下時沒有鍵,則返回值為 0

    void keydispaly(unsigned char key)

    int main(void)

    return 0;}

  13. 匿名使用者2024-01-20

    uchar code act[4]=;

    char scan_key(void)}}

    if(find==0)return-1;返回值為-1,返回1為正常返回,返回-1為異常返回程式只是程式編寫的標準,即沒有鍵。

    return(ini*4+inj);i 是上四位數字的判斷,j 是後四位數字的判斷。

    0 1 2 3 為零 0,1,2,3 如果開關 0 開啟,則 p4 為 0,即 1110 1110

    4 5 6 7 向右移動補 1,得到 1111 1110,j 為 0

    8 9 A b 開關 1 開啟 p5 為 0,即 1101 1110,右移 1111 1101

    c d e f 可以判斷 j 為 1,也可以推斷出 1 一樣。

    p4 5 6 7

    按照這個想法,4個埠只能實現4個開關4*4=16,2*2=4必須改變思維方式,如果是因為埠太緊,可以使用P3埠,或者使用分壓讀取AD判斷按鈕(AD鍵盤)。

  14. 匿名使用者2024-01-19

    發一張鍵盤部分的截圖,蚊子描述不容易理解。

    鍵盤程式與硬體鏈結有很大關係。

  15. 匿名使用者2024-01-18

    哪些系列的MCU有P4埠?

  16. 匿名使用者2024-01-17

    只有30分鐘,我想找人教你。

  17. 匿名使用者2024-01-16

    主要存在兩個問題:

    1. “chuli”命令只能執行一次。

    原因:也就是說,程式上電復位後,執行到零迴圈,然後一直在這裡迴圈,無法執行chuli;

    已解決:全部跳轉到數字(例如零、一、..九)跳到楚裡;確保中斷後可以執行chuli;

    2、中斷時擴散表指標的r1增量模式錯誤。

    雖然你的程式中還沒有感覺到這個錯誤,但它是存在的,這個錯誤還有兩點:

    一是 r1 的初始值為 0,所以無論怎麼移位,r1 永遠是 0;

    第二,你不應該在這裡使用移位(我猜你的意圖應該是從零到一、..九,否則只能執行幾個跳轉,如一、二、四、八等),並且應該使用 add 指令,每次加 2 個位元組(好久沒程式設計了,我忘了 ajmp+ 位址有多少位元組,反正有幾個位元組加幾個位元組)。

    試試吧,應該沒什麼大問題!

    另外,即使這個程式修改後可以執行,也盡量不要這樣寫。 你的寫作接近於使用作業系統的多工程式設計方法,但作業系統不支援,所以看起來很奇怪,可讀性很差,可以參考 Keil C51 中 Tiny OS 的原理來重寫。 如果你覺得太難了,你可以使用常規方法而不是無限迴圈,例如:

    對於每個輸出(零,一、..9)寫乙個子例程,在你的分散中做乙個子例程呼叫,但記得在呼叫後跳出來。

    方法有很多,想想看,不要“先試查詢方法,打斷方式”一定要知道為什麼不行,祝你好運!

相關回答
13個回答2024-08-20

這是哪個微控制器?畫面太小了,不清晰,頭髮更大。

10個回答2024-08-20

設計要求是什麼?

8個回答2024-08-20

這是乙個簡單的例程,即 P1 埠上 LED 燈閃爍的例程。 >>>More

6個回答2024-08-20

還行。 在 51 微控制器的嵌入式 C 語言中,還支援指標。 >>>More