📄 main.lst
字号:
__start:
__text_start:
00EA E5CF LDI R28,0x5F
00EB E0D4 LDI R29,4
00EC BFCD OUT 0x3D,R28
00ED BFDE OUT 0x3E,R29
00EE 51C0 SUBI R28,0x10
00EF 40D0 SBCI R29,0
00F0 EA0A LDI R16,0xAA
00F1 8308 STD Y+0,R16
00F2 2400 CLR R0
00F3 E6E0 LDI R30,0x60
00F4 E0F0 LDI R31,0
00F5 E010 LDI R17,0
00F6 36E4 CPI R30,0x64
00F7 07F1 CPC R31,R17
00F8 F011 BEQ 0x00FB
00F9 9201 ST R0,Z+
00FA CFFB RJMP 0x00F6
00FB 8300 STD Z+0,R16
00FC EDE4 LDI R30,0xD4
00FD E0F1 LDI R31,1
00FE E6A0 LDI R26,0x60
00FF E0B0 LDI R27,0
0100 E011 LDI R17,1
0101 3DE4 CPI R30,0xD4
0102 07F1 CPC R31,R17
0103 F021 BEQ 0x0108
0104 95C8 LPM
0105 9631 ADIW R30,1
0106 920D ST R0,X+
0107 CFF9 RJMP 0x0101
0108 940E0216 CALL _main
_exit:
010A CFFF RJMP _exit
_OutI:
aa --> R10
Com --> R20
CtroCode --> R22
010B 940E026C CALL push_gset3
010D 2F42 MOV R20,R18
010E 2F60 MOV R22,R16
FILE: F:\工程文件\程序\12864\12864.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include <stdlib.h>
(0004) #include "font.h"
(0005) #include "string.h"
(0006) /*************19264显示接口引脚定义*****************/
(0007)
(0008)
(0009) #define LCD_DI (1 <<6) // PA0----DI
(0010) #define LCD_RW (1 <<5) // PA1----RW
(0011) #define LCD_E (1 <<4) // PA2----E
(0012) #define LCD_CS1 (1 << 3) // PA3----CS1
(0013) #define LCD_CS2 (1 << 2) // PA4----CS2
(0014)
(0015) #define LCD_SET_CS1() (PORTA |= LCD_CS1) // 位置位,输出1
(0016) #define LCD_SET_CS2() (PORTA |= LCD_CS2)
(0017) #define LCD_SET_DI() (PORTA |= LCD_DI)
(0018) #define LCD_SET_RW() (PORTA |= LCD_RW)
(0019) #define LCD_SET_E() (PORTA |= LCD_E)
(0020)
(0021) #define LCD_CLEAR_CS1() (PORTA &= ~LCD_CS1) // 位清零,输出0
(0022) #define LCD_CLEAR_CS2() (PORTA &= ~LCD_CS2)
(0023)
(0024) #define LCD_CLEAR_DI() (PORTA &= ~LCD_DI)
(0025) #define LCD_CLEAR_RW() (PORTA &= ~LCD_RW)
(0026) #define LCD_CLEAR_E() (PORTA &= ~LCD_E)
(0027) #define LCD_DATA_OUT PORTB //LCD数据输出口
(0028) #define LCD_DATA_IN PINB //LCD数据输出口
(0029) #define LCD_DDR DDRB //LCD数据口方向
(0030)
(0031) void OutI(unsigned char CtroCode,unsigned char Com);
(0032) void OutD(unsigned char CtroCode,unsigned char Dat);
(0033) void LCD_NOP(void);
(0034) void ClearDisplay(void);
(0035) void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0036) unsigned char SelscP,unsigned char num,unsigned char flag);
(0037) void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag);
(0038)
(0039)
(0040)
(0041) void OutI(unsigned char CtroCode,unsigned char Com)
(0042) { //Com为指令
(0043) unsigned char aa=1;
010F 24AA CLR R10
0110 94A3 INC R10
(0044) switch(CtroCode)
0111 2777 CLR R23
0112 3060 CPI R22,0
0113 0767 CPC R22,R23
0114 F049 BEQ 0x011E
0115 3061 CPI R22,1
0116 E0E0 LDI R30,0
0117 077E CPC R23,R30
0118 F041 BEQ 0x0121
0119 3062 CPI R22,2
011A E0E0 LDI R30,0
011B 077E CPC R23,R30
011C F039 BEQ 0x0124
011D C008 RJMP 0x0126
(0045) { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0,CS3=0
011E 9ADB SBI 0x1B,3
(0046) LCD_SET_CS2();
011F 9ADA SBI 0x1B,2
(0047)
(0048) break;
0120 C005 RJMP 0x0126
(0049) case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1,CS3=1
0121 98DA CBI 0x1B,2
(0050) LCD_SET_CS1();
0122 9ADB SBI 0x1B,3
(0051)
(0052) break;
0123 C002 RJMP 0x0126
(0053) case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0,CS3=1
0124 9ADA SBI 0x1B,2
(0054) LCD_CLEAR_CS1();
0125 98DB CBI 0x1B,3
(0055)
(0056) break;
(0057)
(0058) }
(0059) LCD_DDR=0;
0126 2422 CLR R2
0127 BA27 OUT 0x17,R2
(0060) LCD_CLEAR_DI(); //DI=0
0128 98DE CBI 0x1B,6
(0061) /*
(0062) while(aa)
(0063) { LCD_SET_RW(); //R/W=1
(0064) LCD_CLEAR_DI(); //D/I=0
(0065) LCD_SET_E(); //E=1
(0066) NOP();
(0067) LCD_CLEAR_E(); //E=0
(0068) aa=LCD_DATA_IN;
(0069)
(0070) aa&=0x80;
(0071) //if(aa==0) break;
(0072) }*/
(0073) LCD_NOP();
0129 D041 RCALL _LCD_NOP
(0074) LCD_NOP();
012A D040 RCALL _LCD_NOP
(0075) LCD_NOP();
012B D03F RCALL _LCD_NOP
(0076) LCD_NOP();
012C D03E RCALL _LCD_NOP
(0077) LCD_DDR=0Xff;
012D EF8F LDI R24,0xFF
012E BB87 OUT 0x17,R24
(0078) LCD_CLEAR_RW(); //R/W=0
012F 98DD CBI 0x1B,5
(0079)
(0080) LCD_SET_E(); //E=1
0130 9ADC SBI 0x1B,4
(0081) LCD_NOP();
0131 D039 RCALL _LCD_NOP
(0082) LCD_DATA_OUT=Com;
0132 BB48 OUT 0x18,R20
(0083) LCD_NOP();
0133 D037 RCALL _LCD_NOP
(0084) LCD_CLEAR_E(); //E=0
0134 98DC CBI 0x1B,4
(0085) //
(0086) LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
0135 9ADB SBI 0x1B,3
(0087) LCD_SET_CS2();
0136 9ADA SBI 0x1B,2
0137 940E0262 CALL pop_gset3
0139 9508 RET
_OutD:
aa --> R10
Dat --> R20
CtroCode --> R22
013A 940E026C CALL push_gset3
013C 2F42 MOV R20,R18
013D 2F60 MOV R22,R16
(0088)
(0089) }
(0090)
(0091) void OutD(unsigned char CtroCode,unsigned char Dat)
(0092) { //Dat为数据
(0093) unsigned char aa=1;
013E 24AA CLR R10
013F 94A3 INC R10
(0094) switch(CtroCode)
0140 2777 CLR R23
0141 3060 CPI R22,0
0142 0767 CPC R22,R23
0143 F049 BEQ 0x014D
0144 3061 CPI R22,1
0145 E0E0 LDI R30,0
0146 077E CPC R23,R30
0147 F041 BEQ 0x0150
0148 3062 CPI R22,2
0149 E0E0 LDI R30,0
014A 077E CPC R23,R30
014B F039 BEQ 0x0153
014C C008 RJMP 0x0155
(0095) { case 0: LCD_SET_CS1(); //全屏,CS1=0,CS2=0
014D 9ADB SBI 0x1B,3
(0096) LCD_SET_CS2();
014E 9ADA SBI 0x1B,2
(0097)
(0098) break;
014F C005 RJMP 0x0155
(0099) case 1: LCD_CLEAR_CS2(); //左屏,CS1=0,CS2=1
0150 98DA CBI 0x1B,2
(0100) LCD_SET_CS1();
0151 9ADB SBI 0x1B,3
(0101)
(0102) break;
0152 C002 RJMP 0x0155
(0103) case 2: LCD_SET_CS2(); //中屏,CS1=1,CS2=0
0153 9ADA SBI 0x1B,2
(0104) LCD_CLEAR_CS1();
0154 98DB CBI 0x1B,3
(0105)
(0106) break;
(0107)
(0108) }
(0109) LCD_DDR=0X00;
0155 2422 CLR R2
0156 BA27 OUT 0x17,R2
(0110) /* while(aa)
(0111) { LCD_SET_RW(); //RW=1
(0112) LCD_CLEAR_DI(); //D/I=0
(0113) LCD_SET_E(); //E=1
(0114) NOP();
(0115) LCD_CLEAR_E(); //E=0
(0116) aa=LCD_DATA_IN;
(0117) aa&=0x80;
(0118) }*/
(0119) LCD_NOP();
0157 D013 RCALL _LCD_NOP
(0120) LCD_NOP();
0158 D012 RCALL _LCD_NOP
(0121) LCD_NOP();
0159 D011 RCALL _LCD_NOP
(0122) LCD_NOP();
015A D010 RCALL _LCD_NOP
(0123) LCD_NOP();
015B D00F RCALL _LCD_NOP
(0124) LCD_NOP();
015C D00E RCALL _LCD_NOP
(0125)
(0126) LCD_CLEAR_RW(); //RW=0
015D 98DD CBI 0x1B,5
(0127) LCD_SET_DI(); //D/I=1
015E 9ADE SBI 0x1B,6
(0128) LCD_DDR=0Xff;
015F EF8F LDI R24,0xFF
0160 BB87 OUT 0x17,R24
(0129) LCD_SET_E(); //E=1
0161 9ADC SBI 0x1B,4
(0130) LCD_NOP();
0162 D008 RCALL _LCD_NOP
(0131) LCD_DATA_OUT=Dat;
0163 BB48 OUT 0x18,R20
(0132)
(0133)
(0134) LCD_NOP();
0164 D006 RCALL _LCD_NOP
(0135) LCD_CLEAR_E(); //E=0
0165 98DC CBI 0x1B,4
(0136) LCD_SET_CS1(); //CS1=1,CS2=1,CS3=1
0166 9ADB SBI 0x1B,3
(0137) LCD_SET_CS2();
0167 9ADA SBI 0x1B,2
0168 940E0262 CALL pop_gset3
016A 9508 RET
(0138)
(0139) }
(0140)
(0141) void LCD_NOP(void)
(0142) { unsigned int i;
(0143)
(0144) for(i=0;i<50;i++);
_LCD_NOP:
i --> R16
016B 2700 CLR R16
016C 2711 CLR R17
016D C002 RJMP 0x0170
016E 5F0F SUBI R16,0xFF
016F 4F1F SBCI R17,0xFF
0170 3302 CPI R16,0x32
0171 E0E0 LDI R30,0
0172 071E CPC R17,R30
0173 F3D0 BCS 0x016E
0174 9508 RET
_ClearDisplay:
i --> R20
j --> R22
0175 940E026E CALL push_gset2
(0145) }
(0146)
(0147) void ClearDisplay(void)
(0148) { unsigned char i,j;
(0149)
(0150) for(i=0;i<8;i++)
0177 2744 CLR R20
0178 C010 RJMP 0x0189
(0151) { OutI(0,0xb8+i); //X首地址
0179 2F24 MOV R18,R20
017A 5428 SUBI R18,0x48
017B 2700 CLR R16
017C DF8E RCALL _OutI
(0152) OutI(0,0x40); //y首地址
017D E420 LDI R18,0x40
017E 2700 CLR R16
017F DF8B RCALL _OutI
(0153) for(j=0;j<64;j++)
0180 2766 CLR R22
0181 C004 RJMP 0x0186
(0154) OutD(0,0x0);
0182 2722 CLR R18
0183 2700 CLR R16
0184 DFB5 RCALL _OutD
0185 9563 INC R22
0186 3460 CPI R22,0x40
0187 F3D0 BCS 0x0182
0188 9543 INC R20
0189 3048 CPI R20,0x8
018A F370 BCS 0x0179
018B 940E025F CALL pop_gset2
018D 9508 RET
_DisplayWord:
m --> R20
dat --> R14
i --> R22
flag --> R10
num --> R12
SelscP --> Y+16
yAdd --> Y+14
xAdd --> Y+12
Add --> Y+10
018E 940E0242 CALL push_arg4
0190 940E0268 CALL push_gset5
0192 88CA LDD R12,Y+18
0193 88AC LDD R10,Y+20
(0155) }
(0156) }
(0157)
(0158)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -