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

📄 gui.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 5 页
字号:
	.byte 123,42
	.byte 18,35
	.byte 19,8
	.byte 'd,'b
	.byte 54,'I
	.byte 'V,32
	.byte 'P,0
	.byte 4,3
	.byte 1,0
	.byte 0,28
	.byte 34,'A
	.byte 0,0
	.byte 'A,34
	.byte 28,0
	.byte 34,20
	.byte 127,20
	.byte 34,8
	.byte 8,127
	.byte 8,8
	.byte 64,48
	.byte 16,0
	.byte 0,8
	.byte 8,8
	.byte 8,8
	.byte 0,96
	.byte 96,0
	.byte 0,32
	.byte 16,8
	.byte 4,2
	.byte 62,'Q
	.byte 'I,'E
	.byte 62,0
	.byte 'B,127
	.byte 64,0
	.byte 'b,'Q
	.byte 'I,'I
	.byte 'F,33
	.byte 'A,'I
	.byte 'M,51
	.byte 24,20
	.byte 18,127
	.byte 16,39
	.byte 'E,'E
	.byte 'E,57
	.byte 60,'J
	.byte 'I,'I
	.byte 49,1
	.byte 'q,9
	.byte 5,3
	.byte 54,'I
	.byte 'I,'I
	.byte 54,'F
	.byte 'I,'I
	.byte 41,30
	.byte 0,54
	.byte 54,0
	.byte 0,64
	.byte 54,54
	.byte 0,0
	.byte 8,20
	.byte 34,'A
	.byte 0,20
	.byte 20,20
	.byte 20,20
	.byte 0,'A
	.byte 34,20
	.byte 8,2
	.byte 1,'Y
	.byte 5,2
	.byte 62,'A
	.byte 93,'U
	.byte 94,124
	.byte 18,17
	.byte 18,124
	.byte 127,'I
	.byte 'I,'I
	.byte 54,62
	.byte 'A,'A
	.byte 'A,34
	.byte 127,'A
	.byte 'A,'A
	.byte 62,127
	.byte 'I,'I
	.byte 'I,'A
	.byte 127,9
	.byte 9,9
	.byte 1,62
	.byte 'A,'Q
	.byte 'Q,'r
	.byte 127,8
	.byte 8,8
	.byte 127,0
	.byte 'A,127
	.byte 'A,0
	.byte 32,64
	.byte 'A,63
	.byte 1,127
	.byte 8,20
	.byte 34,'A
	.byte 127,64
	.byte 64,64
	.byte 64,127
	.byte 2,12
	.byte 2,127
	.byte 127,4
	.byte 8,16
	.byte 127,62
	.byte 'A,'A
	.byte 'A,62
	.byte 127,9
	.byte 9,9
	.byte 6,62
	.byte 'A,'Q
	.byte 33,94
	.byte 127,9
	.byte 25,41
	.byte 'F,38
	.byte 'I,'I
	.byte 'I,50
	.byte 1,1
	.byte 127,1
	.byte 1,63
	.byte 64,64
	.byte 64,63
	.byte 31,32
	.byte 64,32
	.byte 31,127
	.byte 32,24
	.byte 32,127
	.byte 'c,20
	.byte 8,20
	.byte 'c,3
	.byte 4,'x
	.byte 4,3
	.byte 'a,'Q
	.byte 'I,'E
	.byte 'C,127
	.byte 127,'A
	.byte 'A,0
	.byte 2,4
	.byte 8,16
	.byte 32,0
	.byte 'A,'A
	.byte 127,127
	.byte 4,2
	.byte 127,2
	.byte 4,8
	.byte 28,42
	.byte 8,8
	.byte 0,0
	.byte 1,2
	.byte 4,36
	.byte 'T,'T
	.byte 56,64
	.byte 127,40
	.byte 'D,'D
	.byte 56,56
	.byte 'D,'D
	.byte 'D,8
	.byte 56,'D
	.byte 'D,40
	.byte 127,56
	.byte 'T,'T
	.byte 'T,8
	.byte 8,126
	.byte 9,9
	.byte 2,152
	.byte 164,164
	.byte 164,'x
	.byte 127,8
	.byte 4,4
	.byte 'x,0
	.byte 0,'y
	.byte 0,0
	.byte 0,128
	.byte 136,'y
	.byte 0,127
	.byte 16,40
	.byte 'D,64
	.byte 0,'A
	.byte 127,64
	.byte 0,'x
	.byte 4,'x
	.byte 4,'x
	.byte 4,'x
	.byte 4,4
	.byte 'x,56
	.byte 'D,'D
	.byte 'D,56
	.byte 252,36
	.byte 36,36
	.byte 24,24
	.byte 36,36
	.byte 36,252
	.byte 4,'x
	.byte 4,4
	.byte 8,'H
	.byte 'T,'T
	.byte 'T,36
	.byte 4,63
	.byte 'D,'D
	.byte 36,60
	.byte 64,64
	.byte 60,64
	.byte 28,32
	.byte 64,32
	.byte 28,60
	.byte 64,60
	.byte 64,60
	.byte 'D,40
	.byte 16,40
	.byte 'D,156
	.byte 160,160
	.byte 144,124
	.byte 'D,'d
	.byte 'T,'L
	.byte 'D,8
	.byte 54,'A
	.byte 0,0
	.byte 0,0
	.byte 'w,0
	.byte 0,0
	.byte 0,'A
	.byte 54,8
	.byte 8,4
	.byte 8,16
	.byte 8,'U
	.byte 42,'U
	.byte 42,'U
	.area data(ram, con, rel)
