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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久www免费人成看片高清 | 国产一区二区高清在线 | 成人h片在线观看 | 国产精品极品美女在线观看免费 | 九九九久久国产免费 | 欧美一区二区三区在线视频 | 欧美精品日韩 | 国产99久久久国产精品 | 久久影院一区 | 天天干天天爱天天爽 | 91精品国产综合久久久久 | 国产精品女人久久久 | 久久久xx| 亚洲精品在线看 | 成人精品视频在线观看 | 亚洲欧美自拍偷拍视频 | 日韩精品一区二区三区老鸭窝 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 久久久久久亚洲精品 | 久久精品久久久久久 | 国产精品成人一区二区三区 | 特一级毛片 | 国产在线观看一区二区 | 狠狠色网 | 成人精品国产免费网站 | 一区二区三区欧美在线观看 | 久久大香| 免费一级黄色录像 | 欧美啪啪网站 | 精品国产乱码久久久久久丨区2区 | 奇米超碰在线 | 欧美电影网 | 一级欧美| 99re视频在线观看 | 欧美日韩国产在线观看 | 国产精品视频一区二区三区 | 日韩蜜桃视频 | 一区二区视频在线 | 六月成人网 | 羞羞网站免费 | 亚洲av毛片成人精品 |