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

📄 12.asm

📁 串口通迅。能够完成下位机对上位机发出的1-9的信号做出响应
💻 ASM
字号:
	/*
	3x3键盘接P3.2-P3.7,数码管数据线P0,位选线接P2.4
	*/
	org  0000h 
	ajmp main 
	ORG 0023H
	lJMP COMINT
	org  0030h 
    main:
	MOV P0, #00H ;
	MOV P2, #0FFH ;
	;MOV R2,#5
	;MOV R0,#53H 
	MOV 20H,#00H ;设置串口工作方式
	MOV TMOD,#20H
	MOV SCON,#50H
	MOV TH1,#0F3H ;设置速率4800,(12M晶体)
	MOV PCON,#80H
	SETB EA
	SETB ES
	SETB TR1
    loop:
           
        mov  dptr,#tab     ;将表头放入DPTR 
	lcall KEY      ;调用键盘扫描程序 
	movc a,@a+dptr    ;查表后将键值送入ACC 
	mov  p0,a           ;将Acc值送入P0口 
	mov sbuf,a
	CLR P2.7            ;开显示 
        ljmp loop        ;返回反复循环显示 
;-------------键盘扫描------------------------------------	
     KEY: LCALL KS        ;调用检测按键子程序 
     JNZ K1           ;有键按下K1
     LCALL DELAY2      ;无键按调用延时去抖 
     AJMP KEY          ;返回继续检测按键 
K1:  LCALL DELAY2 
     LCALL DELAY2     ;有键按下延时去抖动 
     LCALL KS          ;再调用检测按键程序 
     JNZ K2          ;确认有按下进行下一步 
     AJMP KEY         ;无键按下返回继续检测 
K2:  MOV R2,#0DFH      ;将扫描值送入 R2暂存 
     MOV R4,#00H   ;将第一列值送入R4暂存 
K3: MOV P3,R2     ;将R2的值送入P1口 
L6:  JB P3.4,L1        ;P3.4等于1跳转到L1 
     MOV A,#07H       ;将第一行值送入ACC 
     AJMP LK         ;跳转到键值处理程序 
L1:  JB P3.3,L2       ;P3.3等于1跳转到L2 
     MOV A,#04H   ;将第二行的行值送入ACC 
     AJMP LK  ;跳转到键值理程序进行键值处理 
L2:  JB P3.2,NEXT     ;P3.2等于1跳转到NEXT 
     MOV A,#01H     ;将第三行的行值送入ACC 
     AJMP LK          ;跳转到键值处理程序
LK:  ADD A,R4;行值与列值相加再加1后的键值送入A 
     ;ADD A,#01H
     PUSH ACC         ;将A中的值送入堆栈暂存 
K4:  LCALL DELAY2        ;调用延时去抖动程序 
     LCALL KS          ;调用按键检测程序 
     JNZ K4        ;按键没有松开继续返回检测 
     POP ACC      ;将堆栈的值送入ACC 
     RET 
NEXT:INC  R4           ;将列值加一 
     MOV A,R2          ;将R2的值送入A 
     JNB ACC.7,KEY  ;扫描完至KEY处进行下一扫描 
     RL A    ;扫描未完将A中的值右移一位进行下一列的扫描 
     MOV R2,A      ;将ACC的值送入R2暂存 
     AJMP K3       ;跳转到K3继续 
KS:  MOV P3,#1FH   ;将P3口P3.7-P3.5位置0,P3.4-P3.2位置1 
     MOV A,P3     ;读P3口 
     XRL A,#1FH    ;将A中的值与A中的值相异或 
     RET          ;子程序返回 

;-------------------串口中断--------------------------
COMINT:
push acc
CLR ES
CLR RI
MOV A,SBUF
CJNE A,#1,IN_1
MOV P1,#0FEH
IN_1:
CJNE A,#2,IN_2
MOV P1,#0FDH
IN_2:
CJNE A,#3,IN_3
MOV P1,#0FBH
IN_3:
CJNE A,#4,IN_4
MOV P1,#0F7H
IN_4:
CJNE A,#5,IN_5
MOV P1,#0EFH
IN_5:
CJNE A,#6,IN_6
MOV P1,#0DFH
IN_6:
CJNE A,#7,IN_7
MOV P1,#0BFH
IN_7:
CJNE A,#8,IN_8
MOV P1,#07FH
IN_8:
SETB ES
pop acc
RETI



 ;----------延时程序---------------------------
   DELAY2:         ;40ms延时去抖动子程序 
    MOV R5,#08H 
      L7:  MOV R6,#0FAH 
      L8:  DJNZ R6,L8 
	DJNZ R5,L7 
	RET 
  tab: 
	db 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
	end 
	

⌨️ 快捷键说明

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