?? 6t.bak
字號(hào):
; *************************************
; * (SEND.ASM) *
; * 十五路遙控發(fā)送控制器 *
; * 2001.7.18 *
; *************************************
;
;**********************************************************************
;* *
;* KEYX0 P1.0 1 40 VCC *
;* KEYX1 P1.1 2 39 P0.0 KEYY0 *
;* KEYX2 P1.2 3 38 P0.1 KEYY1 *
;* KEYX3 P1.3 4 37 P0.2 KEYY2 *
;* P1.4 5 36 P0.3 KEYY3 *
;* P1.5 6 35 P0.4 KEYY4 *
;* P1.6 7 34 P0.5 KEYY5 *
;* P1.7 8 33 P0.6 KEYY6 *
;* RST 9 32 P0.7 KEYY7 *
;* P3.0 10 MCS-51 31 EA VDD *
;* P3.1 11 30 ALE *
;* P3.2 12 29 PSEN *
;* P3.3 13 28 P2.7 *
;* P3.4 14 27 P2.6 *
;* REMOTEOUT T1 P3.5 15 26 P2.5 *
;* P3.6 16 25 P2.4 *
;* P3.7 17 24 P2.3 *
;* XTAL2 18 23 P2.2 *
;* XTAL1 19 22 P2.1 *
;* VSS 20 21 P2.0 *
;* *
;* *
;**********************************************************************
;
;
;
;偽定義
KEYX0 EQU P1.0 ;P1.0 -- P1.3位鍵盤行掃描
KEYX1 EQU P1.1 ;本系統(tǒng)采用4 * 8 鍵盤陣列
KEYX2 EQU P1.2
KEYX3 EQU P1.3
KEYY EQU P0 ;P0 口鍵盤列掃描
;
;
;
;
;*************************************
;* *
;* 主程序和中斷程序入口 *
;* *
;*************************************
ORG 0000H ;程序執(zhí)行開(kāi)始地址
AJMP START ;跳至START執(zhí)行
ORG 0003H ;外中斷0中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 000BH ;定時(shí)器T0中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 0013H ;外中斷1中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 001BH ;定時(shí)器T1中斷入口地址
LJMP INTT1 ;跳至INTT1中斷服務(wù)程序
ORG 0023H ;串行口中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
ORG 002BH ;定時(shí)器T2中斷入口地址
RETI ;中斷返回(不開(kāi)中斷)
;
;*************************************
;* *
;* 初 始 化 程 序 *
;* *
;*************************************
CLEARMEMIO: CLR A ;A清0
DEC A ;A為#0FFH
MOV P0,A ;P0-P3口置1
MOV P1,A ;
MOV P2,A ;
MOV P3,A ;
CLR P3.5 ;關(guān)遙控輸出
CLEARMEM: MOV SP,#70H ;設(shè)堆棧基址為70H
MOV IE,#00H ;關(guān)所有中斷
MOV IP,#01H ;設(shè)優(yōu)先級(jí)
MOV TMOD,#22H ;8位自動(dòng)重裝初值模式
MOV TH1,#0F3H ;定時(shí)為13微秒初值
MOV TL1,#0F3H ;
SETB EA ;開(kāi)總中斷允許
RET ;返回
;
;
;
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: LCALL CLEARMEMIO ;調(diào)用初始化子程序
;
MAIN: LCALL KEYWORK ;主體程序。調(diào)用查鍵子程序
LJMP MAIN ;轉(zhuǎn)MAIN循環(huán)
NOP ;PC值出錯(cuò)處理
NOP
NOP
LJMP START ;重新初始化
;
;*************************************
;* *
;* T1中斷服務(wù)程序 *
;* *
;*************************************
INTT1: CPL P3.5 ;40kHZ紅外線遙控信號(hào)產(chǎn)生
RETI ;中斷返回
;
;
;*************************************
;* *
;* 鍵盤工作子程序(4 * 8 陣列) *
;* 出口為各鍵工作程序入口 *
;*************************************
KEYWORK: MOV KEYY,#0FFH ;置列線輸入狀態(tài)
CLR KEYX0 ;行線(P1口)全置0
CLR KEYX1
CLR KEYX2
CLR KEYX3
MOV A,KEYY ;讀入P0口值
MOV B,A ;KEYY口值暫存B中
CJNE A,#0FFH,KEYHIT ;不等于#0FFH,轉(zhuǎn)KEYHIT(有鍵按下)
KEYOUT: RET ;沒(méi)有鍵按下返回
;
KEYHIT: LCALL DL10MS ;延時(shí)去抖動(dòng)
MOV A,KEYY ;再讀入P0口值至A
CJNE A,B,KEYOUT ;A不等于B(是干擾),子程序返回
SETB KEYX1 ;有鍵按下,找鍵號(hào)開(kāi)始,查0行
SETB KEYX2
SETB KEYX3
MOV A,KEYY ;讀入P0口值
CJNE A,#0FFH,KEYVAL0 ;P0不等于#0FFH,按下鍵在第0行
SETB KEYX0 ;不在第0行,開(kāi)始查1行
CLR KEYX1
MOV A,KEYY ;讀入P0口值
CJNE A,#0FFH,KEYVAL1 ;P0口不等于#0FFH,按下鍵在第1行
SETB KEYX1 ;不在第1行,開(kāi)始查2行
CLR KEYX2
MOV A,KEYY ;讀入P0口值
CJNE A,#0FFH,KEYVAL2 ;P0口不等于#0FFH,按下鍵在第2行
SETB KEYX2 ;不在第2行,開(kāi)始查3行
CLR KEYX3
MOV A,KEYY ;讀入P0口值
CJNE A,#0FFH,KEYVAL3 ;P0口不等于#0FFH,按下鍵在第3行
LJMP KEYOUT ;不在第3行,子程序返回
;
KEYVAL0: MOV R2,#00H ;按下鍵在第0行,R2賦行號(hào)初值0
LJMP KEYVAL4 ;跳到KEYVAL4
;
KEYVAL1: MOV R2,#08H ;按下鍵在第1行,R2賦行號(hào)初值8
LJMP KEYVAL4 ;跳到KEYVAL4
;
KEYVAL2: MOV R2,#10H ;按下鍵在第2行,R2賦行號(hào)初值16
LJMP KEYVAL4 ;跳到KEYVAL4
;
KEYVAL3: MOV R2,#18H ;按下鍵在第3行,R2賦行號(hào)初值24
LJMP KEYVAL4 ;跳到KEYVAL4
;
KEYVAL4: MOV DPTR,#KEYVALTAB ; 鍵值翻譯成連續(xù)數(shù)字
MOV B,A ;P0口值暫存B內(nèi)
CLR A ;清A
MOV R0,A ;清R0
KEYVAL5: MOV A,R0 ;查列號(hào)開(kāi)始,R0數(shù)據(jù)放入A
SUBB A,#08H ;A中數(shù)減8
JNC KEYOUT ;借位C為0,查表出錯(cuò),返回
MOV A,R0 ;查表次數(shù)小于8,繼續(xù)查,
MOVC A,@A+DPTR ;查列號(hào)表
INC R0 ;R0加1
CJNE A,B,KEYVAL5 ;查得值和P0口值不等,轉(zhuǎn)KEYVAL5再查
DEC R0 ;查得值和P0口值相等,R0減1
MOV A,R0 ;放入A(R0中數(shù)值即為列號(hào)值)
ADD A,R2 ; 與行號(hào)初值相加成為鍵號(hào)值(0-31)
MOV B,A ;鍵號(hào)乘3處理用于JMP散轉(zhuǎn)指令
RL A ;鍵號(hào)乘3處理用于JMP散轉(zhuǎn)指令
ADD A,B ;鍵號(hào)乘3處理用于JMP散轉(zhuǎn)指令
MOV DPTR,#KEYFUNTAB ; 取散轉(zhuǎn)功能程序(表)首址
JMP @A+DPTR ;散轉(zhuǎn)至對(duì)應(yīng)功能程序標(biāo)號(hào)
KEYFUNTAB: LJMP KEYFUN00 ;跳到鍵號(hào)0對(duì)應(yīng)功能程序標(biāo)號(hào)
LJMP KEYFUN01 ;跳到鍵號(hào)1對(duì)應(yīng)功能程序標(biāo)號(hào)
LJMP KEYFUN02 ;跳到鍵號(hào)2對(duì)應(yīng)功能程序標(biāo)號(hào)
LJMP KEYFUN03 ;跳到鍵號(hào)3對(duì)應(yīng)功能程序標(biāo)號(hào)
LJMP KEYFUN04 ;跳到鍵號(hào)4對(duì)應(yīng)功能程序標(biāo)號(hào)
LJMP KEYFUN05 ;跳到鍵號(hào)5對(duì)應(yīng)功能程序標(biāo)號(hào)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -