⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex3-2.asm

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 ASM
字号:
;--------------程序信息-----------------
;文件名   : ex3-2.asm
;版本     : 1.0
;作者     :
;修改时间 :

;--------------程序说明------------------
;CHAP 3.2  行列式键盘输入实例

;-----------常量和变量声明---------------
KEYIN EQU P1;           定义宏变量,易于硬件连线更改时,程序的修改

;--------------预定义--------------------

               ORG 0000H
               LJMP START

;------------中断入口地址分配------------
               ;ORG 0003H
               ;LJMP INT0PRG
               ;ORG 000BH
               ;LJMP INT1PRG
               ;ORG 0013H;
               ;LJMP
               ;ORG 0030H

START:
        MOV SP,#60H;        初始化堆栈指针
        MOV R2,#0FFH; 

;--------------初始化子程序--------------
     MOV SP,60H;
;--------------主程序--------------------
MAIN:
        LCALL KEYBOARD;   按键识别子程序
        LCALL KEYEXE;      按键执行子程序      
        JMP MAIN


LJMP MAIN


;----------------子程序------------------


;---------------------------------
;    行列式键盘子程序部分
;---------------------------------
KEYBOARD:
        MOV R0,#00H;         r0寄存器保存键值,初始化清零
ROW:   MOV KEYIN,#0FH;       线反转法识别键盘的值,具体在下一节论述
ROW00: JNB KEYIN.0,ROW0;
ROW01: JNB KEYIN.1,ROW1;
ROW02: JNB KEYIN.2,ROW2;
ROW03: JNB KEYIN.3,ROW3;
        JMP KEYBOARD;
ROW0:  LCALL delay10ms;
        JB KEYIN.0,ROW01;
        MOV R0,#00H;
        JMP COL;
ROW1:  LCALL delay10ms;
        JB KEYIN.1,ROW02;
        MOV R0,#01H;
        JMP COL;
ROW2:  LCALL delay10ms;
        JB KEYIN.2,ROW03;
        MOV R0,#02H;
        JMP COL;
ROW3:  LCALL delay10ms;
        JB KEYIN.3,ROW;
        MOV R0,#03H;
        JMP COL;

COL:    MOV KEYIN,#0FH;      
COL00: JNB KEYIN.0, COL0;
COL01: JNB KEYIN.1, COL1;
COL02: JNB KEYIN.2, COL2;
COL03: JNB KEYIN.3, COL3;
        JMP KEYBOARD;
 COL0: CALL delay10ms;
       JB KEYIN.4,COL01;
       MOV A,#00H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL1: CALL delay10ms;
       JB KEYIN.5,COL02;
       MOV A,#10H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL2: CALL delay10ms;
       JB KEYIN.6,COL03;
       MOV A,#20H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;
 COL3: CALL delay10ms;
       JB KEYIN.7,COL00;
       MOV A,#30H;
       ORL A,R0;
       MOV R0,A;
       JMP KEY;

JB KEYIN.4,COL01;
MOV A,#00H;
ORL A,R0;
MOV R0,A
JMP KEY;

KEY:   MOV A,R0;             将读到的行列信息转化成键值。
       SWAP A;                R0的高位是行号,低位是列号
       ANL A,#0FH;            则 键值=R0的高位×8+R0的低位
       RL A;
       RL A;
       ADD A,R0;
       ANL A,#0FH;
       MOV R0,A;             把得到的键值存在R0中。
       MOV KEYIN,#0FFH;
KEYBOARDEND:
       RET;

KEYEXE: MOV DPTR,#KEYVA      ;按键执行子程序
         MOV A,R0;            读出R0的键值对应的键值表内容
         MOVC A,@A+DPTR;
         MOV R0,A;
KEY1:   CJNE R0,#01H,KEY2;   判断是否是key1
         CPL P2.1;            是,则改变其亮灭状态。
         JMP KEYEND;         调转到子程序尾。
KEY2:   CJNE R0,#02H,KEY3;   
         CPL P2.2 
         JMP KEYEND;
KEY3:   CJNE R0,#04H,KEY4;   
         CPL P2.3 
         JMP KEYEND;
KEY4:   CJNE R0,#08H,KEY5;   
         CPL P2.4 
         JMP KEYEND;
KEY5:   CJNE R0,#10H,KEY6;   
         CPL P2.5 
         JMP KEYEND;
KEY6:   CJNE R0,#20H,KEY7;   
         CPL P2.6 
         JMP KEYEND;
KEY7:   CJNE R0,#40H,KEY8;   
         CPL P2.7 
         JMP KEYEND;
KEY8:   CJNE R0,#80H,KEYEND;   
         CPL P2.0 
         JMP KEYEND;

KEYEND: RET;


;--------------中断子程序----------------

;---------------延时子程序---------------

 Delay10ms: MOV R5,#04H;
 DELAY20: MOV R6,#00F4H;
 DELAY21: MOV R7,#033H;
 DELAY22: DJNZ R7,DELAY22;
        DJNZ R6,DELAY21;
        DJNZ R5,DELAY20;
        RET;

KEYVA:  DB 01H,02H,03H,04H;   键值列表,可改动键值调整相应的键值安排
        DB 05H,06H,07H,08H
        DB 09H,00H,0AH,0BH
        DB 0CH,0DH,0EH,0FH

END

;---------------注意事项-----------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -