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

📄 lcd106x56.src

📁 PICC code in HT-PICC for GLCD
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	CLR  	A
	RLC  	A
	MOV  	R6,A
	CLR  	C
	MOV  	A,x?13120
	SUBB 	A,R7
	MOV  	A,R6
	XRL  	A,#080H
	MOV  	R0,A
	MOV  	A,#080H
	SUBB 	A,R0
	JC   	$ + 4H
	AJMP 	?C0105
;   	{
			; SOURCE LINE # 647
;     	byte_offset = top >> 3;        	/* get the byte offset into y direction */
			; SOURCE LINE # 648
	MOV  	A,top?13109
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	MOV  	R7,A
;---- Variable 'byte_offset?13115' assigned to Register 'R7' ----
; 		y_bits = height;				/* get length in y direction to write */
			; SOURCE LINE # 649
	MOV  	y_bits?13116,height?13111
; 		remaining_bits = 8 - bit_pos;	/* number of bits left in byte */
			; SOURCE LINE # 650
	CLR  	C
	MOV  	A,#08H
	SUBB 	A,bit_pos?13114
	MOV  	remaining_bits?13117,A
; 		mask = l_mask_array[bit_pos];	/* get mask for this bit */
			; SOURCE LINE # 651
	MOV  	A,bit_pos?13114
	MOV  	DPTR,#l_mask_array
	MOVC 	A,@A+DPTR
	MOV  	R6,A
;---- Variable 'mask?13118' assigned to Register 'R6' ----
; 		glyph_scan = glyph + glyph_offset;	 /* point to base of the glyph */
			; SOURCE LINE # 652
	MOV  	R3,glyph?13112
	MOV  	R4,#00H
	MOV  	A,glyph?13112+02H
	ADD  	A,glyph_offset?13122
	MOV  	R1,A
	MOV  	A,R4
	ADDC 	A,glyph?13112+01H
	MOV  	R2,A
;---- Variable 'glyph_scan?13121' assigned to Register 'R1/R2/R3' ----
?C0097:
; 
;     	/* boundary checking here to account for the possibility of  */
;     	/* write past the bottom of the screen.                        */
;     	while((y_bits) && (byte_offset < Y_BYTES)) /* while there are bits still to write */
			; SOURCE LINE # 656
	MOV  	A,y_bits?13116
	JZ   	?C0098
	MOV  	A,R7
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0098
;     	{
			; SOURCE LINE # 657
; 			/* check if the character pixel is set or not */
; 			if(*glyph_scan & char_mask)
			; SOURCE LINE # 659
	LCALL	?C?CLDPTR
	ANL  	A,char_mask?13119
	MOV  	B,#06AH
	JZ   	?C0099
; 			{
			; SOURCE LINE # 660
; 				l_display_array[byte_offset][x] |= mask;	/* set image pixel */
			; SOURCE LINE # 661
	MOV  	A,R7
	MUL  	AB
	ADD  	A,#LOW (l_display_array)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (l_display_array)
	MOV  	DPH,A
	MOV  	A,DPL
	ADD  	A,x?13120
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,DPH
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ORL  	A,R6
	MOVX 	@DPTR,A
; 			}
			; SOURCE LINE # 662
	SJMP 	?C0100
?C0099:
; 			else
; 			{
			; SOURCE LINE # 664
;       			l_display_array[byte_offset][x] &= ~mask;	/* clear the image pixel */
			; SOURCE LINE # 665
	MOV  	A,R7
	MUL  	AB
	ADD  	A,#LOW (l_display_array)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (l_display_array)
	MOV  	DPH,A
	MOV  	A,DPL
	ADD  	A,x?13120
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,DPH
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	A,R6
	CPL  	A
	MOV  	R4,A
	MOV  	A,R5
	ANL  	A,R4
	MOVX 	@DPTR,A
; 			}
			; SOURCE LINE # 666
?C0100:
; 
; 			if(l_mask_array[0] & 0x80)
			; SOURCE LINE # 668
	MOV  	DPTR,#l_mask_array
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R5,A
	JNB  	ACC.7,?C0101
; 			{
			; SOURCE LINE # 669
; 				mask >>= 1;
			; SOURCE LINE # 670
	MOV  	A,R6
	CLR  	C
	RRC  	A
	MOV  	R6,A
; 			}
			; SOURCE LINE # 671
	SJMP 	?C0102
?C0101:
; 			else
; 			{
			; SOURCE LINE # 673
; 				mask <<= 1;
			; SOURCE LINE # 674
	MOV  	A,R6
	ADD  	A,ACC
	MOV  	R6,A
; 			}
			; SOURCE LINE # 675
?C0102:
; 			
; 			y_bits--;
			; SOURCE LINE # 677
	DEC  	y_bits?13116
; 			remaining_bits--;
			; SOURCE LINE # 678
	DJNZ 	remaining_bits?13117,?C0103
;       		if(remaining_bits == 0)
			; SOURCE LINE # 679
;       		{
			; SOURCE LINE # 680
; 				/* just crossed over a byte boundry, reset byte counts */
; 				remaining_bits = 8;
			; SOURCE LINE # 682
	MOV  	remaining_bits?13117,#08H
; 				byte_offset++;
			; SOURCE LINE # 683
	INC  	R7
; 				mask = l_mask_array[0];
			; SOURCE LINE # 684
	MOV  	R6,AR5
;       		}
			; SOURCE LINE # 685
?C0103:
; 
; 			/* bump the glyph scan to next raster */
; 			glyph_scan += store_width;
			; SOURCE LINE # 688
	MOV  	A,store_width?13113
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
; 		}
			; SOURCE LINE # 689
	SJMP 	?C0097
?C0098:
; 
; 		/* shift over to next glyph bit */
; 		char_mask >>= 1;
			; SOURCE LINE # 692
	MOV  	A,char_mask?13119
	CLR  	C
	RRC  	A
	MOV  	char_mask?13119,A
; 		if(char_mask == 0)				/* reset for next byte in raster */
			; SOURCE LINE # 693
	JNZ  	?C0096
; 		{
			; SOURCE LINE # 694
; 			char_mask = 0x80;
			; SOURCE LINE # 695
	MOV  	char_mask?13119,#080H
; 			glyph_offset++;
			; SOURCE LINE # 696
	INC  	glyph_offset?13122
; 	    }
			; SOURCE LINE # 697
; 	}
			; SOURCE LINE # 698
?C0096:
	INC  	x?13120
	AJMP 	?C0094
; }
			; SOURCE LINE # 699
?C0105:
	RET  	
; END OF _lcd_glyph

; 
; /*
; **
; **	Prints the given string at location x,y in the specified font.
; **  Prints each character given via calls to lcd_glyph. The entry string
; **  is null terminated and non 0x20->0x7e characters are ignored.
; **
; **  Arguments are:                                                   
; **      left       coordinate of left start of string.                
; **      top        coordinate of top of string.
; **      font       font number to use for display                
; **      str   	   text string to display
; **
; */
; 
; void lcd_text(unsigned char left, unsigned char top, unsigned char font, char *str)

	RSEG  ?PR?_lcd_text?LCD106X56
_lcd_text:
	USING	0
			; SOURCE LINE # 715
	MOV  	top?14124,R5
	MOV  	font?14125,R3
;---- Variable 'left?14123' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 716
;   	unsigned char x = left;
			; SOURCE LINE # 717
	MOV  	x?14127,R7
?C0106:
;   	unsigned char glyph;
;   	unsigned char width;
; 	unsigned char height;
; 	unsigned char store_width;
; 	unsigned char code *glyph_ptr;
; 
;   	while(*str != 0x00)
			; SOURCE LINE # 724
	MOV  	R3,str?14126
	MOV  	R2,str?14126+01H
	MOV  	R1,str?14126+02H
	LCALL	?C?CLDPTR
	JNZ  	$ + 4H
	AJMP 	?C0111