_GUITextMode::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
_GUIEnglishFont::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
_Char_XSIZE::
	.blkb 1
	.area idata
	.byte 6
	.area data(ram, con, rel)
_Char_YSIZE::
	.blkb 1
	.area idata
	.byte 12
	.area data(ram, con, rel)
_GUIChineseFont::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
_Chinese_XSIZE::
	.blkb 1
	.area idata
	.byte 12
	.area data(ram, con, rel)
_Chinese_YSIZE::
	.blkb 1
	.area idata
	.byte 12
	.area data(ram, con, rel)
_PosX::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
_PosY::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
_NoXY::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.area text(rom, con, rel)
	.even
_GUI_Init::
; #include "SYS_Config.h"
; #include "GUI_Config.h"
; #include "GUI.h"  
; 
; //包含液晶底层驱动函数
; #include "LcdDrive.h" 
; 
; #include "Chinese.h"
; #include "ASCII.h"  
;  
; /*-------------------------------------------------------------------------
; GUI相关全局变量
; -------------------------------------------------------------------------*/
; 
; INT8U  GUITextMode = GUI_TEXTMODE_NORMAL;  //显示模式
;        
; INT8U  GUIEnglishFont = En_6x12; //英文字体
; INT8U  Char_XSIZE=6;    //英文字体X宽度 不能大于8
; INT8U  Char_YSIZE=12;   //英文字体Y宽度 不能大于16
; 
; INT8U  GUIChineseFont=Chinese_12x12;
; INT8U  Chinese_XSIZE=12;//中文字体x宽度          
; INT8U  Chinese_YSIZE=12;//中文字体y宽度      
; 
; INT8U  PosX = 0;        //当前系统X坐标
; INT8U  PosY = 0;        //当前系统Y坐标
; 
; INT8U  NoXY = TRUE;     //是否使用PosX PosY的标志   
;                         //1-->不使用   
; 			            //0-->使用
; 
; void GUI_Init(void)
; {
;     LCD_Init();
	xcall _LCD_Init
;     GUI_Clear();
	xcall _GUI_Clear
;     
;     GUITextMode = GUI_TEXTMODE_NORMAL;
	clr R2
	sts _GUITextMode,R2
;     
;     GUIEnglishFont = En_6x12;
	sts _GUIEnglishFont,R2
;     Char_XSIZE = En_6x12_XSIZE;
	ldi R24,6
	sts _Char_XSIZE,R24
;     Char_YSIZE = En_6x12_YSIZE;
	ldi R24,12
	sts _Char_YSIZE,R24
;     
;     GUIChineseFont=Chinese_12x12;
	sts _GUIChineseFont,R2
;     Chinese_XSIZE=Chinese_12x12_XSIZE;//中文字体x宽度          
	sts _Chinese_XSIZE,R24
;     Chinese_YSIZE=Chinese_12x12_YSIZE;//中文字体y宽度  
	sts _Chinese_YSIZE,R24
;     
;     PosX = 0;
	sts _PosX,R2
;     PosY = 0;
	sts _PosY,R2
;     NoXY = TRUE;
	ldi R24,1
	sts _NoXY,R24
L1:
	.dbline 0 ; func end
	ret
	.even
_GUI_Clear::
; } 
; 
; void GUI_Clear(void)
; {
;     LCD_ClearScreen();
	xcall _LCD_ClearScreen
L2:
	.dbline 0 ; func end
	ret
;              i -> R20,R21
;         Period -> R16,R17
	.even
_GUI_Delay::
	xcall push_gset1
; }
; 
; void GUI_Delay(INT16U Period)
; {
	xjmp L5
L4:
;     INT16U i;
;     while(Period--)
;     {
;         for(i=0;i<400;i++)
	clr R20
	clr R21
	xjmp L10
L7:
L8:
	subi R20,255  ; offset = 1
	sbci R21,255
L10:
	cpi R20,144
	ldi R30,1
	cpc R21,R30
	brlo L7
L5:
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L4
	tst R3
	brne L4
X0:
L3:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
;              x -> R16
	.even
_GUI_GotoX::
; 	    ;
;     }  
; }
; 
; void GUI_GotoX(INT8U x)
; {
;     if (x >= LCD_XSIZE)
	cpi R16,97
	brlo L12
;         PosX =LCD_XSIZE;
	ldi R24,97
	sts _PosX,R24
	xjmp L13
L12:
;     else 
;         PosX = x;
	sts _PosX,R16
L13:
L11:
	.dbline 0 ; func end
	ret
;              y -> R16
	.even
_GUI_GotoY::
; }
; 
; void GUI_GotoY(INT8U y)
; {
;     if (y >=LCD_YSIZE) 
	cpi R16,68
	brlo L15
;         PosY = LCD_YSIZE;
	ldi R24,68
	sts _PosY,R24
	xjmp L16
L15:
;     else 
;         PosY = y;
	sts _PosY,R16
L16:
L14:
	.dbline 0 ; func end
	ret
;              y -> R20
;              x -> R22
	.even
_GUI_GotoXY::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
; }
; 
; void GUI_GotoXY(INT8U x,INT8U y)
; {
;     GUI_GotoX(x);
	mov R16,R22
	xcall _GUI_GotoX
;     GUI_GotoY(y);
	mov R16,R20
	xcall _GUI_GotoY
L17:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;       TextMode -> R16
	.even
_GUI_SetTextMode::
; }
; 
; /*
; *****************************************************************************
; * GUI_SetTextMode - 设置文字显示模式
; * @Param TextMode:模式代码
; * @Return :模式代码
; *****************************************************************************
; */
; INT8U GUI_SetTextMode(INT8U TextMode)
; {
;     GUITextMode = TextMode;
	sts _GUITextMode,R16
;     return GUITextMode;
L18:
	.dbline 0 ; func end
	ret
;         EnFont -> R16
	.even
_GUI_SetEnFont::
; }
; 
; /*****************************************************************************
; * GUI_SetEnFont - 设置显示的英文字体
; * DESCRIPTION: -
; * 目前支持两种字体8x16 5x8
; * @Param EnFont:字体代码
; *****************************************************************************/
; void GUI_SetEnFont(INT8U EnFont)
; {
;    if (EnFont == En_5x8)
	cpi R16,1
	brne L20
;    {
;        GUIEnglishFont  = En_5x8;
	ldi R24,1
	sts _GUIEnglishFont,R24
;        Char_XSIZE = En_5x8_XSIZE;
	ldi R24,5
	sts _Char_XSIZE,R24
;        Char_YSIZE = En_5x8_YSIZE;
	ldi R24,8
	sts _Char_YSIZE,R24
;    } 
	xjmp L21
L20:
;    else
;    {
;        GUIEnglishFont  = En_6x12;
	clr R2
	sts _GUIEnglishFont,R2
;        Char_XSIZE = En_6x12_XSIZE;
	ldi R24,6
	sts _Char_XSIZE,R24
;        Char_YSIZE = En_6x12_YSIZE;
	ldi R24,12
	sts _Char_YSIZE,R24
;    }
L21:
L19:
	.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::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,1
	ldd R14,y+15
; }
; 
; 
; /****************************************************************************
; * Display_ASCII - 显示一个ASCII
; * @Param X:X轴坐标 0--128  (注意边界)
; * @Param Y:Y轴坐标 0-- 7   (注意边界)
; * @Param Char:ASCII码
; ******************************************************************************/
; void GUI_Display_ASCII(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 L23
; 	    X=X%LCD_XSIZE;
	ldi R17,97
	mov R16,R24
	xcall mod8u
	std y+13,R16
L23:
; 	if(Y>=LCD_YSIZE)
	mov R24,R14
	cpi R24,68
	brlo L25
; 	    Y=Y%LCD_YSIZE;
	ldi R17,68
	mov R16,R24
	xcall mod8u
	mov R14,R16
L25:
; 		
;     HZ_X = X;
	ldd R10,y+13
;     if(GUIEnglishFont == En_5x8)
	lds R24,_GUIEnglishFont
	cpi R24,1
	brne L27
;     {
;         for(i = 0; i < En_5x8_XSIZE; i++)
	clr R12
	xjmp L32
L29:
	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
	std y+0,R14
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L30:
	inc R12
L32:
	mov R24,R12
	cpi R24,5
	brlo L29
;         {   
;             temp=i+(INT16U)(Char-0x20)*5; //要注意数据范围
;             ImgData = chardot_5x8[temp];
;             LCD_Display_Locate(ImgData, HZ_X, Y);
;             HZ_X++;
;         }
;     }
	xjmp L28
L27:
;     else 
;     {
;         for(i=0;i<En_6x12_XSIZE;i++)
	clr R12
	xjmp L36
L33:
	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
L34:
	inc R12
L36:
	mov R24,R12
	cpi R24,6
	brlo L33
;         {    
;             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 L40
L37:
	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
	mov R24,R14
	subi R24,248    ; addi 8
	std y+0,R24
	mov R18,R10
	mov R16,R22
	xcall _LCD_Display_Locate
	inc R10
L38:
	inc R12
L40:
	mov R24,R12
	cpi R24,12
	brlo L37
;         {
;             temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
;             ImgData = chardot_6x12[temp];
;             LCD_Display_Locate(ImgData, HZ_X, Y + 8);
;             HZ_X++;
;         }
;      }
L28:
L22:
	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_InvASCII::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,1
	ldd R14,y+15
; }
; 
; /*****************************************************************************
; * Display_InvASCII - 反显示ASCII
; * @Param X:X轴坐标  0--191
; * @Param Y:Y轴坐标  0--7
; * @Param Char:ASCII码
; *****************************************************************************/
; void GUI_Display_InvASCII(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 L42
; 	    X=X%LCD_XSIZE;
	ldi R17,97
	mov R16,R24
	xcall mod8u
	std y+13,R16
L42:
; 	if(Y>=LCD_YSIZE)
	mov R24,R14
	cpi R24,68
	brlo L44
; 	    Y=Y%LCD_YSIZE;	
	ldi R17,68
	mov R16,R24
	xcall mod8u
	mov R14,R16
L44:
; 		
;     HZ_X = X;
	ldd R10,y+13
;     if(GUIEnglishFont == En_5x8)
	lds R24,_GUIEnglishFont
	cpi R24,1
	brne L46
;     {

⌨️ 快捷键说明

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