?? 鍵盤輸入中斷.txt
字號:
1
這個程序能接受256個字符,如果你還想輸入更多的字符,只需要把空間留的更多一點就行
data segment
keyboard db 256 dup (?) ;為輸入的字符串預留空間
data ends
code segment
assume cs:code,ds:data
main proc far
mov ax,data
mov ds,ax
lea dx,keyboard ;這個中斷能使你在輸入時就能看見輸入的字符
mov ah,9
int 21h
mov ah,1 ;這個中斷是為了使程序暫停一下,不然你按回車鍵就立刻結束
int 21h
mov ah,4ch
int 21h
main endp
code ends
end main
TC 下調試通過
注意鍵盤中斷每按一次鍵中斷兩次(按下一次,松開一次)
所以只按5次鍵,程序就會退出
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define AAA 0x09 /* 鍵盤I/O中斷的中斷號 */
int TimerCounter=0;
/* 指向原來時鐘中斷處理過程入口的中斷處理函數指針(句柄) */
void interrupt ( *oldhandler )();
/* 新的鍵盤中斷處理函數 */
void interrupt newhandler()
{
TimerCounter++;
(*oldhandler)();
}
void main(void)
{
int key;
oldhandler = getvect( AAA );
disable();
setvect( AAA, newhandler );
enable();
while(1)
{
if ( TimerCounter >= 10 )
{
break;
}
}
disable();
setvect( AAA, oldhandler );
enable();
}
3
鍵盤輸入匯編程序-中斷
0
推薦鍵盤輸入匯編程序
;----------------------------------------------------------------------;
;功 能:顯示部分默認顯示"- - - - - - - -",有按鍵按下就顯示相應的鍵值。
; 如KL1鍵按下顯示"- - - - - - - 1",在沒有新的按鍵按下之前保持該
; 顯示狀態,其他按鍵依次類推 。
;備 注:
;----------------------------------------------------------------------;
;-----------------------------------------------------------------------
;位定義
A138 BIT P2.0 ;74HC138的C、B、A和CS信號輸入
B138 BIT P2.1
C138 BIT P2.2
CS138 BIT P2.3
INT1IN BIT P3.3 ;INT1中斷輸入口
;變量定義
DELAYT EQU 30H ;控制延時程序中的時間
KEYVAL EQU 31H ;保存按鍵的鍵值
LEDVAL1 EQU 40H ;保存8個數碼管要顯示的值
LEDVAL2 EQU 41H
LEDVAL3 EQU 42H
LEDVAL4 EQU 43H
LEDVAL5 EQU 44H
LEDVAL6 EQU 45H
LEDVAL7 EQU 46H
LEDVAL8 EQU 47H
;-----------------------------------------------------------------------
;主程序
ORG 0000H
SJMP START
ORG 0013H
LJMP KEYINT1 ;轉到外部中斷1服務程序,取出按鍵鍵值
ORG 0080H
START: MOV SP,#60H
MOV P2,#0FFH ;初始狀態
SETB IT1 ;下降延觸發
SETB EX1 ;允許外部中斷1
SETB EA ;開總中斷允許
MOV LEDVAL1,#0CH ;0Bh為“-”在表格中的偏移位置
MOV LEDVAL2,#0CH
MOV LEDVAL3,#0CH
MOV LEDVAL4,#0CH
MOV LEDVAL5,#0CH
MOV LEDVAL6,#0CH
MOV LEDVAL7,#0CH
MOV LEDVAL8,#0CH
MOV R0,#0F7H ;顯示用74138譯碼使用,P23為0選通138
; P22、P21和P20為111
MOV R1,#LEDVAL1 ;R1指向數碼管顯示值緩存區的首地址
MOV R2,#08H ;循環掃描次數,有8個數碼管要顯示
MOV DPTR,#DISPTAB ;段碼值存放的表格
;控制8個數碼管依次顯示“---- ---X”
DISPF: MOV A,@R1 ;查數字對應的實際段碼值
MOVC A,@A+DPTR
MOV P0,A ;送段碼
MOV P2,R0 ;選顯示的位
DEC R0 ;修改位選,指向下一個數目管
INC R1 ;修改段選指針
LCALL DELAYDISP ;延時子程序
DJNZ R2,DISPF
MOV R0,#0F7H ;8位循環掃描一次完,重新置初值
MOV R1,#LEDVAL1
MOV R2,#08H
SJMP DISPF
;-----------------------------------------------------------------------
;子程序
;----------------------------------------------------------------------;
;函 數 名:DELAYFUNC
;功 能:延時子程序,其中一個嵌套的小循環約延時10ms,總的延時時間由大
; 循環決定為DELAYT× 05ms
;入 口:DELAYT
;出 口:無
;調用模塊:無
;備 注:系統使用的晶振為11.0592MHz
; 使用了R5、R6和R7(第1組)
;----------------------------------------------------------------------;
DELAYFUNC: PUSH PSW ;暫存RS0和RS1的狀態
SETB RS0 ;切換到寄存器組1
CLR RS1
MOV R5,DELAYT ;設置有多少個10ms的循環
DELAYLP0: MOV R6,#12H ;一個嵌套小循環,10ms
DELAYLP1: MOV R7,#0FFH
DELAYLP2: DJNZ R7,DELAYLP2
DJNZ R6,DELAYLP1
DJNZ R5,DELAYLP0
POP PSW ;切換回過去的寄存器組
RET
;----------------------------------------------------------------------;
;函 數 名:DELAYDISP
;功 能:延時子程序,供動態掃描延時用
;入 口:DELAYT
;出 口:無
;調用模塊:無
;備 注:系統使用的晶振為11.0592MHz
; 使用了R5、R6和R7(第0組)
;----------------------------------------------------------------------;
DELAYDISP: MOV R5,#01H ;設置有多少個4ms的循環
DELAYSP0: MOV R6,#04H ;一個嵌套小循環4ms
DELAYSP1: MOV R7,#0F0H
DELAYSP2: DJNZ R7,DELAYSP2
DJNZ R6,DELAYSP1
DJNZ R5,DELAYSP0
RET
;-----------------------------------------------------------------------
;中斷服務程序
;----------------------------------------------------------------------;
;函 數 名:KEYINT1
;功 能:外部中斷1入口,查詢輸入按鍵的鍵值,并賦值給LED8的緩存
;入 口:INT1IN
;出 口:KEYVAL、LED8VAL
;調用模塊:DELAYFUNC
;備 注:去鍵抖動的時間為15ms左右
; 使用了R5、R6和R7(第2組)
;----------------------------------------------------------------------;
KEYINT1: CLR EA ;關總中斷
PUSH ACC
MOV DELAYT,#01H ;去鍵抖動,15ms左右
LCALL DELAYFUNC
JB INT1IN,INT1RET ;是鍵抖引起中斷,則返回
MOV A,P2 ;讀入P27、P26和P25狀態,得到鍵值
SWAP A ;保存到KEYVAL
RR A
ANL A,#07H
MOV KEYVAL,A
MOV LEDVAL1,KEYVAL ;把按下的鍵值賦值給LEDVAL
INT1RET: POP ACC
SETB EA
RETI
;-----------------------------------------------------------------------
;表格
;-----------------------------------------------------------------------
;數碼管顯示表格
;-----------------------------------------------------------------------
;顯示數據 0 1 2 3 4 5 6 7 8 9 P H -
DISPTAB: DB 9FH,06H,5BH,4FH,0C6H,0CDH,0DDH,07H,0DFH,0CFH,0D3H,0D6H,40H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -