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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

標題題目和程序都有,就是看不懂

[復制鏈接]
跳轉到指定樓層
樓主
ID:366458 發表于 2018-7-7 09:14 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  利用實驗箱所帶小鍵盤,加上一個開關作為功能選項鍵,實現A-H八個大寫母,以 及 a-h 八個小寫字母的輸入掃描程序,利用另一個開關模擬回車鍵,讓所輸入的字 母顯示在七段數碼管顯示器上。
;********************;
;* 8255薄膜按鍵實驗 *;
;********************;
a8255        equ 288H    ;8255 A口   
b8255        equ 289H
c8255        equ 28aH    ;8255 C口
k8255        equ 28bH    ;8255控制口
data segment
table1    dw 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0h
           dw 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h    ;鍵盤掃描碼表
LED       DB 67H,74H,5cH,7cH,58H,5eH,7bH,71H,7DH,76H,77H,7FH
           DB 39h,3FH,79h,71h,0ffh   ;LED段碼表,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
char  db '01234567?@ABCDEF'                    ;字符表
NUM DB 8 DUP(0)
key_in db 0h
data ends
stacks segment stack    ;堆棧空間
     db 100 dup (?)
stacks ends
code segment
        assume cs:code,ds:data,ss:stacks,es:data
start:
        cli
        mov ax,data
        mov ds,ax
        mov es,ax                   ;把數據放在數據段寄存器
        mov ax,stacks
        mov ss,ax                   ;把堆棧放在堆棧段
        MOV DX,k8255                ;初始化8255控制字
        mov al,81h                  ;設置c端口低四位輸入,a,b輸出,0工作方式
        out dx,al
        MOV    BX,0      
main_key:
        call key  
  cmp byte ptr key_in,'1'     
        jz dis1  
  cmp byte ptr key_in,'2'     
        jz dis2

dis1:    call key
cmp byte ptr key_in, '0'
jz bbb
PUSH BX                     
            MOV BX,OFFSET LED
            MOV AL,byte ptr key_in
      SUB al,30h
      CMP al,09h
      JNG  DIS2
       SUB al,07h   
sub al,8
XLAT                        
        POP BX
        MOV NUM+BX,AL               
        INC BX
        CMP BX,8                    
        JB  dis1
        jmp ccc                 
DIS2:  call key
cmp byte ptr key_in, '0'
jz bbb
PUSH BX                     
            MOV BX,OFFSET LED
            MOV AL,byte ptr key_in
      SUB al,30h
      CMP al,09h
      JNG  DIS2
       SUB al,07h
     XLAT                        
        POP BX
        MOV NUM+BX,AL               
        INC BX
        CMP BX,8                    
        JB  dis2
                    


CCC:  MOV BX,0FE08H  ;BH=0FE  BL=08 ;預備點亮第一個數碼管,并且控制循環次數
        MOV DI ,OFFSET NUM           ;取num偏移地址
BBB:         MOV DX,b8255   
        MOV  AL,bh
        OUT DX,AL                   ;點亮數碼管
        ROL BH,1                    ;準備點亮下一個
        MOV DX,a8255
        MOV AL,[di]                 
        OUT DX,AL                   ;依次將得到的字符輸出
        inc di           
       

push cx
          mov cx,100                 
ddd:    loop ddd                  ;延時
          pop cx
        DEC BL                    
        CMP BL,0
        JZ CCC                    ;是否已經全部輸出,如果是則重新輸出
        JMP BBB
           
       ; mov ax,4c00h         
        ;int 21h                 
key proc near

key_loop:   
        mov dx,c8255
        mov al,0fh            
        out dx,al                   ;清除輸入端口的值
        in al,dx                    ;讀行掃描值
        and al,0fh
        cmp al,0fh                  ;判斷是否按下
        jz key_loop                 ;未發現有鍵按下則轉
        call delay                  ;delay for amoment
        mov ah,al                   ;將行狀態保存
        MOV DX,k8255                  
        mov al,88h                  
        out dx,al                    ;設置工作狀態高四位輸入
        mov dx,c8255
        mov al,ah
        or al,0f0h
        out dx,al                   ;對列進行清除
        in al,dx                    ;讀列掃描值
        and al,0f0h
        cmp al,0f0h
        jz key_loop                 ;未發現有鍵按下則轉
        
        mov si,offset table1        ;鍵盤掃描碼表首址
        mov di,offset char          ;字符表首址
        mov cx,16                   ;待查表的表大小
key_tonext:
        cmp ax,[si]                 ;cmp (col,row) with every word
        jz key_findkey              ;in the table
        dec cx
        jz key_loop                 ;未找到對應掃描碼
        add si,2
        inc di         
        jmp key_tonext
key_findkey:
        mov dl,[di]
        mov ah,02
        int 21h                    ;顯示查找到的鍵盤碼
        mov byte ptr key_in,dl     ;字符進行另一個命名
key_waitup:
        MOV DX,k8255
        mov al,81h
        out dx,al
        mov dx,c8255
        mov al,0fh
        out dx,al
        in al,dx                  ;讀行掃描值
        and al,0fh
        cmp al,0fh
        jnz key_waitup            ;按鍵未抬起轉
        call delay                 ;消抖
        ret
;exit:        mov byte ptr key_in,'E'
        ret
key endp
delay proc near
       push cx
       mov  cx,0ffffh
delay1:
       loop delay1
       pop  cx
       ret
delay endp
code ends
end start


這個程序誰能看懂?求求大的很幫我注釋一下每一步的作用。萬分感謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:366458 發表于 2018-7-7 10:09 來自觸屏版 | 只看該作者
大佬們告訴我一下吧
回復

使用道具 舉報

板凳
ID:7485 發表于 2018-7-7 16:02 | 只看該作者
上面不是有注釋嗎?你看不懂說明你學習不到家,……自己認真學習。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久国产 | 国产午夜高清 | 91视频电影 | 一级做a爰片性色毛片 | 国产精品乱码一区二区三区 | 97久久精品午夜一区二区 | 人操人免费视频 | 色一阁| 久久日韩粉嫩一区二区三区 | 日韩精品成人 | 久久在线看 | 中文字幕在线中文 | 韩国av一区二区 | 国产二区视频 | 青青伊人久久 | 亚洲成人一区 | 亚洲一区二区精品视频 | 亚洲人在线观看视频 | 97avcc| 盗摄精品av一区二区三区 | 一级免费视频 | 日本三级日产三级国产三级 | 亚洲人久久 | 伊人网站在线观看 | 一区免费视频 | 极品粉嫩国产48尤物在线播放 | 国内精品久久久久 | 国产91av视频| 狠狠艹 | 在线看无码的免费网站 | av网站在线看 | 国产精品一区久久久 | 欧美日韩中文字幕在线 | 亚洲三级在线 | 国产欧美日韩综合精品一区二区 | 毛色毛片免费看 | 久久性色| 日韩精品区 | 国产精品成人一区二区三区 | 国产午夜精品久久久久 | 91亚洲国产亚洲国产 |