;   	{
			; SOURCE LINE # 725
;     	glyph = (unsigned char)*str;
			; SOURCE LINE # 726
	MOV  	glyph?14128,A
; 
; 		/* check to make sure the symbol is a legal one */
; 		/* if not then just replace it with a "." character */
; 		if((glyph < ASCII_BOT) || (glyph > ASCII_TOP))
			; SOURCE LINE # 730
	CLR  	C
	SUBB 	A,#020H
	JC   	?C0109
	MOV  	A,glyph?14128
	SETB 	C
	SUBB 	A,#07EH
	JC   	?C0108
?C0109:
; 		{
			; SOURCE LINE # 731
; 			glyph = '.';
			; SOURCE LINE # 732
	MOV  	glyph?14128,#02EH
; 		}
			; SOURCE LINE # 733
?C0108:
; 
;     	/* the fonts start at ASCII_BOT, so to get the index into the font array */
;     	/* subtract ASCII_BOT from the glyph                  */
;     	glyph -= ASCII_BOT;
			; SOURCE LINE # 737
	MOV  	A,#0E0H
	ADD  	A,glyph?14128
	MOV  	glyph?14128,A
;     	width = fonts[font].fixed_width;	/* check if it is a fixed width */
			; SOURCE LINE # 738
	MOV  	B,#07H
	MOV  	A,font?14125
	MUL  	AB
	ADD  	A,#LOW (fonts+04H)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (fonts+04H)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	width?14129,A
; 		if(width == 0)
			; SOURCE LINE # 739
	JNZ  	?C0110
; 		{
			; SOURCE LINE # 740
; 			width=fonts[font].width_table[glyph];	/* get the variable width instead */
			; SOURCE LINE # 741
	MOV  	B,#07H
	MOV  	A,font?14125
	MUL  	AB
	ADD  	A,#LOW (fonts+05H)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (fonts+05H)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R6,A
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	ADD  	A,glyph?14128
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	width?14129,A
; 		}
			; SOURCE LINE # 742
?C0110:
; 
; 		height = fonts[font].glyph_height;
			; SOURCE LINE # 744
	MOV  	B,#07H
	MOV  	A,font?14125
	MUL  	AB
	ADD  	A,#LOW (fonts+01H)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (fonts+01H)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	height?14130,A
; 		store_width = fonts[font].store_width;
			; SOURCE LINE # 745
	MOV  	B,#07H
	MOV  	A,font?14125
	MUL  	AB
	ADD  	A,#LOW (fonts)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (fonts)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	store_width?14131,A
; 
; 		glyph_ptr = fonts[font].glyph_table + (glyph * store_width * height);
			; SOURCE LINE # 747
	MOV  	B,#07H
	MOV  	A,font?14125
	MUL  	AB
	ADD  	A,#LOW (fonts+02H)
	MOV  	DPL,A
	MOV  	A,B
	ADDC 	A,#HIGH (fonts+02H)
	MOV  	DPH,A
	MOV  	A,glyph?14128
	MOV  	B,store_width?14131
	MUL  	AB
	MOV  	B,height?14130
	MUL  	AB
	MOV  	R7,A
	MOV  	R6,B
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	ADD  	A,R7
	MOV  	glyph_ptr?14132+01H,A
	CLR  	A
	MOVC 	A,@A+DPTR
	ADDC 	A,R6
	MOV  	glyph_ptr?14132,A
; 
; 		lcd_glyph(x,top,width,height,glyph_ptr,store_width);  /* plug symbol into buffer */
			; SOURCE LINE # 749
	MOV  	?_lcd_glyph?BYTE+03H,height?14130
	MOV  	?_lcd_glyph?BYTE+04H,#0FFH
	MOV  	?_lcd_glyph?BYTE+05H,A
	MOV  	?_lcd_glyph?BYTE+06H,glyph_ptr?14132+01H
	MOV  	?_lcd_glyph?BYTE+07H,store_width?14131
	MOV  	R3,width?14129
	MOV  	R5,top?14124
	MOV  	R7,x?14127
	LCALL	_lcd_glyph
; 
; 		x += width;							/* move right for next character */
			; SOURCE LINE # 751
	MOV  	A,width?14129
	ADD  	A,x?14127
	MOV  	x?14127,A
; 		str++;								/* point to next character in string */
			; SOURCE LINE # 752
	MOV  	A,#01H
	ADD  	A,str?14126+02H
	MOV  	str?14126+02H,A
	CLR  	A
	ADDC 	A,str?14126+01H
	MOV  	str?14126+01H,A
; 	}
			; SOURCE LINE # 753
	AJMP 	?C0106
