色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的讀矩陣鍵盤,用數(shù)碼管顯示相應(yīng)鍵值

          基于單片機(jī)的讀矩陣鍵盤,用數(shù)碼管顯示相應(yīng)鍵值

          作者: 時(shí)間:2012-09-10 來源:網(wǎng)絡(luò) 收藏

          /*****************************************************
          007.ASM

          本文引用地址:http://cafeforensic.com/article/170900.htm

          接線:P0口接
          P2接
          用定時(shí)中斷,若一段時(shí)間無操作,管進(jìn)入自到循環(huán)
          2010.09.05
          *******************************************************/
          ORG 0000H
          LJMP MAIN
          ORG 000BH
          LJMP INT_T0
          ORG 0020H
          MAIN: ;主程序
          MOV SP,#50H
          MOV DPTR,#LED_DATA ;取表首地址
          MOV TMOD,#01H ;設(shè)置定時(shí)器T0工作模式
          MOV TH0,#15H ;寫計(jì)時(shí)初值
          MOV TL0,#9FH
          MOV P2,#0FFH ;P2口賦初值
          MOV R4,#00H ;賦定時(shí)計(jì)數(shù)初值
          SETB 00H ;00H為鍵值改變標(biāo)志位
          SETB TR0 ;啟動(dòng)定時(shí)器T0
          MOV IE,#82H ;開中斷
          LCALL SHOW ;管初始化
          loop: ;主循環(huán)
          LCALL KEY_READ ;讀
          JBC 00H,LOOP0 ;判斷是否有鍵被按下,有則轉(zhuǎn)去刷新輸出并清零定時(shí)計(jì)數(shù)
          CJNE R4,#0C8H,LOOP ;沒有鍵被按下,則判斷定時(shí)時(shí)間是否達(dá)到,到,則進(jìn)入數(shù)碼管循環(huán)輸出
          LCALL SHOW1 ;沒到,則回到主循環(huán),重新掃描
          SJMP LOOP
          LOOP0:
          LCALL SHOW
          MOV R4,#00H
          SJMP LOOP ;輸出刷新完畢,回到主循環(huán),重新掃描鍵盤

          /*鍵盤掃描程序*/
          KEY_READ:
          CLR P2.6 ;P2.6輸出低
          JB P2.0,N0_0
          MOV R0,#01H
          LCALL DELAY
          JB P2.0,N0_0
          JNB P2.0,$
          MOV R5,#04H
          SETB 00H
          SETB P2.6
          LJMP NEAT
          N0_0:
          JB P2.1,N0_1
          MOV R0,#01H
          LCALL DELAY
          JB P2.1,N0_1
          MOV R5,#03H
          JNB P2.1,$
          SETB 00H
          SETB P2.6
          LJMP NEAT
          N0_1:
          JB P2.2,N0_2
          MOV R0,#01H
          LCALL DELAY
          JB P2.2,N0_2
          JNB P2.2,$
          MOV R5,#02H
          SETB 00H
          SETB P2.6
          LJMP NEAT
          N0_2:
          JB P2.3,N1_0
          MOV R0,#01H
          LCALL DELAY
          JB P2.3,N1_0
          JNB P2.3,$
          MOV R5,#01H
          SETB 00H
          SETB P2.6
          LJMP NEAT
          N1_0:
          SETB P2.6
          CLR P2.5
          JB P2.0,N1_1
          MOV R0,#01H
          LCALL DELAY
          JB P2.0,N1_1
          JNB P2.0,$
          MOV R5,#08H
          SETB 00H
          SETB P2.5
          LJMP NEAT
          N1_1:
          JB P2.1,N1_2
          MOV R0,#01H
          LCALL DELAY
          JB P2.1,N1_2
          JNB P2.1,$
          MOV R5,#07H
          SETB 00H
          SETB P2.5
          LJMP NEAT
          N1_2:
          JB P2.2,N1_3
          MOV R0,#01H
          LCALL DELAY
          JB P2.2,N1_3
          JNB P2.2,$
          MOV R5,#06H
          SETB 00H
          SETB P2.5
          LJMP NEAT
          N1_3:
          JB P2.3,N2_0
          MOV R0,#01H
          LCALL DELAY
          JB P2.3,N2_0
          JNB P2.3,$
          MOV R5,#05H
          SETB 00H
          SETB P2.5
          LJMP NEAT
          N2_0:
          SETB P2.5
          CLR P2.4
          JB P2.0,N2_1
          MOV R0,#01H
          LCALL DELAY
          JB P2.0,N2_1
          JNB P2.0,$
          MOV R5,#0CH
          SETB 00H
          SETB P2.4
          LJMP NEAT
          N2_1:
          JB P2.1,N2_2
          MOV R0,#01H
          LCALL DELAY
          JB P2.1,N2_2
          JNB P2.1,$
          MOV R5,#0BH
          SETB 00H
          SETB P2.4
          LJMP NEAT
          N2_2:
          JB P2.2,N2_3
          MOV R0,#01H
          LCALL DELAY
          JB P2.2,N2_3
          JNB P2.2,$
          MOV R5,#0AH
          SETB 00H
          SETB P2.4
          LJMP NEAT
          N2_3:
          JB P2.3,NEAT
          MOV R0,#01H
          LCALL DELAY
          JB P2.3,NEAT
          JNB P2.3,$
          MOV R5,#09H
          SETB 00H
          SETB P2.4
          LJMP NEAT
          NEAT:
          SETB P2.4
          RET

          /*子程序*/
          SHOW:
          MOV A,R5
          MOVC A,@A+DPTR
          MOV P0,A
          RET

          /*循環(huán)子程序*/

          SHOW1: ;
          MOV R3,#00H
          LOOP1:
          MOV A,R3
          MOVC A,@A+DPTR
          MOV P0,A
          MOV R0,#35H
          LCALL DELAY
          INC R3
          LCALL KEY_READ
          JB 00H,RETUN1
          CJNE R3,#10H,LOOP1
          MOV R3,#00H
          SJMP LOOP1
          RETUN1:
          RET

          /*延時(shí)子程序*/

          DELAY:
          D0: MOV R2,#0FH
          D1: MOV R1,#0BFH
          D2: DJNZ R1,D2
          DJNZ R2,D1
          DJNZ R0,D0
          RET

          /*定時(shí)中斷T0處理子程序*/


          INT_T0:
          CLR EA
          PUSH ACC
          INC R4
          MOV TH0,#15H
          MOV TL0,#9FH
          POP ACC
          SETB EA
          RETI

          /*數(shù)碼管顯示代碼,0~F*/

          LED_DATA:
          DB 03H,9FH,25H,0DH,99H,49H,41H,1FH
          DB 01H,09H,11H,0C1H,63H,85H,61H,71H

          END

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