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

📄 gui.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 5 页
字号:
;         for(i = 0; i < En_5x8_XSIZE; i++)
	clr R12
	xjmp L51
L48:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_5x8
	ldi R25,>_chardot_5x8
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	clr R23
	ldi R24,255
	ldi R25,0
	eor R22,R24
	eor R23,R25
	std y+0,R14
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L49:
	inc R12
L51:
	mov R24,R12
	cpi R24,5
	brlo L48
;         {      
;             temp=i+(INT16U)(Char-0x20)*5; //要注意数据范围
;             ImgData = chardot_5x8[temp]^0xFF;
;             LCD_Display_Locate(ImgData, HZ_X, Y);
;             HZ_X++;
;         }
;     } 
	xjmp L47
L46:
;     else 
;     {
;         for(i=0;i<En_6x12_XSIZE;i++)
	clr R12
	xjmp L55
L52:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,12
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_6x12
	ldi R25,>_chardot_6x12
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	clr R23
	ldi R24,255
	ldi R25,0
	eor R22,R24
	eor R23,R25
	std y+0,R14
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L53:
	inc R12
L55:
	mov R24,R12
	cpi R24,6
	brlo L52
;         {     
;             temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
;             ImgData = chardot_6x12[temp]^0xFF;
;             LCD_Display_Locate(ImgData, HZ_X, Y);
;             HZ_X++;
;         }
;         HZ_X=X;
	ldd R10,y+13
;         for(i=En_6x12_XSIZE;i<2*En_6x12_XSIZE;i++)
	ldi R24,6
	mov R12,R24
	xjmp L59
L56:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,12
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_6x12
	ldi R25,>_chardot_6x12
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	ldi R24,63
	eor R22,R24
	mov R24,R14
	subi R24,248    ; addi 8
	std y+0,R24
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L57:
	inc R12
L59:
	mov R24,R12
	cpi R24,12
	brlo L56
;         {
;             temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
;             ImgData = chardot_6x12[temp]^0x3F;//总共12行
;             LCD_Display_Locate(ImgData, HZ_X, Y + 8);
;             HZ_X++;
;         }
;     }
L47:
L41:
	adiw R28,1
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
;           temp -> R20,R21
;        ImgData -> R22
;           HZ_X -> R10
;              i -> R12
;              Y -> R14
;              X -> y+13
;           Char -> y+11
	.even
_GUI_Display_ASCII_UnderLine::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,1
	ldd R14,y+15