; }
			; SOURCE LINE # 754
?C0111:
	RET  	
; END OF _lcd_text

; 
; /*
; **
; ** Updates area of the display. Writes data from display 
; ** RAM to the lcd display controller.
; ** 
; ** Arguments Used:                                      
; **    top     top line of area to update.         
; **    bottom  bottom line of area to update.
; **
; */
; 
; void lcd_update(unsigned char top, unsigned char bottom)

	RSEG  ?PR?_lcd_update?LCD106X56
_lcd_update:
	USING	0
			; SOURCE LINE # 767
;---- Variable 'bottom?15134' assigned to Register 'R5' ----
;---- Variable 'top?15133' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 768
; 	unsigned char x;
; 	unsigned char y;
; 	unsigned char yt;
; 	unsigned char yb;
; 	unsigned char *colptr;
; 
; 	yt = top >> 3;				/* setup bytes of range */
			; SOURCE LINE # 775
	MOV  	A,R7
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	MOV  	R7,A
;---- Variable 'yt?15137' assigned to Register 'R7' ----
; 	yb = bottom >> 3;
			; SOURCE LINE # 776
	MOV  	A,R5
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	MOV  	yb?15138,A
; 
; 	for(y = yt; y <= yb; y++)
			; SOURCE LINE # 778
	MOV  	y?15136,R7
?C0112:
	MOV  	A,y?15136
	SETB 	C
	SUBB 	A,yb?15138
	JNC  	?C0118
; 	{
			; SOURCE LINE # 779
; 		/* setup the page number for the y direction */
; 		lcd_out_ctl(LCD_SET_PAGE+y);	/* set page */
			; SOURCE LINE # 781
	MOV  	A,y?15136
; 	
; 		/* setup column of update to left side */
; 		lcd_out_ctl(LCD_SET_COL_HI+(26/16));	/* set column 26 */
			; SOURCE LINE # 784
; 		lcd_out_ctl(LCD_SET_COL_LO+(26%16));
			; SOURCE LINE # 785
	LCALL	L?0124
; 
; 		colptr = &l_display_array[y][0];
			; SOURCE LINE # 787
	MOV  	A,y?15136
	MOV  	B,#06AH
	MUL  	AB
	ADD  	A,#LOW (l_display_array)
	MOV  	R1,A
	MOV  	A,#HIGH (l_display_array)
	ADDC 	A,B
	MOV  	colptr?15139,#01H
	MOV  	colptr?15139+01H,A
	MOV  	colptr?15139+02H,R1
; 		for (x=0; x < X_BYTES; x++)
			; SOURCE LINE # 788
;---- Variable 'x?15135' assigned to Register 'R4' ----
	CLR  	A
	MOV  	R4,A
?C0115:
; 		{
			; SOURCE LINE # 789
; 			lcd_out_dat(*colptr++);
			; SOURCE LINE # 790
	MOV  	R3,colptr?15139
	INC  	colptr?15139+02H
	MOV  	A,colptr?15139+02H
	MOV  	R2,colptr?15139+01H
	JNZ  	?C0123
	INC  	colptr?15139+01H
?C0123:
	DEC  	A
	MOV  	R1,A
	LCALL	?C?CLDPTR
	MOV  	R7,A
	LCALL	_lcd_out_dat
; 		}
			; SOURCE LINE # 791
	INC  	R4
	CJNE 	R4,#06AH,?C0115
; 	}
			; SOURCE LINE # 792
?C0114:
	INC  	y?15136
	SJMP 	?C0112
; }
			; SOURCE LINE # 793
?C0118:
	RET  	
; END OF _lcd_update

	END

⌨️ 快捷键说明

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