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

📄 splc501sys.asm

📁 这是一个语音电压表
💻 ASM
📖 第 1 页 / 共 5 页
字号:
//////////////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////////////
.include		hardware.inc
.include		splc501c_io.inc
.include		splc501c.inc
.external		F_Set_LCD_Page_No
.external		F_Set_LCD_Column_Addr
.external		F_Read_Lcd_data
.external		_Init_LCD_501
.external		F_Fill_All_LCD_Value
.external		F_Send_data
.external		_Read_Lcd_data
.external		F_Display_point
.external		_Init_IO

.RAM
.CODE
//////////////////////////////////////////////////////////////////////////////
//Filename : _Init_sys
//Function  Description	:	initialize systemClock and Find the "zk_data" position
//Input    : no
//Output   : [bank1]	zk_data at rom bank 
//Destory  : R1,R2,R3,R4
//////////////////////////////////////////////////////////////////////////////
.public		_Init_sys
_Init_sys:
F_Init_sys:		.proc
	r1=0x0000
	[P_SystemClock]=r1
//	call _F_image_bank
	call F_zk_bank
    RETF
	.endp
	
//////////////////////////////////////////////////////////////////////////////
//Filename : F_zk_bank
//Function  Description	:	Find the "zk_data" position
//Input    : none
//Output   : [bank1]	  zk_data at rom bank
//Destory  : R1,R2,R3,R4
//////////////////////////////////////////////////////////////////////////////	
.external bank1
.external	tiny3		//zk_data
.public		F_zk_bank
F_zk_bank:
		r4=0x00
		//////
		r2=sr
		r2&=0x03ff
		r1=tiny3		//zk_data    			//zk_data at zk.asm
F_zk_bank_loop:		
		sr=r2
		r3=D:[r1]
		cmp r3,0x00ff
		je F_zk_bank_0
		r4+=0x0400
		r2+=0x0400
		jmp F_zk_bank_loop
F_zk_bank_0:	
		[bank1]=r4
		retf		
//////////////////////////////////////////////////////////////////////////////  
//Filename : _pixel
//Function : display appoint pixel
//Input    : x,y
//Output   : display a appoint pixel on lcd
//Destroy  : R1,r2,r3
////////////////////////////////////////////////////////////////////////////// 	
.external		pixel_page
.external		pixel_column
.external		pixel_bit
.external		TAB_pixel	
.public	_pixel 
_pixel:  .proc
		PUSH BP,BP TO [SP];
		bp=sp
		bp+=0x04
		r1=[bp]
		bp+=0x01
		r2=[bp]
F_pixel: 		
		[pixel_column]=r1			//work out column
		r1=0x00
		[pixel_page]=r1
F_pixel_2:	
		cmp	r2,0x08
		jb	F_pixel_1
		cmp	r2,0x08
		je	F_pixel_1
		r2-=0x08
		r1=[pixel_page]
		r1+=0x01
		[pixel_page]=r1
		jmp F_pixel_2
F_pixel_1:	
		r1=TAB_pixel
		r1+=r2
		r2=[r1]
		[pixel_bit]=r2				//work out pixel_bit,pixel_page
//		R1 = [pixel_page]               
//        CALL    F_Set_LCD_Page_No
//        R2 = [pixel_column]                
//        CALL    F_Set_LCD_Column_Addr
		r1=[pixel_page]                   
		[_page]=r1
		r1=[pixel_column]
        [_page_place]=r1    
        r3=[pixel_bit]
        [_point_value]=r3
        call	display_a_point
        r3=[sign]
        r3&=0x01
        jnz	F_pixel_end
        POP BP,BP FROM [SP]
F_pixel_end:
		r3=[sign]
        r3&=0xfffe
        [sign]=r3		
		retf
        .endp
//////////////////////////////////////////////////////////////////////////////  
//Filename : F_Get_pixel
//参数: PlotX,PlotY
//Function : appoint pixel state,if r1=0 then point is white else point is black.
//Get the pixel color at (PlotX,PlotY), and store in A.
//Input    : x,y
//Output   : r1      appoint pixel state on lcd
//Destroy  : R1,r2,r3
//用法: 	FG_GetPixel(short PlotX,short PlotY)
//Example:	FG_GetPixel()
//			FG_GetPixel(10,20)
//////////////////////////////////////////////////////////////////////////////         
F_Get_pixel:
		[pixel_column]=r1			//work out column
		r1=0x00
		[pixel_page]=r1
F_Get_pixel_2:	
		cmp	r2,0x08
		jb	F_Get_pixel_1
		cmp	r2,0x08
		je	F_Get_pixel_1
		r2-=0x08
		r1=[pixel_page]
		r1+=0x01
		[pixel_page]=r1
		jmp F_Get_pixel_2
F_Get_pixel_1:	
		r1=TAB_pixel				
		r1+=r2
		r2=[r1]
		[pixel_bit]=r2				//work out pixel_bit,pixel_page
		R1 = [pixel_page]               
        CALL    F_Set_LCD_Page_No
        R2 = [pixel_column]                
        CALL    F_Set_LCD_Column_Addr
        call	F_Read_Lcd_data
        r1=[pixel_bit]
        r3=r3 lsr 0x04
        r3=r3 lsr 0x04
        r1&=r3
F_Get_pixel_end:
		retf
//////////////////////////////////////////////////////////////////////////////  
//Filename : image
//Function : display image
//Input    : x,y,tab
//Output   : display image at appoint place
//Destroy  : R1,r2,r3
////////////////////////////////////////////////////////////////////////////// 
.external		image_width_byte
.external		image_high_bit
.external		image_jumpoff_point_x
.external		image_jumpoff_point_y
.external		image_tab
.external		image_page			
.external		image_bit
.external		image_lcd_data
.external		image_temp_data	
.external		image_temp_data1
.external		image_tab_pointer	
.public		image
image:			.proc
		PUSH BP,BP TO [SP];
		bp=sp
		bp+=0x04
		r1=[bp]
		[image_jumpoff_point_x]=r1
		bp+=0x01
		r1=[bp]
		[image_jumpoff_point_y]=r1
		bp+=0x01
		r1=[bp]
		r1+=0x01
		[image_tab]=r1
		bp+=0x01
		r1=[bp]
		[image_width_byte]=r1
		bp+=0x01
		r1=[bp]
		[image_high_bit]=r1					//get parameter form c
F_image:
		r1=0x00
		[image_page]=r1
		[image_temp_data1]=r1
		r2=[image_jumpoff_point_y]
F_image_page_no_end:		
		cmp	r2,0x08
		jb	F_image_page_end
		cmp	r2,0x08
		je	F_image_page_end
		r2-=0x08
		r1=[image_page]
		r1+=0x01
		[image_page]=r1
		jmp F_image_page_no_end
F_image_page_end:
		[image_bit]=r2						//work out page and bit of jumping off point 		
		r2=0x00
F_image_no_end:		
		r1=[image_tab]	
		[image_tab_pointer]=r1
		r1=[image_jumpoff_point_x]	
		push r1,r2 to [sp]					//save [image_jumpoff_point_x],r2
//		call	F_image_process_1			//display eight row
		call	F_image_display_eightrow 
		pop r1,r2 from [sp]
		r2+=0x01
		[image_jumpoff_point_x]=r1
		r1=[image_tab]
		r1+=0x01
		[image_tab]=r1	
		[image_tab_pointer]=r1				//data pointer of image
		R1 = [image_page]
		r1-=0x01
		[image_page]=r1
		cmp	r2,[image_width_byte]			//if image end
		je	F_image_finish
		jmp	F_image_no_end
F_image_finish:
		r1=[sign]							//if assembler transfer
		r1&=0x01
		jne	F_image_end
		POP BP,BP FROM [SP];
F_image_end:
		r1=[sign]
		r1&=0xfffe
		[sign]=r1		
		retf
        .endp
/////////////////////////////////////////////////////////////////////////        
F_image_display_eightrow:
		r4=0x00								//pointer of tier data
image_display_eightrow_begin:		 
		R1 = [image_page]  
		cmp	r1,0x0009						//area of	page
		jb	  image_eightrow_begin
		retf
