📄 gsm_m22.lst
字号:
__start:
__text_start:
00C0 E5CF LDI R28,0x5F
00C1 E0D4 LDI R29,4
00C2 BFCD OUT 0x3D,R28
00C3 BFDE OUT 0x3E,R29
00C4 51C0 SUBI R28,0x10
00C5 40D0 SBCI R29,0
00C6 EA0A LDI R16,0xAA
00C7 8308 STD Y+0,R16
00C8 2400 CLR R0
00C9 E4ED LDI R30,0x4D
00CA E0F1 LDI R31,1
00CB E011 LDI R17,1
00CC 34ED CPI R30,0x4D
00CD 07F1 CPC R31,R17
00CE F011 BEQ 0x00D1
00CF 9201 ST R0,Z+
00D0 CFFB RJMP 0x00CC
00D1 8300 STD Z+0,R16
00D2 E9E2 LDI R30,0x92
00D3 E0F0 LDI R31,0
00D4 E6A0 LDI R26,0x60
00D5 E0B0 LDI R27,0
00D6 E011 LDI R17,1
00D7 37EF CPI R30,0x7F
00D8 07F1 CPC R31,R17
00D9 F021 BEQ 0x00DE
00DA 95C8 LPM
00DB 9631 ADIW R30,1
00DC 920D ST R0,X+
00DD CFF9 RJMP 0x00D7
00DE 940E04AA CALL _main
_exit:
00E0 CFFF RJMP _exit
FILE: E:\单片机\AVR程序\GSM_M22\12864.h
(0001) /***************************************************************************************************
(0002) 宏定义
(0003) ****************************************************************************************************/
(0004)
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007)
(0008) //串行通信
(0009)
(0010) #define PORT PORTA //选择引脚口
(0011)
(0012) #define setRS PORT|=(1<<1) //串行的片选信号
(0013) #define clearRS PORT&=~(1<<1)
(0014)
(0015) #define setRW PORT|=(1<<2) //串行的数据口
(0016) #define clearRW PORT&=~(1<<2)
(0017)
(0018) #define setCKL PORT|=(1<<3),delay_nus(1) //串行的同步时钟
(0019) #define clearCKL PORT&=~(1<<3),delay_nus(1)
(0020)
(0021) #define Clear WriteCommand(0x01),delay_nms(5) //清屏
(0022)
(0023)
(0024)
(0025) /*-----------------------------------------------------------------------
(0026) 延时函数
(0027) 系统时钟:8M
(0028) -----------------------------------------------------------------------*/
(0029) void delay_1us(void) //1us延时函数
(0030) {
(0031) asm("nop");
_delay_1us:
00E1 0000 NOP
00E2 9508 RET
_delay_nus:
i --> R20
n --> R22
00E3 940E0538 CALL push_gset2
00E5 01B8 MOVW R22,R16
(0032) }
(0033) void delay_nus(unsigned int n) //N us延时函数
(0034) {
(0035) unsigned int i=0;
00E6 2744 CLR R20
00E7 2755 CLR R21
(0036) for (i=0;i<n;i++)
00E8 C003 RJMP 0x00EC
(0037) delay_1us();
00E9 DFF7 RCALL _delay_1us
00EA 5F4F SUBI R20,0xFF
00EB 4F5F SBCI R21,0xFF
00EC 1746 CP R20,R22
00ED 0757 CPC R21,R23
00EE F3D0 BCS 0x00E9
00EF 940E0526 CALL pop_gset2
00F1 9508 RET
(0038) }
(0039) void delay_1ms(void) //1ms延时函数
(0040) {
(0041) unsigned int i;
(0042) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
00F2 2700 CLR R16
00F3 2711 CLR R17
00F4 C002 RJMP 0x00F7
00F5 5F0F SUBI R16,0xFF
00F6 4F1F SBCI R17,0xFF
00F7 3704 CPI R16,0x74
00F8 E0E4 LDI R30,4
00F9 071E CPC R17,R30
00FA F3D0 BCS 0x00F5
00FB 9508 RET
_delay_nms:
i --> R20
n --> R22
00FC 940E0538 CALL push_gset2
00FE 01B8 MOVW R22,R16
(0043) }
(0044) void delay_nms(unsigned int n) //N ms延时函数
(0045) {
(0046) unsigned int i=0;
00FF 2744 CLR R20
0100 2755 CLR R21
(0047) for (i=0;i<n;i++)
0101 C003 RJMP 0x0105
(0048) delay_1ms();
0102 DFEF RCALL _delay_1ms
0103 5F4F SUBI R20,0xFF
0104 4F5F SBCI R21,0xFF
0105 1746 CP R20,R22
0106 0757 CPC R21,R23
0107 F3D0 BCS 0x0102
0108 940E0526 CALL pop_gset2
010A 9508 RET
_send_8bit:
i --> R20
ch --> R22
010B 940E0538 CALL push_gset2
010D 2F60 MOV R22,R16
(0049) }
(0050) /*-----------------------------------------------------------------------
(0051) 延时函数
(0052) 系统时钟:8M
(0053) -----------------------------------------------------------------------*/
(0054)
(0055)
(0056) //发送8位数据
(0057) void send_8bit(uchar ch)
(0058) {
(0059) char i;
(0060) for(i=0;i<8;i++)
010E 2744 CLR R20
010F C013 RJMP 0x0123
(0061) { setCKL;
0110 9ADB SBI 0x1B,3
0111 E001 LDI R16,1
0112 E010 LDI R17,0
0113 DFCF RCALL _delay_nus
(0062) if((ch<<i)&0x80)setRW;
0114 2F06 MOV R16,R22
0115 2F14 MOV R17,R20
0116 940E056E CALL lsl8
0118 2F80 MOV R24,R16
0119 7880 ANDI R24,0x80
011A F011 BEQ 0x011D
011B 9ADA SBI 0x1B,2
011C C001 RJMP 0x011E
(0063) else clearRW;
011D 98DA CBI 0x1B,2
(0064) clearCKL;
011E 98DB CBI 0x1B,3
011F E001 LDI R16,1
0120 E010 LDI R17,0
0121 DFC1 RCALL _delay_nus
0122 9543 INC R20
0123 3048 CPI R20,0x8
0124 F358 BCS 0x0110
0125 940E0526 CALL pop_gset2
0127 9508 RET
_WriteData:
data --> R20
0128 940E053A CALL push_gset1
012A 2F40 MOV R20,R16
(0065) }
(0066) }
(0067) //写数据
(0068) void WriteData(uchar data)//
(0069) {
(0070) setRS;
012B 9AD9 SBI 0x1B,1
(0071) send_8bit(0xfa);
012C EF0A LDI R16,0xFA
012D DFDD RCALL _send_8bit
(0072) send_8bit(data&0xf0);
012E 2F04 MOV R16,R20
012F 7F00 ANDI R16,0xF0
0130 DFDA RCALL _send_8bit
(0073) send_8bit(data<<4);
0131 2F04 MOV R16,R20
0132 700F ANDI R16,0xF
0133 9502 SWAP R16
0134 DFD6 RCALL _send_8bit
(0074) clearRS;
0135 98D9 CBI 0x1B,1
0136 940E053D CALL pop_gset1
0138 9508 RET
_WriteCommand:
command --> R20
0139 940E053A CALL push_gset1
013B 2F40 MOV R20,R16
(0075) }
(0076) //写地址
(0077) void WriteCommand(uchar command)//
(0078) {
(0079) setRS;
013C 9AD9 SBI 0x1B,1
(0080) send_8bit(0xf8);
013D EF08 LDI R16,0xF8
013E DFCC RCALL _send_8bit
(0081) send_8bit(command&0xf0);
013F 2F04 MOV R16,R20
0140 7F00 ANDI R16,0xF0
0141 DFC9 RCALL _send_8bit
(0082) send_8bit(command<<4);
0142 2F04 MOV R16,R20
0143 700F ANDI R16,0xF
0144 9502 SWAP R16
0145 DFC5 RCALL _send_8bit
(0083) clearRS;
0146 98D9 CBI 0x1B,1
0147 940E053D CALL pop_gset1
0149 9508 RET
_guangbiao:
x --> R20
014A 940E053A CALL push_gset1
014C 2F40 MOV R20,R16
(0084) }
(0085) //光标开关,1开,0关
(0086) void guangbiao(uchar x) //
(0087) {
(0088) if(x==1) WriteCommand(0x0c|0x03);
014D 3041 CPI R20,1
014E F419 BNE 0x0152
014F E00F LDI R16,0xF
0150 DFE8 RCALL _WriteCommand
0151 C002 RJMP 0x0154
(0089) else WriteCommand(0x0c);
0152 E00C LDI R16,0xC
0153 DFE5 RCALL _WriteCommand
0154 940E053D CALL pop_gset1
0156 9508 RET
_Set_display_Adress:
address --> R20
x --> R22
y --> R20
0157 940E0538 CALL push_gset2
0159 2F62 MOV R22,R18
015A 2F40 MOV R20,R16
(0090) }
(0091)
(0092) // 设置显示坐标:y行,x列
(0093) void Set_display_Adress(uchar y,uchar x)//
(0094) {
(0095) uchar address;
(0096) switch(y)
015B 2755 CLR R21
015C 3040 CPI R20,0
015D 0745 CPC R20,R21
015E F069 BEQ 0x016C
015F 3041 CPI R20,1
0160 E0E0 LDI R30,0
0161 075E CPC R21,R30
0162 F061 BEQ 0x016F
0163 3042 CPI R20,2
0164 E0E0 LDI R30,0
0165 075E CPC R21,R30
0166 F059 BEQ 0x0172
0167 3043 CPI R20,3
0168 E0E0 LDI R30,0
0169 075E CPC R21,R30
016A F051 BEQ 0x0175
016B C00B RJMP 0x0177
(0097) {
(0098) case 0:
(0099) address=0x80+x;
016C 2F46 MOV R20,R22
016D 5840 SUBI R20,0x80
(0100) break;
016E C008 RJMP 0x0177
(0101) case 1:
(0102) address=0x90+x;
016F 2F46 MOV R20,R22
0170 5740 SUBI R20,0x70
(0103) break;
0171 C005 RJMP 0x0177
(0104) case 2:
(0105) address=0x88+x;
0172 2F46 MOV R20,R22
0173 5748 SUBI R20,0x78
(0106) break;
0174 C002 RJMP 0x0177
(0107) case 3:
(0108) address=0x98+x;
0175 2F46 MOV R20,R22
0176 5648 SUBI R20,0x68
(0109) break;
(0110) }
(0111) WriteCommand(address);
0177 2F04 MOV R16,R20
0178 DFC0 RCALL _WriteCommand
0179 940E0526 CALL pop_gset2
017B 9508 RET
_display_String:
i --> R20
s --> R22
x --> R10
y --> R12
017C 940E0532 CALL push_gset5
017E 2EA2 MOV R10,R18
017F 2EC0 MOV R12,R16
0180 856A LDD R22,Y+10
0181 857B LDD R23,Y+11
(0112) }
(0113) //显示字符串
(0114) void display_String(uchar y,uchar x,uchar *s) //
(0115) {
(0116) uchar i=0;
0182 2744 CLR R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -