📄 12864.lst
字号:
0610 011B MOVW R2,R22
0611 9420 COM R2
0612 9430 COM R3
0613 012A MOVW R4,R20
0614 2042 AND R4,R2
0615 2053 AND R5,R3
0616 8248 STD Y+0,R4
0617 E021 LDI R18,1
0618 E001 LDI R16,1
0619 DC1D RCALL _write_LCD
(0469) }
061A 9621 ADIW R28,1
061B 940E1809 CALL pop_gset5
061D 9508 RET
_main:
061E 972D SBIW R28,0xD
FILE: C:\DOCUME~1\Administrator\桌面\12864-ICC\main.c
(0001) #include <iom16v.h>
(0002) #include "lcd.h"
(0003) #include "gui.h"
(0004)
(0005) void delay_nms(unsigned int n);
(0006)
(0007)
(0008) //-----------------------------------------------------------
(0009) //主函数
(0010) //-----------------------------------------------------------
(0011) void main(void)
(0012) {
(0013) //unsigned char j=0;
(0014)
(0015) LCD_Init();
061F 940E02D4 CALL _LCD_Init
(0016) LCD_clr(); //显示清屏
0621 940E02EF CALL _LCD_clr
(0017) delay_nms(1);
0623 E001 LDI R16,1
0624 E010 LDI R17,0
0625 940E01F6 CALL _delay_nms
(0018) //GUI绘图演示
(0019) GUI_Rectangle(0, 0, GUI_LCM_XMAX-1, GUI_LCM_YMAX-1, 1);
0627 E081 LDI R24,1
0628 838C STD Y+4,R24
0629 E38F LDI R24,0x3F
062A 838A STD Y+2,R24
062B E78F LDI R24,0x7F
062C E090 LDI R25,0
062D 8399 STD Y+1,R25
062E 8388 STD Y+0,R24
062F 2722 CLR R18
0630 2700 CLR R16
0631 2711 CLR R17
0632 940E0710 CALL _GUI_Rectangle
(0020)
(0021) GUI_Rectangle(60, 5, 123, 59, 1);
0634 E081 LDI R24,1
0635 838C STD Y+4,R24
0636 E38B LDI R24,0x3B
0637 838A STD Y+2,R24
0638 E78B LDI R24,0x7B
0639 E090 LDI R25,0
063A 8399 STD Y+1,R25
063B 8388 STD Y+0,R24
063C E025 LDI R18,5
063D E30C LDI R16,0x3C
063E E010 LDI R17,0
063F 940E0710 CALL _GUI_Rectangle
(0022) GUI_HLine(60, 13, 123, 1);
0641 E081 LDI R24,1
0642 838A STD Y+2,R24
0643 E78B LDI R24,0x7B
0644 E090 LDI R25,0
0645 8399 STD Y+1,R25
0646 8388 STD Y+0,R24
0647 E02D LDI R18,0xD
0648 E30C LDI R16,0x3C
0649 E010 LDI R17,0
064A 940E06DA CALL _GUI_HLine
(0023) GUI_RLine(68, 5, 13, 1);
064C E081 LDI R24,1
064D 838A STD Y+2,R24
064E E08D LDI R24,0xD
064F 8388 STD Y+0,R24
0650 E025 LDI R18,5
0651 E404 LDI R16,0x44
0652 E010 LDI R17,0
0653 940E06F8 CALL _GUI_RLine
(0024) GUI_Line(60, 5, 68, 13, 1);
0655 E081 LDI R24,1
0656 878C STD Y+12,R24
0657 E04D LDI R20,0xD
0658 E050 LDI R21,0
0659 E060 LDI R22,0
065A E070 LDI R23,0
065B 8748 STD Y+8,R20
065C 8759 STD Y+9,R21
065D 876A STD Y+10,R22
065E 877B STD Y+11,R23
065F E444 LDI R20,0x44
0660 E050 LDI R21,0
0661 E060 LDI R22,0
0662 E070 LDI R23,0
0663 834C STD Y+4,R20
0664 835D STD Y+5,R21
0665 836E STD Y+6,R22
0666 837F STD Y+7,R23
0667 E045 LDI R20,5
0668 E050 LDI R21,0
0669 E060 LDI R22,0
066A E070 LDI R23,0
066B 8348 STD Y+0,R20
066C 8359 STD Y+1,R21
066D 836A STD Y+2,R22
066E 837B STD Y+3,R23
066F E30C LDI R16,0x3C
0670 E010 LDI R17,0
0671 E020 LDI R18,0
0672 E030 LDI R19,0
0673 940E07EE CALL _GUI_Line
(0025) GUI_Line(60, 13, 68, 5, 1);
0675 E081 LDI R24,1
0676 878C STD Y+12,R24
0677 E045 LDI R20,5
0678 E050 LDI R21,0
0679 E060 LDI R22,0
067A E070 LDI R23,0
067B 8748 STD Y+8,R20
067C 8759 STD Y+9,R21
067D 876A STD Y+10,R22
067E 877B STD Y+11,R23
067F E444 LDI R20,0x44
0680 E050 LDI R21,0
0681 E060 LDI R22,0
0682 E070 LDI R23,0
0683 834C STD Y+4,R20
0684 835D STD Y+5,R21
0685 836E STD Y+6,R22
0686 837F STD Y+7,R23
0687 E04D LDI R20,0xD
0688 E050 LDI R21,0
0689 E060 LDI R22,0
068A E070 LDI R23,0
068B 8348 STD Y+0,R20
068C 8359 STD Y+1,R21
068D 836A STD Y+2,R22
068E 837B STD Y+3,R23
068F E30C LDI R16,0x3C
0690 E010 LDI R17,0
0691 E020 LDI R18,0
0692 E030 LDI R19,0
0693 940E07EE CALL _GUI_Line
(0026)
(0027) GUI_Circle(20, 20, 15, 1);
0695 E081 LDI R24,1
0696 8788 STD Y+8,R24
0697 E04F LDI R20,0xF
0698 E050 LDI R21,0
0699 E060 LDI R22,0
069A E070 LDI R23,0
069B 834C STD Y+4,R20
069C 835D STD Y+5,R21
069D 836E STD Y+6,R22
069E 837F STD Y+7,R23
069F E144 LDI R20,0x14
06A0 E050 LDI R21,0
06A1 E060 LDI R22,0
06A2 E070 LDI R23,0
06A3 8348 STD Y+0,R20
06A4 8359 STD Y+1,R21
06A5 836A STD Y+2,R22
06A6 837B STD Y+3,R23
06A7 E104 LDI R16,0x14
06A8 E010 LDI R17,0
06A9 E020 LDI R18,0
06AA E030 LDI R19,0
06AB 940E0AE6 CALL _GUI_Circle
(0028) GUI_CircleFill(20, 40, 15, 1);
06AD E081 LDI R24,1
06AE 8788 STD Y+8,R24
06AF E04F LDI R20,0xF
06B0 E050 LDI R21,0
06B1 E060 LDI R22,0
06B2 E070 LDI R23,0
06B3 834C STD Y+4,R20
06B4 835D STD Y+5,R21
06B5 836E STD Y+6,R22
06B6 837F STD Y+7,R23
06B7 E248 LDI R20,0x28
06B8 E050 LDI R21,0
06B9 E060 LDI R22,0
06BA E070 LDI R23,0
06BB 8348 STD Y+0,R20
06BC 8359 STD Y+1,R21
06BD 836A STD Y+2,R22
06BE 837B STD Y+3,R23
06BF E104 LDI R16,0x14
06C0 E010 LDI R17,0
06C1 E020 LDI R18,0
06C2 E030 LDI R19,0
06C3 940E0FC0 CALL _GUI_CircleFill
06C5 C011 RJMP 0x06D7
(0029)
(0030) while(1)
(0031) {
(0032) GUI_Rectangle(0, 0, GUI_LCM_XMAX-1, GUI_LCM_YMAX-1, 1);
06C6 E081 LDI R24,1
06C7 838C STD Y+4,R24
06C8 E38F LDI R24,0x3F
06C9 838A STD Y+2,R24
06CA E78F LDI R24,0x7F
06CB E090 LDI R25,0
06CC 8399 STD Y+1,R25
06CD 8388 STD Y+0,R24
06CE 2722 CLR R18
06CF 2700 CLR R16
06D0 2711 CLR R17
06D1 940E0710 CALL _GUI_Rectangle
(0033) delay_nms(500);
06D3 EF04 LDI R16,0xF4
06D4 E011 LDI R17,1
06D5 940E01F6 CALL _delay_nms
06D7 CFEE RJMP 0x06C6
06D8 962D ADIW R28,0xD
06D9 9508 RET
_GUI_HLine:
bak --> R14
color --> R20
x1 --> R22
y0 --> R10
x0 --> R12
06DA 940E180C CALL push_gset5
06DC 2EA2 MOV R10,R18
06DD 0168 MOVW R12,R16
06DE 9721 SBIW R28,1
06DF 856B LDD R22,Y+11
06E0 857C LDD R23,Y+12
06E1 854D LDD R20,Y+13
FILE: C:\DOCUME~1\Administrator\桌面\12864-ICC\gui.c
(0001) /****************************************************************************************
(0002) * 文件名:GUI.C
(0003) * 功能:GUI基本绘图函数。进行基本绘图运算,并调用相应的刷新程序更新LCD显示。
(0004) * 作者:黄绍斌
(0005) * 修改:冯建辉
(0006) * 日期:2006.09.13
(0007) * 备注:图形操作层,进行各种图形运算操作。
(0008) ****************************************************************************************/
(0009) #include "gui.h"
(0010) #include <math.h>
(0011)
(0012) /****************************************************************************
(0013) * 名称:GUI_HLine()
(0014) * 功能:画水平线。
(0015) * 入口参数:x0 水平线起点所在列的位置
(0016) * y0 水平线起点所在行的位置
(0017) * x1 水平线终点所在列的位置
(0018) * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
(0019) * 出口参数:无
(0020) * 说明:操作失败原因是指定地址超出缓冲区范围。
(0021) ****************************************************************************/
(0022) void GUI_HLine(unsigned int x0, unsigned char y0, unsigned int x1, TCOLOR color)
(0023) {
(0024) unsigned char bak;
(0025) if(x0>x1) // 对x0、x1大小进行排列,以便画图
06E2 156C CP R22,R12
06E3 057D CPC R23,R13
06E4 F420 BCC 0x06E9
(0026) {
(0027) bak = x1;
06E5 2EE6 MOV R14,R22
(0028) x1 = x0;
06E6 01B6 MOVW R22,R12
(0029) x0 = bak;
06E7 2CCE MOV R12,R14
06E8 24DD CLR R13
(0030) }
(0031) do
(0032) {
(0033) GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
06E9 8348 STD Y+0,R20
06EA 2D2A MOV R18,R10
06EB 2D0C MOV R16,R12
06EC 940E05B7 CALL _GUI_Point
(0034) x0++;
06EE 01C6 MOVW R24,R12
06EF 9601 ADIW R24,1
06F0 016C MOVW R12,R24
(0035) }
(0036) while(x1>=x0);
06F1 156C CP R22,R12
06F2 057D CPC R23,R13
06F3 F7A8 BCC 0x06E9
06F4 9621 ADIW R28,1
06F5 940E1809 CALL pop_gset5
06F7 9508 RET
_GUI_RLine:
bak --> R14
color --> R20
y1 --> R22
y0 --> R10
x0 --> R12
06F8 940E180C CALL push_gset5
06FA 2EA2 MOV R10,R18
06FB 0168 MOVW R12,R16
06FC 9721 SBIW R28,1
06FD 856B LDD R22,Y+11
06FE 854D LDD R20,Y+13
(0037) }
(0038)
(0039) /***********************************************************************
(0040) * 名称:GUI_RLine()
(0041) * 功能:画竖直线。根据硬件特点,实现加速。
(0042) * 入口参数:x0 垂直线起点所在列的位置
(0043) * y0 垂直线起点所在行的位置
(0044) * y1 垂直线终点所在行的位置
(0045) * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
(0046) * 出口参数: 无
(0047) * 说明:操作失败原因是指定地址超出缓冲区范围。
(0048) ***********************************************************************/
(0049) void GUI_RLine(unsigned int x0, unsigned char y0, unsigned char y1, TCOLOR color)
(0050) {
(0051) unsigned char bak;
(0052) if(y0>y1) // 对y0、y1大小进行排列,以便画图
06FF 156A CP R22,R10
0700 F418 BCC 0x0704
(0053) {
(0054) bak = y1;
0701 2EE6 MOV R14,R22
(0055) y1 = y0;
0702 2D6A MOV R22,R10
(0056) y0 = bak;
0703 2CAE MOV R10,R14
(0057) }
(0058) do
(0059) {
(0060) GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
0704 8348 STD Y+0,R20
0705 2D2A MOV R18,R10
0706 2D0C MOV R16,R12
0707 940E05B7 CALL _GUI_Point
(0061) y0++;
0709 94A3 INC R10
(0062) }
(0063) while(y1>=y0);
070A 156A CP R22,R10
070B F7C0 BCC 0x0704
070C 9621 ADIW R28,1
070D 940E1809 CALL pop_gset5
070F 9508 RET
_GUI_Rectangle:
color --> R22
y1 --> Y+11
x1 --> Y+9
y0 --> R20
x0 --> R10
0710 940E1810 CALL push_gset3
0712 2F42 MOV R20,R18
0713 0158 MOVW R10,R16
0714 9723 SBIW R28,3
0715 856D LDD R22,Y+13
(0064) }
(0065)
(0066) /****************************************************************************
(0067) * 名称:GUI_Rectangle()
(0068) * 功能:画矩形。
(0069) * 入口参数:x0 矩形左上角的x坐标值
(0070) * y0 矩形左上角的y坐标值
(0071) * x1 矩形右下角的x坐标值
(0072) * y1 矩形右下角的y坐标值
(0073) * color 显示颜色
(0074) * 出口参数:无
(0075) * 说明:操作失败原因是指定地址超出有效范围。
(0076) ****************************************************************************/
(0077) void GUI_Rectangle(uint16 x0, uint8 y0, uint16 x1, uint8 y1, TCOLOR color)
(0078) {
(0079) GUI_HLine(x0, y0, x1, color);
0716 836A STD Y+2,R22
0717 8409 LDD R0,Y+9
0718 841A LDD R1,Y+10
0719 8219 STD Y+1,R1
071A 8208 STD Y+0,R0
071B 2F24 MOV R18,R20
071C 0185 MOVW R16,R10
071D DFBC RCALL _GUI_HLine
(0080) GUI_HLine(x0, y1, x1, color);
071E 836A STD Y+2,R22
071F 8409 LDD R0,Y+9
0720 841A LDD R1,Y+10
0721 8219 STD Y+1,R1
0722 8208 STD Y+0,R0
0723 852B LDD R18,Y+11
0724 0185 MOVW R16,R10
0725 DFB4 RCALL _GUI_HLine
(0081) GUI_RLine(x0, y0, y1, color);
0726 836A STD Y+2,R22
0727 840B LDD R0,Y+11
0728 8208 STD Y+0,R0
0729 2F24 MOV R18,R20
072A 0185 MOVW R16,R10
072B DFCC RCALL _GUI_RLine
(0082) GUI_RLine(x1, y0, y1, color);
072C 836A STD Y+2,R22
072D 840B LDD R0,Y+11
072E 8208 STD Y+0,R0
072F 2F24 MOV R18,R20
0730 8509 LDD R16,Y+9
0731 851A LDD R17,Y+10
0732 DFC5 RCALL _GUI_RLine
0733 9623 ADIW R28,3
0734 940E1803 CALL pop_gset3
0736 9508 RET
_GUI_Rectang
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -