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

📄 99qda.asm

📁 计算器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***************************************************************         
; 发送字符串子程序                                                       
;***************************************************************         
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 + -