📄 99qda.asm
字号:
;***************************************************************
; 发送字符串子程序
;***************************************************************
WR_STRING:
MOV R0,#16
WR_S0:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL LCD_WDATA
JNB STRING,WR_S1
CALL DELAY ;加延时形成滚动效果
WR_S1:
DJNZ R0,WR_S0
RET
;***************************************************************
;LCD初始化设定子程序
;***************************************************************
LCD_INIT:
ACALL DELAY5MS ;延时15MS
ACALL DELAY5MS ;等待LCD电源稳定
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#06H ;移动光标
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#0CH ;显示开,关光标
ACALL LCD_CMD ;进行LCD忙检测
RET
;**********************************************************
; 模拟出题器子程序
;**********************************************************
RUBRIC:
CLR TR1 ;发现按下按键,停止T1运行。
MOV A,TL1 ;取T1的当前值。
CPL A ;取反得到对应的题号。
MOV B,#9 ;就题目分成9组。
DIV AB
INC A ;将组号0~8转换为被乘数1~9。
MOV TEMP+3,A ;保存被乘数。
INC B ;将组号0~8转换为乘数1~9。
MOV TEMP+2,B ;保存乘数。
MUL AB ;计算乘积
MOV B,#10
DIV AB
MOV TEMP+1,A ;保存乘积的高位
MOV TEMP+0,B ;保存乘积的低位
CALL DATA_CHANGE ;转换为ASCII码
SETB TR1
RET
;**********************************************************
; 数据转换子程序
;**********************************************************
DATA_CHANGE:
MOV A,TEMP+3
ADD A,#30H
MOV TEMP+3,A ;转换为ASCII码
MOV A,TEMP+2
ADD A,#30H
MOV TEMP+2,A ;转换为ASCII码
MOV A,TEMP+1
ADD A,#30H
MOV TEMP+1,A ;转换为ASCII码
MOV A,TEMP+0
ADD A,#30H
MOV TEMP+0,A ;转换为ASCII码
RET
;**********************************************************
; 被乘数与乘数显示子程序
;**********************************************************
DISP:
MOV A,#0C7H ;显示被乘数
ACALL LCD_CMD
MOV A,TEMP+3
ACALL LCD_WDATA
MOV A,#0C9H ;显示乘数
ACALL LCD_CMD
MOV A,TEMP+2
ACALL LCD_WDATA
CALL ASK_DISP ;显示 ?
RET
;**********************************************************
; 询问显示子程序
;**********************************************************
ASK_DISP:
MOV A,#0CBH
ACALL LCD_CMD
MOV A,#20H
ACALL LCD_WDATA
MOV A,#3FH
ACALL LCD_WDATA ;显示 ?
RET
;**********************************************************
; 乘积显示子程序
;**********************************************************
PRODUCT_DISP:
MOV A,#0CBH ;显示
ACALL LCD_CMD
MOV A,TEMP+1
CJNE A,#30H,P_DISP1
MOV A,#20H ;乘积高位为0。不显示
P_DISP1:
ACALL LCD_WDATA
MOV A,TEMP+0
ACALL LCD_WDATA
MOV HDATA,TEMP+1
MOV LDATA,TEMP+0
RET
;**********************************************************
;矩阵键盘键值查找程序
;键值存入R3
;**********************************************************
KEY_SCAN:
MOV P1,#0F0H ;置列线为0,行线为1
MOV A,P1
ANL A,#0F0H
MOV B,A
MOV P1,#0FH ;置列线为1,行线为0
MOV A,P1
ANL A,#0FH
ORL A,B ;高四位与低四位重新组合
CJNE A,#0FFH,KEY_IN1 ;0FFH为末按键
CLR KEYDOWN
RET
KEY_IN1:
MOV B,A
MOV DPTR,#KEYTABLE
MOV R3,#0FFH ;
KEY_IN2:
INC R3 ;顺序码加1
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY_IN3
MOV A,R3 ;找到,取顺序码
CALL BEEP_BL
SETB KEYDOWN
RET
KEY_IN3:
CJNE A,#00H,KEY_IN2 ;末完,继续查
RET ;00H为结束码
KEYTABLE:
DB 0eeH ,077H,0B7H,0D7H,07bh,0bbh,0dbh ,07dh,0bdh,0ddh, 0e7h,0ebh,0edh, 07eh,0beh,0deh, 0ffH
;**********************************************************
;蜂鸣器响一声子程序
;**********************************************************
BEEP_BL:
MOV R6,#100
BL1:
CALL DEX1
CPL BEEP
DJNZ R6,BL1
CALL DELAY
CALL DELAY
RET
DEX1:
MOV R7,#180
DEX2:
NOP
DJNZ R7,DEX2
RET
;***************************************************************
; 延时5MS子程序
; LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R6,#10
DEL2:
MOV R7,#249
DEL3:
DJNZ R7,DEL3
DJNZ R6,DEL2
RET
;***************************************************************
; 延时120MS子程序
;***************************************************************
DELAY:
MOV R7,#240
DEL4:
MOV R6,#250
DEL5:
DJNZ R6,DEL5
DJNZ R7,DEL4
RET
;***************************************************************
CHAR1:
DB " WELCOME TO "
CHAR2:
DB " WWW.51C51.COM "
CHAR3:
DB " MULTIPLICATION "
CHAR4:
DB "TABLE: 0*0=00 "
;***************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -