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

📄 time-name.asm

📁 用汇编语言实现时间和姓名在LCD上实现的程式
💻 ASM
📖 第 1 页 / 共 4 页
字号:
F_ShowDigital:
		stx	rHexCodeTmp
		clc
		rol	a                       ;;a*2
		tax
		lda	tbLcdDigitNumber,x
		sta	rLocTmp
		lda	tbLcdDigitNumber+1,x
		sta	rLocTmp+1

		ldx	rHexCodeTmp
		lda	tbHexCode,x
		sta	rHexCodeTmp

		lda	#7
		sta	rCountTmp

lLoop1:		
		ldx	#0
		lda	(rLocTmp,x)     ;;get bit location
		tax
		lda	tbBitMask,x
		sta	rMaskTmp        ;;get mask bit

		lda	rLocTmp         ;;rLocTmp=rLocTmp+1
		clc
		adc	#1
		sta	rLocTmp
		lda	rLocTmp+1
		adc	#0
		sta	rLocTmp+1

		ldx	#0
		lda	(rLocTmp,x)    		 	;;get bit location
		tax                     ;;x = LCD byte offset

		ror	rHexCodeTmp
		bcc	lClearDot

		lda	P_LCDPortStarAddr,x
		ora	rMaskTmp
		jmp	lNext
lClearDot:
		lda	rMaskTmp        ;;A = mask bit
		eor	#0ffh
		sta	rMaskTmp
		lda	P_LCDPortStarAddr,x
		and	rMaskTmp
lNext:
		sta	P_LCDPortStarAddr,x

		lda	rLocTmp
		clc
		adc	#1
		sta	rLocTmp
		lda	rLocTmp+1
		adc	#0
		sta	rLocTmp+1

		dec	rCountTmp
		bne	lLoop1

		rts
;;*************************************************************
;;Function: Display a ICON on LCD
;;  Input : A -> number ( 0 ~ 8) , X = 0/1  off/on
;;  Output: None
;;*************************************************************
F_ShowChar:
		stx	rHexCodeTmp
		clc
		rol	a               		;;A=A*2
		sta	rLocTmp

		tax
		lda	tbIcon,x
		tax                     ;;get bit location
		lda	tbBitMask,x
		sta	rMaskTmp        		;;get mask bit
		ldx	rLocTmp
		inx
		lda	tbIcon,x
		tax                     ;;x = LCD byte offset
		lda	rHexCodeTmp
		beq	lClearDot1

		lda	P_LCDPortStarAddr,x
		ora	rMaskTmp
		jmp	lNext1
lClearDot1:
		lda	rMaskTmp        ;;A = mask bit
		eor	#0ffh
		sta	rMaskTmp
		lda	P_LCDPortStarAddr,x
		and	rMaskTmp
lNext1:
		sta	P_LCDPortStarAddr,x
		rts
;;*************************************************************
;; Function  : clear LCD screen
;; input     : none
;; return    : none
;;*************************************************************
F_ClearScreen:
		lda	#0
		ldx	#0
lClearScreenLoop:
		sta	P_LCDPortStarAddr,x	;Clear 50(C0,S0-S7),54(C1,S0-S7),58(C2,S0-S7),5C(C3,S0-S7)
		inx
		sta	P_LCDPortStarAddr,x	;Clear 51(C0,S8-S15),55(C1,S8-S15),59(C2,S8-S15),5d(C3,S8-S15)
		inx						   				;Unuse: 52(C0,S16-S23),56(C1,S16-S23),5a(C2,S16-S23),5e(C3,S16-S23)	
		inx				           		;Unuse: 53(C0,S24-S31),57(C1,S24-S31),5b(C2,S24-S31),5f(C3,S24-S31)
		inx						   				;... ...
		cpx	#60h
		bne	lClearScreenLoop
		rts 
;---------------------------------------------------------------------------
; subroutine: S_Delay (TdsSub.asm) 
; function  : 1 stand for 700us@CUP CLK/2 Rosc=100K ,so delay time=a*700us
; input     : a
; output    : none
; used register and RAM: R_Delay_High,R_Delay_Low
; called subroutine: S_Delay10ms
; modify by xijiyong 2002-6-3
;-------------------------------------------------------------------------
S_Delay:
		sta	R_Delay_High		;3个指令周期	
L_Delay_DecLowByte:
		jsr	S_WatchDogClear
		lda	#$8E
		sta	R_Delay_Low
L_Delay_DecHiByte:
		jsr	S_WatchDogClear
		dec	R_Delay_Low	      	;放在零页为5个指令周期
		bne L_Delay_DecHiByte    	;2个指令周期
		dec	R_Delay_High
		bne	L_Delay_DecLowByte	
		rts	

;---------------------------------------------------------------------------
; subroutine: S_Delay (TdsSub.asm) 
; input     : a
; output    : none
; used register and RAM: R_Delay_High,R_Delay_Low
; modify by RickDing 2007-11-21
;-------------------------------------------------------------------------	
S_250ms_Delay:	
		lda	#T_150ms				;delay 150ms
		jsr	S_Delay
		lda	#T_100ms				;delay 150ms
		jsr	S_Delay
		jsr	S_WatchDogClear
		rts	
;---------------------------------------------------------------------------
; subroutine: S_Delay (TdsSub.asm) 
; input     : a
; output    : none
; used register and RAM: R_Delay_High,R_Delay_Low
; modify by RickDing 2007-11-21
;-------------------------------------------------------------------------	
S_500ms_Delay:	
		jsr	S_WatchDogClear
		jsr	S_250ms_Delay
		jsr	S_250ms_Delay	
		rts
;-----------------------------------------------
;MACRO to sub
;-----------------------------------------------
S_WatchDogClear:
   	LDA	#D_WatchDog_Clr_1st_Byte
   	STA	P_0FH_System_CTL
   	LDA	#D_WatchDog_Clr
   	STA	P_0FH_System_CTL	  
   
   	rts
;----------------------------------------------------------------------------
; subroutine: S_LCDFlashOneDigital
; function  : LCD flash one digital
; input     : R_LCDFlash
;             Low 4 bit is number(0~9).High 4 bit is which location(0~9)
; output    : none
; used register and RAM: 
; called subroutine: 
; Import Note: In this subroutine,all account use decimal
;----------------------------------------------------------------------------	
S_LCDFlashOneDigital:
 		lda	R_KeyMenuLevel
 		and	#FlagLCDFlashIsOn
 		bne	L_DigitalShowOff
 		ldx	R_KeyInputNumber
 		lda	R_KeyMenuLevel
 		ora	#FlagLCDFlashIsOn
 		sta	R_KeyMenuLevel	
		jmp	L_LCDFlashOneDigital
L_DigitalShowOff:	
		ldx	#1ah
 		lda	R_KeyMenuLevel
 		and	#.NOT.FlagLCDFlashIsOn
 		sta	R_KeyMenuLevel		
L_LCDFlashOneDigital:
 		lda	R_KeyInputLocation
		jsr	F_ShowDigital	
		rts		
;;============================================
;; LCD Display calculate table
;;============================================
tbBitMask:
        db      %00000001
        db      %00000010
        db      %00000100
        db      %00001000
        db      %00010000
        db      %00100000
        db      %01000000
        db      %10000000
        db      %00000001
        db      %00000010         
tbLcdDigitNumber:							;   _1__    _2__    _3__    _4__    _5__    _6__                                           
        dw      tbLcdDigit1		;  |    |  |    |  |    |  |    |  |    |  |    |   
        dw      tbLcdDigit2		;  |____|  |____|  |____|  |____|  |____|  |____|  
        dw			tbLcdDigit3		;  |    |  |    |  |    |  |    |  |    |  |    |  
        dw			tbLcdDigit4		;  |____|  |____|  |____|  |____|  |____|  |____|   
        dw      tbLcdDigit5		;                           
        dw      tbLcdDigit6		;   _7__    _8__    _9__    _10_   
        dw			tbLcdDigit7		;  |    |  |    |  |    |  |    |
        dw			tbLcdDigit8		;  |____|  |____|  |____|  |____| 
        dw      tbLcdDigit9		;  |    |  |    |  |    |  |    |     
        dw      tbLcdDigit10	;  |____|  |____|  |____|  |____|                
tbHexCode: 
        ;;       gfedcba                                                          
        db      %0111111     ;;0         
        db      %0000110     ;;1
        db      %1011011     ;;2
        db      %1001111     ;;3
        db      %1100110     ;;4
        db      %1101101     ;;5
        db      %1111101     ;;6
        db      %0100111     ;;7
        db      %1111111     ;;8
        db      %1101111     ;;9
        db      %1110111     ;;a ---------------------"A"  10
        db      %1111100     ;;b ---------------------"b"  11
        db      %0111001     ;;c ---------------------"C"  12
        db      %1011110     ;;d ---------------------"d"  13
        db      %1111001     ;;e ---------------------"E"  14
        db      %1110001     ;;f ---------------------"F"  15
        db      %1000000     ;;10h---------------------"-" 16
        db      %1010100     ;;11h---------------------"n" 17
        db      %0000110     ;;12h---------------------"i" 18
        db      %1111000     ;;13h---------------------"t" 19
        db      %0111000     ;;14h---------------------"L" 20
        db      %1110110     ;;15h---------------------"H" 21
        db      %0110001     ;;16h---------------------"r" 22
        db      %1011100     ;;17h---------------------"o" 23
        db      %0110000     ;;18h---------------------"l" 24
        db			%0000001     ;;19h---------------------"1" 25
        db      %0000000     ;;1ah---------------------" " 26
        db      %0011100     ;;1bh---------------------"u" 27
        db      %0010000     ;;1ch---------------------"|" 28
        db			%1110011     ;;1dh---------------------"P" 29
        db			%0110111     ;;1eh---------------------"N" 30
        db			%0111110     ;;1fh---------------------"U" 31
        db			%1111010     ;;20h---------------------"K" 32
;;============================================
;;============================================
;; LCD Display COM & SEG mapping table
;;============================================
tbLcdDigit1:		  ;;1
        mCom_Seg  c3,s3   ;;seg a               
        mCom_Seg  c1,s3   ;;seg b              _a__
        mCom_Seg  c5,s3   ;;seg c           f |    | b
        mCom_Seg  c6,s3   ;;seg d             |_g__|
        mCom_Seg  c4,s3   ;;seg e             |    |
        mCom_Seg  c2,s3   ;;seg f           e |____| c
        mCom_Seg  c0,s3   ;;seg g               d

tbLcdDigit2:		  ;;2
        mCom_Seg  c3,s2   ;;seg a              _a__   
        mCom_Seg  c1,s2   ;;seg b           f |    | b
        mCom_Seg  c5,s2   ;;seg c             |_g__|  
        mCom_Seg  c6,s2   ;;seg d             |    |  
        mCom_Seg  c4,s2   ;;seg e           e |____| c
        mCom_Seg  c2,s2   ;;seg f               d     
        mCom_Seg  c0,s2   ;;seg g
        
tbLcdDigit3:		  ;;3
        mCom_Seg  c3,s8   ;;seg a               _a__   
        mCom_Seg  c1,s8   ;;seg b            f |    | b
        mCom_Seg  c5,s8   ;;seg c              |_g__|  
        mCom_Seg  c6,s8   ;;seg d              |    |  
        mCom_Seg  c4,s8   ;;seg e            e |____| c
        mCom_Seg  c2,s8   ;;seg f                d     
        mCom_Seg  c0,s8   ;;seg g
        
tbLcdDigit4:		  ;;4
        mCom_Seg  c3,s9   ;;seg a                _a__   
        mCom_Seg  c1,s9   ;;seg b             f |    | b
        mCom_Seg  c5,s9   ;;seg c               |_g__|  
        mCom_Seg  c6,s9   ;;seg d               |    |  
        mCom_Seg  c4,s9   ;;seg e             e |____| c
        mCom_Seg  c2,s9   ;;seg f                 d     
        mCom_Seg  c0,s9   ;;seg g      

tbLcdDigit5:		  ;;5
        mCom_Seg  c3,s10   ;;seg a               
        mCom_Seg  c1,s10   ;;seg b              _a__
        mCom_Seg  c5,s10   ;;seg c           f |    | b
        mCom_Seg  c6,s10   ;;seg d             |_g__|
        mCom_Seg  c4,s10   ;;seg e             |    |
        mCom_Seg  c2,s10   ;;seg f           e |____| c
        mCom_Seg  c0,s10   ;;seg g               d

tbLcdDigit6:		  ;;6
        mCom_Seg  c3,s11   ;;seg a               _a__   
        mCom_Seg  c1,s11   ;;seg b            f |    | b
        mCom_Seg  c5,s11   ;;seg c              |_g__|  
        mCom_Seg  c6,s11   ;;seg d              |    |  
        mCom_Seg  c4,s11   ;;seg e            e |____| c
        mCom_Seg  c2,s11   ;;seg f                d     
        mCom_Seg  c0,s11   ;;seg g
        
tbLcdDigit7:		  ;;8
        mCom_Seg  c6,s4   ;;seg a               _a__   
        mCom_Seg  c4,s4   ;;seg b            f |    | b
        mCom_Seg  c2,s4   ;;seg c              |_g__|  
        mCom_Seg  c3,s4   ;;seg d              |    |  
        mCom_Seg  c1,s4   ;;seg e            e |____| c
        mCom_Seg  c5,s4   ;;seg f                d     
        mCom_Seg  c0,s4   ;;seg g
        
tbLcdDigit8:		  ;;9
        mCom_Seg  c6,s5   ;;seg a               _a__   
        mCom_Seg  c4,s5   ;;seg b            f |    | b
        mCom_Seg  c2,s5   ;;seg c              |_g__|  
        mCom_Seg  c3,s5   ;;seg d              |    |  
        mCom_Seg  c1,s5   ;;seg e            e |____| c
        mCom_Seg  c5,s5   ;;seg f                d     
        mCom_Seg  c0,s5   ;;seg g      
 
tbLcdDigit9:		  ;;10
        mCom_Seg  c6,s6   ;;seg a               
        mCom_Seg  c4,s6   ;;seg b              _a__
        mCom_Seg  c2,s6   ;;seg c           f |    | b
        mCom_Seg  c3,s6   ;;seg d             |_g__|
        mCom_Seg  c1,s6   ;;seg e             |    |
        mCom_Seg  c5,s6   ;;seg f           e |____| c
        mCom_Seg  c0,s6   ;;seg g               d

tbLcdDigit10:		  ;;11
        mCom_Seg  c6,s7   ;;seg a              _a__   
        mCom_Seg  c4,s7   ;;seg b           f |    | b
        mCom_Seg  c2,s7   ;;seg c             |_g__|  
        mCom_Seg  c3,s7   ;;seg d             |    |  
        mCom_Seg  c1,s7   ;;seg e           e |____| c
        mCom_Seg  c5,s7   ;;seg f               d     
        mCom_Seg  c0,s7   ;;seg g

tbIcon:				;;total 25
        mCom_Seg  c2,s0    ;;icon "SET"            ;0 
        mCom_Seg  c1,s0    ;;icon "REC"            ;1 
        mCom_Seg  c0,s0    ;;icon "PW"             ;2
        mCom_Seg  c4,s0    ;;icon "START"          ;3       
        mCom_Seg  c7,s0    ;;power outline         ;4
        mCom_Seg  c5,s0    ;;power left half       ;5
        mCom_Seg  c6,s0    ;;power right half      ;6
        
        mCom_Seg  c3,s0    ;;icon "HIGH"      	 		;7
        mCom_Seg  c1,s1    ;;icon "LOW"        			;8
        mCom_Seg  c0,s1    ;;"TEMP"									;9
        mCom_Seg  c4,s1    ;;icon "(TEPM)1"   			;10
        mCom_Seg  c5,s1    ;;icon "(TEMP)2"   			;11
        mCom_Seg  c6,s1    ;;icon "EXCUR"           ;12       
        
        mCom_Seg  c2,s1    ;;icon "OK"              ;13
        mCom_Seg  c3,s1    ;;icon "NOT_OK"          ;14
        mCom_Seg  c0,s3    ;;icon minus "-"         ;15
   			mCom_Seg  c7,s8    ;;icon "Year Dot"   			;16
        mCom_Seg  c7,s9    ;;icon "Month Dot"       ;17        
        mCom_Seg  c7,s11    ;;icon "DegC"           ;18
        mCom_Seg  c7,s10    ;;icon "DegF"           ;19    
        
        mCom_Seg  c7,s2    ;;icon "INT"             ;20
        mCom_Seg  c7,s3   ;;icon "CLOCK"            ;21
        mCom_Seg  c7,s4   ;;icon "CLOCK 1"          ;22
        mCom_Seg  c7,s6    ;;Icon "CLOCK DOT"       ;23         
        mCom_Seg  c7,s5    ;;Icon "HM" hour and min ;24
;;============================================
;; End of LCD Display COM & SEG mapping table
;;============================================ 
;====================================================================
VECTOR	.section
    	DW      NMI      ;Nmi
      DW      RESET
      DW      IRQ

⌨️ 快捷键说明

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