image_eightrow_begin:             
        CALL    F_Set_LCD_Page_No
        R2 = [image_jumpoff_point_x]
        CALL    F_Set_LCD_Column_Addr
        call	F_Read_Lcd_data				//read data on lcd
        r3&=0xff00
        [image_lcd_data]=r3
        R2 = [image_jumpoff_point_x]
        CALL    F_Set_LCD_Column_Addr
		r3=[image_tab_pointer]
		push r1 to [sp]
		r1=[sign]
		r1&=sign_zk_bank //0x008
		jz image_process_bank_1
		sr|=[bank]						//
		r3=d:[r3]
		jmp	image_process_bank_2
image_process_bank_1:	
		r3=[r3]
image_process_bank_2:
		pop  r1 from  [sp]	
		r4+=0x01
		r2=[image_bit]						//analyze place of image
		cmp	r2,0x04							//split data of image begin
		ja image_split_1_1
image_split_1_2:
		cmp r2 ,0x00
		je	image_split_1_3
		r3=r3 lsl 0x01		
		r2-=0x01
		jmp	image_split_1_2
image_split_1_1:
		r3=r3 lsl 0x04
		r2-=0x04
image_split_1_4:	
		cmp r2 ,0x00
		je	image_split_1_3
		r3=r3 lsl 0x01
		r2-=0x01
		jmp	image_split_1_4
image_split_1_3:
		[image_temp_data]=r3				//split data of image end
		//r3&=0xff00
	
		r3&=0xff00
		r1=[R_GraphicMode_temp]
		r1&=0x001c0
image_process_cover_frist:	
		jnz	image_process_xor_frist
		r3|=[image_lcd_data]				//or data on lcd
		
		jmp	image_proc_mod_frist_end
image_process_xor_frist:
		cmp	r1,0x0100
		je	image_process_clear_frist
		r3^=[image_lcd_data]				//xor data on lcd
		jmp	image_proc_mod_frist_end
image_process_clear_frist:		
		r3^=0xff00
		r3&=[image_lcd_data]
image_proc_mod_frist_end:
			
		//r3|=[image_lcd_data]		
		r3=r3 lsr 0x04
		r3=r3 lsr 0x04
		call	F_Display_point				//display frist part  data
		
		R1 = [image_page]
		r1-=0x01 
		cmp	r1,0x08							//if overstep area
		jb	  image_second_begin
		goto	image_process_end
image_second_begin:		
        CALL    F_Set_LCD_Page_No
        R2 = [image_jumpoff_point_x]                
        CALL    F_Set_LCD_Column_Addr
        call	F_Read_Lcd_data				//read data on lcd
        r3&=0xff00
        r3=r3 lsr 0x04
        r3=r3 lsr 0x04
        [image_lcd_data]=r3
        R2 = [image_jumpoff_point_x]
        CALL    F_Set_LCD_Column_Addr
		r3=[image_temp_data]
		//r3|=[image_lcd_data]
		r3&=0x00ff	
		
		r1=[R_GraphicMode_temp]
		r1&=bmp_mode_bit
image_process_cover_second:	
		jne	image_process_xor_second
		r3|=[image_lcd_data]				//or data on lcd
//		[image_temp_data1]=r3
		jmp	image_proc_mod_second_end
image_process_xor_second:
		cmp	r1,0x0100
		je	image_process_clear_second
		r3^=[image_lcd_data]				//xor data on lcd
		jmp	image_proc_mod_second_end
image_process_clear_second:		
		r3^=0x00ff
		r3&=[image_lcd_data]
image_proc_mod_second_end:	
		call	F_Display_point				//display remanent part  data
image_process_end:	
		r1=[image_jumpoff_point_x]
		r1-=0x01
		[image_jumpoff_point_x]=r1
		r3=[image_tab_pointer]
		r3+=[image_width_byte]
		[image_tab_pointer]=r3
		cmp	r4,[image_high_bit]
		je	image_process_complete				//if display complete 
		goto	image_display_eightrow_begin
image_process_complete:		
		retf

//////////////////////////////////////////////////////////////////////////////  
//R_GraphicMode:
//		1 byte for graphic mode.
//
//		Bit7,6:	Bitmap/Char/String
//						00:COVER		;Default Mode
//						01:AND
//						10:OR
//						11:XOR
//		Bit5:	(unused)
//		Bit4,3:	Rect/Line/Pixel
//					 	00:SOLID_COVER	;Default (Bar) Mode
//					 	01:DOTTED_COVER
//				     	10:SOLID_XOR
//				     	11:DOTTED_XOR
//
//		Bit2:	Pixel Toggle
//						0:COVER(black)(default)
//						1:ERASE(white)
//
//					(Toggle Bit for Dotted Line Mode)
//					IF bit3=1, that is dotted mode
//					then bit2 will be toggled between pixels
//					IF bit3=0 then no toggle occured

//		Bit1:	(unused)
//		Bit0:	Swapping Flag for LineTo
//		@

//X0: 1 byte x-coordinate of current point (CP).
//Y0: 1 byte y-coordinate of CP.	
.external		R_GraphicMode
.external		_x0
.external		_y0
///////////////////////////////////////////////////////////////////
//Function Name: FG_InitGraphic
//Parameters:
//Description: Initializing LCD graphics parameters
//Destroy:r1,r2,f3
//Memory Modified:
//Usage: FG_InitGraphic()
//Example:
//	FG_InitGraphic()
///////////////////////////////////////////////////////////////////
.public		_FG_InitGraphic
_FG_InitGraphic:		.proc
		call	_Init_IO		//Initial i/o
		call	_Init_LCD_501	//Initial SPLC501
		r1=0x00
		[R_GraphicMode_temp]=r1
		[sign]=r1
		[_x0]=r1
		[_y0]=r1
		retf
		.endp
		
///////////////////////////////////////////////////////////////////
//Function Name: FG_ClearScreen
//Parameters: DG_CLS_ERASE(default), DG_CLS_FILL
//Description: Clear LCD screen with 0 or 1.
//Destroy: r1,r2,r3,r4
//Memory Modified: None
//Usage: 	FG_ClearScreen(short arg)
//Example:
//	FG_ClearScreen()
//	FG_ClearScreen(DG_CLS_FILL)
///////////////////////////////////////////////////////////////////
.public		_FG_ClearScreen
_FG_ClearScreen:		.proc
		PUSH BP,BP TO [SP]
		r1=sp
		r2=bp
		r2-=r1
		cmp	r2,0x04
		je	clearscreen
		bp=sp
		bp+=0x04
		r1=[bp]
		cmp	r1,0x00
		je	clearscreen
		jmp	fillscreen
clearscreen:
		r3=0x0000
		jmp	fillaction
fillscreen:		
		r3=0xff00
fillaction:
		call	F_Fill_All_LCD_Value	
		pop	bp,bp from	[sp]
		retf
		.endp
///////////////////////////////////////////////////////////////////		
//Function Name:	FG_GetBMPMode
//				FG_GetLineStyle
//				FG_GetRectStyle
//				FG_GetCircleStyle
//				FG_GetEllipseStyle
//				FG_GetCharMode
//Description: Get current graphic mode.
//Destroy: r1
//Memory Modified: 
//Usage:
//	FG_GetBMPMode()
//	FG_GetLineStyle()
//	FG_GetRectStyle()
//	FG_GetCircleStyle()
//	FG_GetEllipseStyle()
//	FG_GetCharMode()
///////////////////////////////////////////////////////////////////
.public		_FG_GetBMPMode
_FG_GetBMPMode:		.proc
	PUSH BP,BP TO [SP]
	r1=[R_GraphicMode_temp]
	r1&=bmp_mode_bit_clear
	[R_GraphicMode_temp]=r1
	r1=[R_GraphicMode]
	r1&=bmp_mode_bit
	r1|=[R_GraphicMode_temp]
	[R_GraphicMode_temp]=r1
	pop	bp,bp from	[sp]
	retf
	.endp
//*****************************************************************
.public		_FG_GetLineStyle
_FG_GetLineStyle:		.proc
	PUSH BP,BP TO [SP]
	r1=[R_GraphicMode_temp]
	r1&=dotted_mode_bit_clear
	[R_GraphicMode_temp]=r1
	r1=[R_GraphicMode]
	r1&=dotted_mode_bit
	r1|=[R_GraphicMode_temp]
	[R_GraphicMode_temp]=r1
	pop	bp,bp from	[sp]
	retf
	.endp
//*****************************************************************
.public		_FG_GetRectStyle
_FG_GetRectStyle:		.proc
	call	_FG_GetLineStyle
	retf
	.endp
//*****************************************************************

⌨️ 快捷键说明

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