久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2602|回復: 0
打印 上一主題 下一主題
收起左側

我的單片機接口實驗:編碼鍵盤的設計及按鍵檢測程序

[復制鏈接]
跳轉到指定樓層
樓主
1. 連接實驗箱上的數碼管,編程在上面顯示數字2017
2. 連接實驗箱上的鍵盤和數碼管,編寫程序,將鍵盤輸入值寫在數碼管的最右端,原來的數值,向左端移動。
3. 消除按鍵一次,輸入多次的情況

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:

  1.                                    ORG 0000H
  2. MAIN:        CLR P1.0                                           ;因為是共陰極的二極管,故當P1.0電平為低電平時,二極管會亮
  3.                 MOV P0,#5BH                                           ;2
  4.                 LCALL D1MS                                           ;延時
  5.                 SETB P1.0                                           ;置位,不選中這一位

  6.                 CLR P1.1                                                ;和上述方法一樣
  7.                 MOV P0,#3FH                                                ;0
  8.                 LCALL D1MS;
  9.                 SETB P1.1

  10.                 CLR P1.2                                                 ;和上述方法一樣
  11.                 MOV P0,#06H                                                 ;1
  12.                 LCALL D1MS
  13.                 SETB P1.2

  14.                 CLR P1.3                                                  ;和上述方法一樣
  15.                 MOV P0,#07H                                                 ;7
  16.                 LCALL D1MS
  17.                 SETB P1.3

  18.                 LJMP MAIN                                                  ;循環顯示
  19. D1MS: MOV R7,#02H
  20. DL:   MOV R6,#0FFH
  21. DL1:  DJNZ R6,DL1
  22.       DJNZ R7,DL
  23.           RET
  24.           END
  25. 2和3:
  26. KBUF DATA 30H          ;顯示緩沖區,存放要顯示的數據
  27.                 ORG 0000H
  28.                 LJMP START1
  29.                 ORG 0100H
  30. START1:        LCALL KEY           ;調用KEY,有沒有鍵按下
  31.                 JC START4           ;判斷進位位,如果進位位為1,證明沒鍵按下
  32.        
  33.                 PUSH ACC           ;A中存放的是鍵值的序號
  34.                 MOV R0,#KBUF   ;顯示器的位置左移
  35.                 MOV R1,#KBUF+1
  36.                 MOV R7,#7
  37. START2:        MOV A,@R1
  38.                 MOV @R0,A
  39.                 INC R0
  40.                 INC R1
  41.                 DJNZ R7,START2

  42.                 POP ACC
  43.                 MOV @R0,A

  44. ;功能鍵的按鈕
  45.                 CJNE A,#0FH,START4    ;判斷累加器的值是否是0F,如果不是跳轉到START4
  46. START:        MOV R0,#KBUF
  47.                 MOV R7,#8
  48.                 MOV A,#0
  49. START0:        MOV @R0,A
  50.                 INC R0
  51.                 DJNZ R7,START0

  52. START4:        LCALL DISP
  53.                 SJMP START1

  54. ;①判斷有沒有鍵按下
  55. KEY:        MOV P1,#0FFH  ;讓顯示器熄滅
  56.                 MOV P3,#0FFH  ;通過P3口讀入信息,提前送入1
  57.                 MOV P0,#00H
  58.                 MOV A,P3
  59.                 ANL A,#0FH           ;只要低四位的數據
  60.                 CJNE A,#0FH,KEY1  ;判斷是不是全1,若全1,證明沒鍵按下,否則,證明有鍵按下,跳轉到KTY1
  61.                 SJMP NOKEY
  62. ;②抖動問題
  63. KEY1:        CALL DELAY ;延時,先消除抖動
  64.                 MOV A,P3
  65.                 ANL A,#0FH
  66.                 CJNE A,#0FH,KEY2   ;判斷是不是全1,若全1,證明是抖動,沒鍵按下,否則,是真正的有鍵按下
  67.                 SJMP NOKEY
  68. ;③確實哪一列的鍵被按下
  69. KEY2:        MOV R6,#04H         ;循環4次
  70.                 MOV R5,#0FEH   ;存放的是每一列應該輸入的值
  71. KEY3:        MOV P0,R5          ;P0.0為0
  72.                 MOV A,P3          ;讀取P3口
  73.                 ANL A,#0FH          ;只要低四位
  74.                 CJNE A,#0FH,KEY4  ;判斷是不是全1,若全1,證明此列沒鍵按下,順序執行,否則,在此列有鍵按下,轉到KEY4
  75.                
  76.                 MOV A,R5
  77.                 RL A                 ;循環左移一位
  78.                 MOV R5,A
  79.                 DJNZ R6,KEY3   ;判斷4次循環是否結束,沒結束,繼續執行上述過程
  80.                 SJMP NOKEY           ;四次都結束,且中間沒有轉到KEY4,證明沒鍵按下
  81. ;④此列上有鍵按下,顯示鍵值
  82. KEY4:        SWAP A                 ;半字節交換,高4位有效
  83.                 MOV B,A                   ;B存儲
  84.                 MOV A,R5     ;R5是列值
  85.                 ANL A,#0FH         ;只要低四位
  86.                 ORL B,A                 ;組合值,去查表
  87.                 MOV DPTR,#TAB1
  88.                 MOV R7,#16          ;共16個鍵,循環16次
  89.                 MOV R5,#0          ;從第0個開始
  90. KEY5:        MOV A,R5          
  91.                 MOVC A,@A+DPTR          ;讀取值
  92.                 CJNE A,B,KEY7         ;判斷是否和獲得的組合值是否相等。相等,順序執行,否則,轉到KEY7
  93. ;⑤鍵是否抬起的問題
  94. KEY6:        MOV A,P3                 ;等著鍵抬起
  95.                 ANL A,#0FH                 ;只要低四位
  96.                 CJNE A,#0FH,KEY6 ;不是0FH,證明沒抬起來
  97.                 MOV A,R5                 ;A中存放的是鍵值的序號
  98.                 SJMP EXIT
  99. KEY7:        INC R5                        ;序號加1,繼續循環
  100.                 DJNZ R7,KEY5       
  101. NOKEY:        SETB C               ;進位位為1,證明沒鍵按下
  102. EXIT:        RET

  103. ;延時程序
  104. DELAY:         MOV R5,#02H
  105. DL:                   MOV R6,#0FFH
  106. DL1:         DJNZ R6,DL1
  107.               DJNZ R5,DL
  108.                   RET

  109. ;顯示程序
  110. DISP:        MOV DPTR,#TAB
  111.                 MOV R0,#KBUF ;存放要顯示的數據
  112.                 MOV R7,#8        ;共8個字節
  113.                 MOV R4,#1        ;存放字位
  114. DISP0:        MOV A,@R0        ;通過R0得到要顯示的值
  115.                 MOVC A,@A+DPTR        ;查表得到字型碼
  116.                 MOV P1,A          ;送到P1口顯示
  117.                 MOV A,R4
  118.                 MOV P0,A          ;字位送到P0口
  119.                 RL A                  ;左移一位
  120.                 MOV R4,A          ;又送到R4
  121.                 LCALL DELAY          ;延時
  122.                 MOV P1,#0FFH  ;關顯示
  123.                 INC R0                  ;R0加一
  124.                 DJNZ R7,DISP0 ;判斷8位是否全部顯示,若沒有,則繼續顯示,否則返回
  125.                 RET
  126. TAB:        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,82H,0C6H,0A1H,86H,8EH                                ;共陽極字型碼
  127. TAB1:        DB 0EEH,0EDH,0EBH,0E7H,0DEH,0DDH,0DBH,0D7H,0BEH,0BDH,0BBH,0B7H,07EH,07DH,07BH,77H      ;鍵值表   
  128.                 END
