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

📄 cal_lcd.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:

MACRO PP2One()    
    	lda	#01h
    	sta	PP
        ENDM
        
MACRO PP2Zero()    
    	lda	#00h
    	sta	PP
        ENDM                
        

MACRO PP2store(%1)    
 
    	lda	PP
    	sta0	%1
        ENDM
        
MACRO PP2pop(%1)    
 
    	lda0	%1
    	sta	PP
    	
        ENDM        

MACRO	EI()        
 	lda      OP1
       	ora      #10h              ; D4 INTE
       	sta      OP1        
        ENDM
        
        
MACRO	DI()
	lda      OP1
        anda     #~10h
       	sta      OP1       
        ENDM
              

.include "Cal_MACRO.H" 
                  .area    lcd_data(data,abs)

		
 		 .org	  0x11a	;0x120		;0x113 ;0x170                   
tab_ptr::         .ds      2
com_chk::	  .ds	   1
LCDaddr::         .ds      1
LCDbit::          .ds      1
LCD_tab::         .ds      3
font::            .ds      1
dig_num::         .ds      1
asci_patent:      .ds      1
patent_tab::      .ds      3
row_count:        .ds      1
col_count:        .ds      1

row_num           equ      6	;7
col_num           equ      5
seg_num           equ      8
lcd_start         equ      0x80
lcd_end           equ      COM15+40H
lcd_size          equ      (lcd_end-lcd_start)+1	


                  .area    lcd_code(code)

                  
GetMatrixDotAddrBit::
  
 		  ;lda      LCD_tab+2
                  lda	   #0
                  sta      r_tpp
                  lda      LCD_tab+1
                  sta      r_tph
                  lda      LCD_tab
                  sta      r_tpl
                  ldv
                  sta      LCDaddr
                  ldv
                  sta      LCDbit
                  ret
SetMatrixDot::                 
                PP2One()                                    
                call	GetMatrixDotAddrBit                                    
                lda     LCDaddr
             	sta      DP
          	lda	LCDbit
           	sta0	.Temp                  
               	PP2Zero()
                lda	I
                ora     .Temp
                sta     I
               	PP2One()  
                ret
                  
                  
                  
ClrMatrixDot::
		PP2One()                  
               	call	GetMatrixDotAddrBit                                   
            	lda     LCDbit
               	xora     #0ffh
               	sta     LCDbit
                lda     LCDaddr
                sta      DP                  
             	lda	LCDbit                          
           	sta0	.Temp                  
               	PP2Zero()                 
               	lda      I
                anda     .Temp
                sta      I
              	PP2One()
                ret
;---------------------------------------------------------------------                
Display_5X7_blk1::
		lda	#0
		br	Display_5X7_blk
Display_5X7_blk2::
		lda	#1
		br	Display_5X7_blk		
Display_5X7_blk3::                
		lda	#2
		br	Display_5X7_blk
Display_5X7_blk4::                
		lda	#3
		br	Display_5X7_blk		
Display_5X7_blk5::
		lda	#4
		br	Display_5X7_blk			
Display_5X7_blk6::
		lda	#5
		;br	Display_5X7_blk	
Display_5X7_blk::
		sta0	.Temp
		PP2One()		
		lda0    .Temp        	
            	sta	com_chk            	     	
Blk_Display_5X7:                               
                lda      #@(dig5X7_tab)
                sta      tab_ptr+1
                lda      #<(dig5X7_tab)
                sta      tab_ptr
                lda      dig_num
                adda     #0
                rolc
                adda     tab_ptr
                sta      tab_ptr
                lda      tab_ptr+1
                addc     #0
                sta      tab_ptr+1
                
                lda	 #0
                sta      r_tpp
                lda      tab_ptr+1
                sta      r_tph
                lda      tab_ptr
                sta      r_tpl
                ldv
                sta      LCD_tab+1
                ldv
                sta      LCD_tab
           
                lda      #@(font5X7)
                sta      patent_tab+1
                lda      #<(font5X7)
                sta      patent_tab
                lda      #row_num
                sta      row_count
3$:
                lda      patent_tab
                adda     font
                sta      patent_tab
                lda      patent_tab+1
                addc     #0
                sta      patent_tab+1
                
                lda      row_count
                deca
                sta      row_count
                brnz     3$
                
                lda      com_chk
                sta	 row_count
100$:                
                lda	 row_count
                cmpe	 #0
                brz	 101$
                deca
                sta	 row_count               
                lda      LCD_tab
                adda     #col_num*2
                sta      LCD_tab
                lda      LCD_tab+1
                addc     #0
                sta      LCD_tab+1
        	br	 100$	
101$:                
                lda      patent_tab
                adda     com_chk
                sta      patent_tab
                lda      patent_tab+1
                addc     #0
                sta      patent_tab+1
blk_disp_5X7loop:
                lda	 #0
                sta      r_tpp
                lda      patent_tab+1
                sta      r_tph
                lda      patent_tab
                sta      r_tpl
                ldv
                sta      asci_patent
                
                lda      #col_num
                sta      col_count
blk_disp_5X7_1:
		lda	#0
               	sta     r_tpp
                lda     LCD_tab+1
                sta    	r_tph
                lda     LCD_tab
                sta     r_tpl
		 		  		 
		lda      #>asci_patent	  
		sta	 PP
                lda      asci_patent
                adda     #0
                rolc
                sta      asci_patent
                brnc     blk_disp_5X7_2
                                                         
               
                ldv
                sta      DP
                ldv
                sta0	 .Temp
                                 
                                  
               	PP2Zero()
                lda      I
                ora      .Temp
                sta      I                
                br       blk_disp_5X7_3
blk_disp_5X7_2:
                ldv
               	sta     DP
                ldv
                xora    #0ffh
               	sta0	.Temp
                        	                    
              	PP2Zero()                 
                lda      I
               	anda     .Temp
               	sta      I
blk_disp_5X7_3:                 
                PP2One()
		lda      LCD_tab
                adda     #2
                sta      LCD_tab
                lda      LCD_tab+1
                addc     #0
                sta      LCD_tab+1
                lda      col_count
                deca
                sta      col_count

⌨️ 快捷键说明

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