1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 標題題目和程序都有,就是看不懂 [打印本頁]

作者: zt829    時間: 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


這個程序誰能看懂?求求大的很幫我注釋一下每一步的作用。萬分感謝
作者: zt829    時間: 2018-7-7 10:09
大佬們告訴我一下吧
作者: ahshmj    時間: 2018-7-7 16:02
上面不是有注釋嗎?你看不懂說明你學習不到家,……自己認真學習。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1