; }
; 
; /*****************************************************************************
; * Display_ASCII_UnderLine - 显示一个带有下划线的ASCII
; * @Param X:X轴坐标
; * @Param Y:Y轴坐标
; * @Param Char:ASCII码
; ******************************************************************************/
; void GUI_Display_ASCII_UnderLine(INT8U Char, INT8U X, INT8U Y)
; {
;     INT8U i, ImgData; 
;     INT16U temp;
;     INT8U HZ_X; 
; 	    
;     if(X>=LCD_XSIZE)
	ldd R24,y+13
	cpi R24,97
	brlo L61
; 	    X=X%LCD_XSIZE;
	ldi R17,97
	mov R16,R24
	xcall mod8u
	std y+13,R16
L61:
; 	if(Y>=LCD_YSIZE)
	mov R24,R14
	cpi R24,68
	brlo L63
; 	    Y=Y%LCD_YSIZE;	
	ldi R17,68
	mov R16,R24
	xcall mod8u
	mov R14,R16
L63:
; 	
;     HZ_X = X;
	ldd R10,y+13
;     if(GUIEnglishFont == En_5x8)
	lds R24,_GUIEnglishFont
	cpi R24,1
	brne L65
;     {
;         for(i = 0; i < En_5x8_XSIZE; i++)
	clr R12
	xjmp L70
L67:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_5x8
	ldi R25,>_chardot_5x8
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	ori R22,128
	std y+0,R14
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L68:
	inc R12
L70:
	mov R24,R12
	cpi R24,5
	brlo L67
;         { 
;             temp=i+(INT16U)(Char-0x20)*5; //要注意数据范围
;             ImgData = chardot_5x8[temp]|0x80;
;             LCD_Display_Locate(ImgData, HZ_X, Y);
;             HZ_X++;
;         }
;     } 
	xjmp L66
L65:
;     else 
;     {
;         for(i=0;i<En_6x12_XSIZE;i++)
	clr R12
	xjmp L74
L71:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,12
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_6x12
	ldi R25,>_chardot_6x12
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	std y+0,R14
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L72:
	inc R12
L74:
	mov R24,R12
	cpi R24,6
	brlo L71
;         {   
;             temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
;             ImgData = chardot_6x12[temp];
;             LCD_Display_Locate(ImgData, HZ_X, Y);
;             HZ_X++;
;         }
;         HZ_X=X;
	ldd R10,y+13
;         for(i=En_6x12_XSIZE;i<2*En_6x12_XSIZE;i++)
	ldi R24,6
	mov R12,R24
	xjmp L78
L75:
	ldd R18,y+11
	clr R19
	subi R18,32
	sbci R19,0
	ldi R16,12
	ldi R17,0
	xcall empy16s
	mov R20,R12
	clr R21
	add R20,R16
	adc R21,R17
	ldi R24,<_chardot_6x12
	ldi R25,>_chardot_6x12
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	ori R22,32
	mov R24,R14
	subi R24,248    ; addi 8
	std y+0,R24
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L76:
	inc R12
L78:
	mov R24,R12
	cpi R24,12
	brlo L75
;         {   
;             temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
;             ImgData = chardot_6x12[temp]|0x20;
;             LCD_Display_Locate(ImgData, HZ_X, Y + 8);
;             HZ_X++;
;         }
;     }
L66:
L60:
	adiw R28,1
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
;              y -> y+7
;              x -> R22
;              c -> R20
	.even
_GUI_DispCharAt::
	xcall push_gset3
	mov R22,R18
	mov R20,R16
	sbiw R28,1
; }
; 
; void GUI_DispCharAt(INT8U c, INT8U x, INT8U y)
; {
;     switch (GUITextMode) 
	lds R10,_GUITextMode
	clr R11
	tst R10
	brne X1
	tst R11
	breq L83
X1:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L84
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L85
	xjmp L81
X2:
;     {
L83:
;         case GUI_TEXTMODE_NORMAL :
;              GUI_Display_ASCII(c, x, y);
	ldd R0,y+7
	std y+0,R0
	mov R18,R22
	mov R16,R20
	xcall _GUI_Display_ASCII
;              break;
	xjmp L81
L84:
;         case GUI_TEXTMODE_REVERSE :
;              GUI_Display_InvASCII(c, x, y);
	ldd R0,y+7
	std y+0,R0
	mov R18,R22
	mov R16,R20
	xcall _GUI_Display_InvASCII
;              break;
	xjmp L81
L85:
;         case GUI_TEXTMODE_UNDERLINE :
;              GUI_Display_ASCII_UnderLine(c, x, y);
	ldd R0,y+7
	std y+0,R0
	mov R18,R22
	mov R16,R20
	xcall _GUI_Display_ASCII_UnderLine
;              break;
;         default :
;              break;
L81:
L79:
	adiw R28,1
	xcall pop_gset3
	.dbline 0 ; func end
	ret
;        ImgData -> R20
;           HZ_X -> R22
;              i -> R10
;         CodeID -> R12,R13
;             y0 -> R14
;             x0 -> y+11
;        UniCode -> R20,R21
	.even
_GUI_Display_Chinese::
	st -y,r19
	st -y,r18
	xcall push_gset5
	movw R20,R16
	sbiw R28,1
	ldd R14,y+13
;     }
; }
; 
; #if GUI_DispChar_EN
; void GUI_DispChar(INT8U c)
; {
;     GUI_DispCharAt(c, PosX, PosY);
;     PosX += 8;
; } 
; #endif
; 
; /*
; *****************************************************************************
; * GUI_Display_Chinese - 指定位置显示一个16x16的汉字
; * @Param x0:X轴坐标0--(192-16)
; * @Param y0:Y轴坐标0--(8-2)
; * @Param UniCode:汉字内码
; 
; *****************************************************************************/
; 
; void GUI_Display_Chinese(INT16U UniCode, INT8U x0, INT8U y0) //
; {
;     INT16U CodeID;
;     INT8U  i,ImgData;
;     INT8U  HZ_X;  
;     
; 	if(x0>=LCD_XSIZE)
	ldd R24,y+11
	cpi R24,97
	brlo L87
; 	    x0=x0%LCD_XSIZE;
	ldi R17,97
	mov R16,R24
	xcall mod8u
	std y+11,R16
L87:
; 	if(y0>=LCD_YSIZE)
	mov R24,R14
	cpi R24,68
	brlo L89
; 	    y0=y0%LCD_YSIZE;	
	ldi R17,68
	mov R16,R24
	xcall mod8u
	mov R14,R16
L89:
; 	
;     HZ_X = x0;
	ldd R22,y+11
;     //在字库里搜索汉字
;     for(CodeID=0; CodeID < hzNum; CodeID++)
	clr R12
	clr R13
	xjmp L94
L91:
;     {
;         // 找到 指定汉字的 Index 后, 跳出循环
;         if( (GB_12[CodeID].Index[0]==UniCode/256) && (GB_12[CodeID].Index[1]==UniCode%256) )
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	ldi R24,<_GB_12
	ldi R25,>_GB_12
	movw R30,R16
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	movw R4,R20
	mov R4,R5
	clr R5
	cp R2,R4
	cpc R3,R5
	brne L95
	ldi R24,<_GB_12+1
	ldi R25,>_GB_12+1
	movw R30,R16
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	movw R24,R20
	andi R25,0
	cp R2,R24
	cpc R3,R25
	brne L95
; 	    {
;             break;
	xjmp L93
L95:
;         }
;         else if(CodeID == (hzNum-1))
	movw R24,R12
	cpi R24,231
	ldi R30,3
	cpc R25,R30
	brne L98
;         {//未检索到的汉字,显示个"##"提示吧
;             GUI_DispCharAt('#',x0,y0);
	std y+0,R14
	ldd R18,y+11
	ldi R16,35
	xcall _GUI_DispCharAt
;             GUI_DispCharAt('#',x0+Char_XSIZE,y0);
	std y+0,R14
	lds R2,_Char_XSIZE
	ldd R18,y+11
	add R18,R2
	ldi R16,35
	xcall _GUI_DispCharAt
;             return;
	xjmp L86
L98:
L92:
	movw R24,R12
	adiw R24,1
	movw R12,R24
L94:
	movw R24,R12
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brsh X5
	xjmp L91
X5:
L93:
;         }
;     }
; //----------------------------------
;     switch (GUITextMode) 
	lds R20,_GUITextMode
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L103
X3:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	brne X6
	xjmp L114
X6:
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	brne X7
	xjmp L125
X7:
	xjmp L101
X4:
;     {
L103:
;         case GUI_TEXTMODE_NORMAL :
;           // 写汉字的上半部分  (一个汉字 32 个字节,  显示为2行 * 16列)
;             for(i=0; i<Chinese_XSIZE; i++)
	clr R10
	xjmp L107
L104:
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R24,<_GB_12+2
	ldi R25,>_GB_12+2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R20,Z
	std y+0,R14
	mov R18,R22
	mov R16,R20
	xcall _LCD_Display_Locate
	inc R22
L105:
	inc R10
L107:
	lds R2,_Chinese_XSIZE
	cp R10,R2
	brlo L104
;             {
; 		        ImgData = GB_12[CodeID].Msk[i];
;                 LCD_Display_Locate(ImgData, HZ_X, y0);
;                 HZ_X++;
;             }
;             // 写汉字的下半部分
;             HZ_X = x0;
	ldd R22,y+11
;             for(i=Chinese_XSIZE; i<2*Chinese_XSIZE; i++)
	mov R10,R2
	xjmp L112
L109:
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R24,<_GB_12+2
	ldi R25,>_GB_12+2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R20,Z
	mov R24,R14
	subi R24,248    ; addi 8
	std y+0,R24
	mov R18,R22
	mov R16,R20
	xcall _LCD_Display_Locate
	inc R22
L110:
	inc R10
L112:
	lds R2,_Chinese_XSIZE
	ldi R24,2
	mul R24,R2
	cp R10,R0
	brlo L109
;             {
;                 ImgData = GB_12[CodeID].Msk[i];
;                 LCD_Display_Locate(ImgData, HZ_X, y0 + 8);
;                 HZ_X++;
;             }
; 	        break;
	xjmp L101
L114:
;         //-----------------------------------------------------------------         
;         case GUI_TEXTMODE_REVERSE :
;             // 写汉字的上半部分  (一个汉字 32 个字节,  显示为2行 * 16列)
;             for(i=0; i<Chinese_XSIZE; i++)
	clr R10
	xjmp L118
L115:
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R24,<_GB_12+2
	ldi R25,>_GB_12+2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R20,Z
	clr R21
	ldi R24,255
	ldi R25,0
	eor R20,R24
	eor R21,R25
	std y+0,R14
	mov R18,R22
	mov R16,R20
	xcall _LCD_Display_Locate
	inc R22
L116:
	inc R10
L118:
	lds R2,_Chinese_XSIZE
	cp R10,R2
	brlo L115
;             {
;                 ImgData = GB_12[CodeID].Msk[i]^0xFF;
;                 LCD_Display_Locate(ImgData, HZ_X, y0);
;                 HZ_X++;
;             }
;             // 写汉字的下半部分
;             HZ_X = x0;
	ldd R22,y+11
;             for(i=Chinese_XSIZE; i<2*Chinese_XSIZE; i++)
	mov R10,R2
	xjmp L123
L120:
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R24,<_GB_12+2
	ldi R25,>_GB_12+2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R20,Z
	ldi R24,63
	eor R20,R24
	mov R24,R14
	subi R24,248    ; addi 8
	std y+0,R24
	mov R18,R22
	mov R16,R20
	xcall _LCD_Display_Locate
	inc R22
L121:
	inc R10
L123:
	lds R2,_Chinese_XSIZE
	ldi R24,2
	mul R24,R2
	cp R10,R0
	brlo L120
;             {
;                 ImgData = GB_12[CodeID].Msk[i]^0x3F;//总共12行
;                 LCD_Display_Locate(ImgData, HZ_X, y0 + 8);
;                 HZ_X++;
;             }
; 	        break;
	xjmp L101
L125:
;         //-------------------------------------------------------------------------     
;         case GUI_TEXTMODE_UNDERLINE :
;           // 写汉字的上半部分  (一个汉字 32 个字节,  显示为2行 * 16列)
;             for(i=0; i<Chinese_XSIZE; i++)
	clr R10
	xjmp L129
L126:
	ldi R16,26
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R2,R16
	ldi R24,<_GB_12+2
	ldi R25,>_GB_12+2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R20,Z
	std y+0,R14
	mov R18,R22
	mov R16,R20
	xcall _LCD_Display_Locate
	inc R22
L127:
	inc R10
L129:
	lds R2,_Chinese_XSIZE
	cp R10,R2
	brlo L126
;             {
;                 ImgData = GB_12[CodeID].Msk[i];
;                 LCD_Display_Locate(ImgData, HZ_X, y0);
;                 HZ_X++;
;             }
;             // 写汉字的下半部分

⌨️ 快捷键说明

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