復制代碼

所有資料51hei提供下載:
實驗連接圖 源碼.zip (18.43 KB, 下載次數: 12)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99精品久久免费 | 国产综合网站 | 国产精品美女久久久久久不卡 | 国产伦一区二区三区 | 日韩午夜| 国产91久久精品一区二区 | 黄色成人在线观看 | 不卡在线视频 | 亚洲黄色在线免费观看 | 久久国产一区 | 婷婷五月色综合 | 91精品国产91久久久久久丝袜 | 中文字幕日韩欧美一区二区三区 | 欧美黄色一区 | 伊人热久久 | 亚洲精品二区 | 日韩中出 | 日韩午夜 | 亚洲伊人久久综合 | 黄色毛片免费视频 | 不卡av电影在线播放 | 亚洲欧洲在线看 | 婷婷色成人 | 中文字幕免费视频 | 亚洲区一区二 | 欧美一级黄色片免费观看 | 羞羞视频在线观看 | 久久综合一区二区三区 | 91av在线电影 | 久久久久久美女 | www.一级片 | 欧美精品在线一区 | 亚洲午夜久久久 | 精品国产一区探花在线观看 | 国产日韩欧美 | 中文字幕动漫成人 | 在线观看欧美日韩视频 | 狠狠综合网 | 国产免费一区二区三区最新6 | 欧美精品在线免费观看 | 91成人在线视频 |