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

📄 key_12.asm

📁 行列式按键
💻 ASM
字号:
					ORG  0000H
					AJMP Main

					ORG  000BH
					AJMP CountInterruput

		Main:		MOV SP,#60H
		        	MOV R4,#0 	
					MOV R5,#0      ;R5指示按键的值的键码
					MOV 40H,#0FFH    ;传递按键的值
					MOV R0,#30H     ;R0指向显存的首址 30h(30H(个位)、31H(十位)、32H(百位)、33H(千位)显示箱计数器的16进制值)
					CALL T0init  

		LOOP: 	  	CALL Disp
		       		CALL DELAY								
					AJMP  LOOP

	  T0init:                     ;T0的初始化子函数
					SETB ET0          ;为T0中断作准备
			
					MOV A,TMOD        ;T0模式方式二,计数,不需外部控制T1模式不变  
					ANL A,#0F0H
					ORL A,#01H
					MOV TMOD,A

					MOV TL0,#LOW(-50000)
  					MOV TH0,#HIGH(-5000)                              
					SETB TR0           ;计数器启动(即开始工作)
   					SETB EA            ;中断打开
  					RET

CountInterruput: 
					PUSH PSW
	                PUSH ACC 			
                    CLR TF0
                    CLR TR0
					MOV TL0,#LOW(-50000)
  					MOV TH0,#HIGH(-5000)
			        CALL KEY			 	    
                    SETB TR0
					POP ACC	           ;中断返回恢复现场
					POP PSW
					RETI
	
       DispMove:	CJNE R5,#12,Move         
	                AJMP MoverOver
      	  Move:		MOV 37H,36H
					MOV 36H,35H
					MOV 35H,34H
					MOV 34H,33H
					MOV 33H,32H
					MOV 32H,31H
					MOV 31H,30H
					MOV 30H,R5
      MoverOver:	RET

		   
      KeyDriver:
		   	        MOV P3,#0F0H
			        MOV A,P3
			        ANL A,#0F0H
			        MOV R3,A

					MOV P3,#0FH
					MOV A,P3
					ANL A,#0FH
					ORL A,R3          
			        
					RET
		         
			KEY:  	 CALL  KeyDriver			        
			       	CJNE  A,#0FFH,KeyPressY 				
                   	AJMP  KeyOver
      KeyPressY:   	MOV   40H,A           ;战时存A
   WaitKeyOpen:   	CALL  KeyDriver
		          	CJNE  A,#0FFH, WaitKeyOpen			
 		          	MOV   DPTR,#TAB3
					MOV   R5,#0	        		       			
  CountinueFind: 	MOV   A,R5
				    MOVC  A,@A+DPTR					
                    CJNE  A,40H,CountinueSearch
				    CALL DispMove
				    AJMP  KeyOver
  CountinueSearch:	INC R5
 					CJNE R5,#12,CountinueFind
          KeyOver:   RET
           

      		       DELAY:	MOV R7,#0DH
			DE10:	MOV R6,#0FFH
			DE01:	DJNZ R6,DE01
		       		DJNZ R7,DE10
					RET


	       Disp:	MOV DPTR,#TAB1      ;DPTR指向7段数码显示的译码表(亦即段选)
	           		MOV A,@R0           ;R0为显示缓存单元指针,初始值指向个位的30H,个位显示后 加1指向下一位,当R1超过33H后又回到30H
					MOVC A,@A+DPTR
					MOV P0,#0
					MOV P0,A

					MOV DPTR,#TAB2	    ;DPTR指向位选表
					MOV A,R0            ;A中的值为当前要显示的缓存地址,由于缓存地址从30H开始,如果A减去30H,就得到当前正显示的是个、十、百、千中的哪一位
					CLR  CY             ;因为带借位减 CY清0
					SUBB A,#30H
					MOVC A,@A+DPTR		
					MOV P2,A

					INC R0               ;显示下一位
					CJNE R0,#38H,Over
					MOV R0,#30H
		Over:		RET

        TAB1:	DB 3FH,06H,5BH,4FH,66H ,6DH ,7DH ,07H ,7FH ,6FH ,77H,7CH,39H,5EH,79H,71H
	TAB2:	DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
	TAB3:   DB 7DH,0EBH,0EDH,0EEH,0DBH,0DDH,0DEH,0BBH,0BDH,0BEH,7BH,7EH ;0,1,2,3,4,5,6,7,8,9,*,#
				END












⌨️ 快捷键说明

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