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

標題: Proteus仿真單片機讀4*6矩陣鍵盤子程序的仿真學習程序 [打印本頁]

作者: Jackyt    時間: 2020-2-25 21:40
標題: Proteus仿真單片機讀4*6矩陣鍵盤子程序的仿真學習程序
基于protus的讀鍵子程序的仿真學習,已附代碼。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. ;===============================================================================
  2. ;                   LED Digit Display & 4*6 KeyPad
  3. ;                   By:Wu,ChuiHong
  4. ;===============================================================================
  5. ;20181106 V1.0
  6. ;===============================================================================
  7. Dark                Equ    10H
  8. ;===============================================================================
  9. DisModePort         Equ    0000H                  ;0:Light up
  10. DisCSPort           Equ    2000H                  ;1:Light up
  11. ;-------------------------------------------------------------------------------
  12. KeyInPort           Equ    P1                     ;Use P1.0..P1.3
  13. KeyOutPort          Equ    DisCSPort
  14. ;===============================================================================
  15. DisBuf              Equ    30H;..35H
  16. ;===============================================================================
  17.                     Org    0000H
  18.                     AJmp   Main
  19. ;===============================================================================
  20. Display:            Mov    R0,#DisBuf
  21.                     Mov    R1,#00000001B
  22. DisplayLp:          Mov    A,R1
  23.                     Mov    Dptr,#DisCSPort
  24.                     Movx   @Dptr,A

  25.                     Mov    A,@R0
  26.                     Mov    Dptr,#DisTab
  27.                     Movc   A,@A+Dptr
  28.                     Mov    Dptr,#DisModePort
  29.                     Movx   @Dptr,A

  30.                     ACall  Delay

  31.                     Inc    R0
  32.                     Mov    A,R1
  33.                     RL     A
  34.                     Mov    R1,A

  35.                     Cjne   R0,#DisBuf+6,DisplayLp
  36.                     Ret
  37. ;-------------------------------------------------------------------------------
  38. ;                   Code   00h,  01h,  02h,  03h, 04h,  05h,  06h, 07h ,08h, 09h
  39. ;                   Char   "0",  "1",  "2",  "3", "4",  "5",  "6", "7" ,"8", "9"
  40. DisTab:             DB    0c0h, 0f9h, 0a4h, 0b0h, 99h,  92h,  82h, 0f8h,80h, 90h

  41. ;                   Code   0ah,  0bh,  0ch , 0dh , 0eh, 0fh, 10h
  42. ;                   Char   "a",  "b",  "c" , "d" , "e", "f", " "
  43.                     DB     88h,  83h,  0c6h, 0a1h, 86h, 8eh, 0FFH
  44. ;--------------------------------------------------------------------------
  45. Delay:              Mov    r6,#4                  ;8*256*2*T(1us)=8*512=4000us=2ms
  46. Delay1:             Mov    r7,#0
  47.                     Djnz   r7,[        DISCUZ_CODE_1        ]nbsp;                  ;2
  48.                     Djnz   r6,Delay1
  49.                     Ret
  50. ;-------------------------------------------------------------------------------
  51. InitDis:            Mov    DisBuf+0,#0
  52.                     Mov    DisBuf+1,#Dark
  53.                     Mov    DisBuf+2,#Dark
  54.                     Mov    DisBuf+3,#Dark
  55.                     Mov    DisBuf+4,#Dark
  56.                     Mov    DisBuf+5,#Dark
  57.                     Ret
  58. ;===============================================================================
  59. KeySCan:            Mov    Dptr,#KeyOutPort       ;Fast Judge if Key pressed
  60.                     Clr    A                      ;Output all 0
  61.                     Movx   @Dptr,A
  62.                     Mov    P1,#0FFH               ;Input to A
  63.                     Mov    A,P1
  64.                     Cpl    A
  65.                     Anl    A,#0FH
  66.                     Ret
  67. ;-------------------------------------------------------------------------------
  68. ReadKey:            ACall  KeyScan                ;If Any Key Pressed
  69.                     ACall  Display                ;?
  70.                     Jz     ReadKey                ;No Key, Wait

  71.                     ACall  Display                ;Delay
  72.                     ACall  Display
  73.                     ACall  KeyScan
  74.                     Jz     ReadKey                ;If Key Still Pressed

  75.                     Mov    R1,#0                  ;Key Column Code
  76.                     Mov    R2,#11111110B
  77.                     Mov    Dptr,#KeyOutPort
  78. ReadKeyLoop:        Mov    A,R2                   ;Key Output
  79.                     Movx   @Dptr,A
  80.                     Jb     KeyInPort.0,ReadKeyNxt0;If .0=1(No Key) to next
  81.                     Mov    A,#0                   ;Key Line Code
  82.                     AJmp   ReadKeyOk
  83. ReadKeyNxt0:        Jb     KeyInPort.1,ReadKeyNxt1;If .0=1(No Key) to next
  84.                     Mov    A,#6
  85.                     AJmp   ReadKeyOk
  86. ReadKeyNxt1:        Jb     KeyInPort.2,ReadKeyNxt2;If .0=1(No Key) to next
  87.                     Mov    A,#12
  88.                     AJmp   ReadKeyOk
  89. ReadKeyNxt2:        Jb     KeyInPort.3,ReadKeyNxt3;If .0=1(No Key) to next
  90.                     Mov    A,#18
  91.                     AJmp   ReadKeyOk
  92. ReadKeyNxt3:        Mov    A,R2
  93.                     RL     A
  94.                     Mov    R2,A
  95.                     Inc    R1
  96.                     AJmp   ReadKeyLoop

  97. ReadKeyOk:          Add    A,R1                   ;A=A+R1=Key Code
  98.                     Push   Acc
  99. ReadKey1:           ACall  Display
  100.                     ACall  KeySCan
  101.                     Jnz    ReadKey1
  102.                     Pop    Acc                    ;Return A=KeyCode
  103.                     Ret
  104. ;===============================================================================
  105. AToDisHex:          Mov    B,#16
  106.                     Div    AB
  107.                     Mov    DisBuf+0,B
  108.                     Mov    DisBuf+1,A
  109.                     Ret
  110. ;===============================================================================
  111. Main:               Mov    Sp,#07H
  112.                     ACall  InitDis
  113. ;-------------------------------------------------------------------------------
  114. MainLoop:           ACall  Display                ;Dynamic Display
  115.                     ACall  ReadKey                ;Read Key and get Key_Code
  116.                     ;ACall  AToDisHex              ;Show Key code,MUST after ReadKey
  117.                     Mov    DisBuf+5,DisBuf+4
  118.                     Mov    DisBuf+4,DisBuf+3
  119.                     Mov    DisBuf+3,DisBuf+2
  120.                     Mov    DisBuf+2,DisBuf+1
  121.                     Mov    DisBuf+1,DisBuf+0
  122.                     Mov    DisBuf+0,A
  123.                     AJmp   MainLoop
  124. ;===============================================================================
  125.                     End
復制代碼

全部資料51hei下載地址:
Demo.zip (34.66 KB, 下載次數: 13)






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品少妇一区二区三区日产乱码 | 性一交一乱一透一a级 | 亚洲一区二区三区四区五区午夜 | 九九久久在线看 | 成人超碰在线 | 日韩黄色小视频 | 伊人焦久影院 | 国产日韩欧美一区 | wwwsihu| 久久一级| 国产高清一二三区 | 国产精品综合久久 | 成人av片在线观看 | 欧美日韩不卡在线 | 精品久久伊人 | 色综合色综合 | 色伊人网 | 91伦理片 | 欧美成人激情视频 | 国产九九av| 激情五月婷婷综合 | 久久精品国产a三级三级三级 | www.中文字幕av| av中文字幕在线播放 | 精品视频免费 | 国产精品亚洲成在人线 | 国产精品日韩欧美一区二区三区 | 欧美全黄 | 久久久久久久久久爱 | 国产成人精品一区二区三区 | 高清一区二区三区 | 亚洲成a| 成人网av | 久久久高清| 成人欧美一区二区三区黑人孕妇 | av一区在线 | 国产1区 | 黄色一级视频免费 | 亚洲成人国产综合 | 国产分类视频 | 亚洲精品成人网 |