?? 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 + -