📄 zhw.lst
字号:
__text_start:
__start:
01E3 EFCF LDI R28,0xFF
01E4 E1D0 LDI R29,0x10
01E5 BFCD OUT 0x3D,R28
01E6 BFDE OUT 0x3E,R29
01E7 51C0 SUBI R28,0x10
01E8 40D0 SBCI R29,0
01E9 EA0A LDI R16,0xAA
01EA 8308 STD Y+0,R16
01EB 2400 CLR R0
01EC E0EB LDI R30,0xB
01ED E0F1 LDI R31,1
01EE E011 LDI R17,1
01EF 31E1 CPI R30,0x11
01F0 07F1 CPC R31,R17
01F1 F011 BEQ 0x01F4
01F2 9201 ST R0,Z+
01F3 CFFB RJMP 0x01EF
01F4 8300 STD Z+0,R16
01F5 EBEA LDI R30,0xBA
01F6 E0F3 LDI R31,3
01F7 E0A0 LDI R26,0
01F8 E0B1 LDI R27,1
01F9 E013 LDI R17,3
01FA 3CE5 CPI R30,0xC5
01FB 07F1 CPC R31,R17
01FC F021 BEQ 0x0201
01FD 95C8 LPM
01FE 9631 ADIW R30,1
01FF 920D ST R0,X+
0200 CFF9 RJMP 0x01FA
0201 940E0204 CALL _main
_exit:
0203 CFFF RJMP _exit
FILE: D:\new_sd\main.c
(0001)
(0002) #include "GLO.h"
(0003)
(0004)
(0005)
(0006)
(0007) void main (void)
(0008) {
(0009) unsigned char i;
(0010)
(0011) //初始化
(0012) init_devices();
_main:
i --> Y+1
0204 940E03E0 CALL _init_devices
(0013)
(0014)
(0015) test(0,2);
0206 E022 LDI R18,2
0207 E030 LDI R19,0
0208 2700 CLR R16
0209 2711 CLR R17
020A 940E02F5 CALL _test
(0016) test(2,2);
020C E022 LDI R18,2
020D E030 LDI R19,0
020E E002 LDI R16,2
020F E010 LDI R17,0
0210 940E02F5 CALL _test
(0017)
(0018) USART_Transmit(0x55);
0212 E505 LDI R16,0x55
0213 E010 LDI R17,0
0214 940E0401 CALL _USART_Transmit
(0019) while(1)
0216 CFFF RJMP 0x0216
0217 9508 RET
_delayms:
i --> Y+4
j --> Y+0
m --> Y+12
0218 940E0BF5 CALL push_arg4
021A 940E0CFE CALL push_gset2
021C 9728 SBIW R28,0x8
FILE: D:\new_sd\LCD\LCD.C
(0001)
(0002) //作者:张文2008.08.07
(0003) //液晶显示问题的说明
(0004) //液晶显示的时候用到LCD_SHOW()就可以了,不过开SPCR = 0x50 使用后关SPCR = 0x54;
(0005) //液晶的尺寸是256*192的.
(0006) //void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
(0007) //page 为0 2 4 8 10对应的是行
(0008) //m 对应的是 0x10 -- 0x17 每一行对应的数据的开始地址
(0009) //n 对应的是 两个字节的数据中的一个 一个汉字是32*32 //n==0的时候显示前半个数据.n=8对应的是后半个数据
(0010) //data 对应的是显示的数据,在显示的时候用的是查表的方法。
(0011) #include <iom64v.h>
(0012) #include <macros.h>
(0013)
(0014) #include"lcd.h"
(0015) #define LCD_control PORTD
(0016) #define LCD_CS 6
(0017) #define LCD_RST 5
(0018) #define LCD_RS 4
(0019)
(0020) //-------------------------------------------------------------------------------
(0021) unsigned char date[11]={0};
(0022) //-------------------------------------------------------------------------------
(0023) //十进制数
(0024) //-------------------------------------------------------------------------------
(0025) const unsigned char data_hi[224]= { //0123456789.
(0026) 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
(0027) 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, //0
(0028) 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
(0029) 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, //1
(0030) 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
(0031) 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, //2
(0032) 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
(0033) 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, //3
(0034) 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
(0035) 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, //4
(0036) 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
(0037) 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, //5
(0038) 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
(0039) 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, //6
(0040) 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
(0041) 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, //7
(0042) 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
(0043) 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, //8
(0044) 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
(0045) 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, //9
(0046) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0047) 0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, //. 10
(0048) 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
(0049) 0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00, //v 11
(0050) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0051) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //12
(0052)
(0053) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //"-" //13
(0054) 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
(0055)
(0056)
(0057)
(0058) };
(0059) //-------------------------------------------------------------------------------
(0060) // Delay Routine
(0061) //延时程序
(0062) //-------------------------------------------------------------------------------
(0063) void delayms(UINT32 m)
(0064) {
(0065) UINT32 j;
(0066) UINT32 i;
(0067) NOP();
021D 0000 NOP
(0068) for(i=0; i<m; i++)
021E E040 LDI R20,0
021F E050 LDI R21,0
0220 E060 LDI R22,0
0221 E070 LDI R23,0
0222 01FE MOVW R30,R28
0223 8344 STD Z+4,R20
0224 8355 STD Z+5,R21
0225 8366 STD Z+6,R22
0226 8377 STD Z+7,R23
0227 C03D RJMP 0x0265
(0069) for(j=0; j<109; j++)
0228 E040 LDI R20,0
0229 E050 LDI R21,0
022A E060 LDI R22,0
022B E070 LDI R23,0
022C 01FE MOVW R30,R28
022D 8340 STD Z+0,R20
022E 8351 STD Z+1,R21
022F 8362 STD Z+2,R22
0230 8373 STD Z+3,R23
0231 C013 RJMP 0x0245
(0070) NOP();
0232 0000 NOP
0233 E041 LDI R20,1
0234 E050 LDI R21,0
0235 E060 LDI R22,0
0236 E070 LDI R23,0
0237 01FE MOVW R30,R28
0238 8020 LDD R2,Z+0
0239 8031 LDD R3,Z+1
023A 8042 LDD R4,Z+2
023B 8053 LDD R5,Z+3
023C 0E24 ADD R2,R20
023D 1E35 ADC R3,R21
023E 1E46 ADC R4,R22
023F 1E57 ADC R5,R23
0240 01FE MOVW R30,R28
0241 8220 STD Z+0,R2
0242 8231 STD Z+1,R3
0243 8242 STD Z+2,R4
0244 8253 STD Z+3,R5
0245 E64D LDI R20,0x6D
0246 E050 LDI R21,0
0247 E060 LDI R22,0
0248 E070 LDI R23,0
0249 01FE MOVW R30,R28
024A 8020 LDD R2,Z+0
024B 8031 LDD R3,Z+1
024C 8042 LDD R4,Z+2
024D 8053 LDD R5,Z+3
024E 1624 CP R2,R20
024F 0635 CPC R3,R21
0250 0646 CPC R4,R22
0251 0657 CPC R5,R23
0252 F2F8 BCS 0x0232
0253 E041 LDI R20,1
0254 E050 LDI R21,0
0255 E060 LDI R22,0
0256 E070 LDI R23,0
0257 01FE MOVW R30,R28
0258 8024 LDD R2,Z+4
0259 8035 LDD R3,Z+5
025A 8046 LDD R4,Z+6
025B 8057 LDD R5,Z+7
025C 0E24 ADD R2,R20
025D 1E35 ADC R3,R21
025E 1E46 ADC R4,R22
025F 1E57 ADC R5,R23
0260 01FE MOVW R30,R28
0261 8224 STD Z+4,R2
0262 8235 STD Z+5,R3
0263 8246 STD Z+6,R4
0264 8257 STD Z+7,R5
0265 01FE MOVW R30,R28
0266 8424 LDD R2,Z+12
0267 8435 LDD R3,Z+13
0268 8446 LDD R4,Z+14
0269 8457 LDD R5,Z+15
026A 01FE MOVW R30,R28
026B 8064 LDD R6,Z+4
026C 8075 LDD R7,Z+5
026D 8086 LDD R8,Z+6
026E 8097 LDD R9,Z+7
026F 1462 CP R6,R2
0270 0473 CPC R7,R3
0271 0484 CPC R8,R4
0272 0495 CPC R9,R5
0273 F408 BCC 0x0275
0274 CFB3 RJMP 0x0228
0275 9628 ADIW R28,0x8
0276 940E0CEC CALL pop_gset2
0278 9624 ADIW R28,4
0279 9508 RET
_SdCmd:
Command --> R20
027A 940E0D00 CALL push_gset1
027C 2F40 MOV R20,R16
(0071) }
(0072) //-------------------------------------------------------------------------------
(0073) // IO Routine
(0074) // LCD“命令字”发送
(0075) //-------------------------------------------------------------------------------
(0076) void SdCmd(UINT8 Command) // send command
(0077) {
(0078) SPI_SS |=1; //屏蔽3548
027D 9AC0 SBI 0x18,0
(0079) LCD_control &=~(1<<LCD_CS); // chip select
027E 9896 CBI 0x12,6
(0080) LCD_control &=~(1<<LCD_RS); // for command
027F 9894 CBI 0x12,4
(0081) SPI_SendByte(Command);
0280 2F04 MOV R16,R20
0281 2711 CLR R17
0282 940E0BF1 CALL _SPI_SendByte
(0082) LCD_control |=1<<LCD_CS; // chip select
0284 9A96 SBI 0x12,6
0285 940E0D03 CALL pop_gset1
0287 9508 RET
_SdData:
DData --> R20
0288 940E0D00 CALL push_gset1
028A 2F40 MOV R20,R16
(0083) }
(0084) //-------------------------------------------------------------------------------
(0085) //LCD 数据发送
(0086) //-------------------------------------------------------------------------------
(0087) void SdData(UINT8 DData) // send data
(0088) {
(0089) SPI_SS |=1; //屏蔽3548
028B 9AC0 SBI 0x18,0
(0090) LCD_control &=~(1<<LCD_CS); // chip select
028C 9896 CBI 0x12,6
(0091) LCD_control |=1<<LCD_RS; // for data
028D 9A94 SBI 0x12,4
(0092) SPI_SendByte(DData);
028E 2F04 MOV R16,R20
028F 2711 CLR R17
0290 940E0BF1 CALL _SPI_SendByte
(0093) LCD_control |=1<<LCD_CS; // chip select
0292 9A96 SBI 0x12,6
0293 940E0D03 CALL pop_gset1
0295 9508 RET
_LCDSHOW:
i --> R20
j --> R14
date --> R22
n --> R10
m --> R12
page --> Y+10
0296 940E0BF5 CALL push_arg4
0298 940E0CF8 CALL push_gset5
029A 2EC2 MOV R12,R18
029B 84AE LDD R10,Y+14
029C 8968 LDD R22,Y+16
(0094) }
(0095) //-------------------------------------------------------------------------------
(0096) //LCD 显示字符和数字
(0097) // void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
(0098) // LCDSHOW( page, 0x15, 8, 12);
(0099) // M () N
(0100) //-------------------------------------------------------------------------------
(0101) void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
(0102) {
(0103)
(0104) UINT8 i,j;
(0105) for(i=0;i<2;i++)
029D 2744 CLR R20
029E C030 RJMP 0x02CF
(0106) {
(0107) SdCmd(0xb0+i+page);
029F 2F04 MOV R16,R20
02A0 5500 SUBI R16,0x50
02A1 840A LDD R0,Y+10
02A2 0D00 ADD R16,R0
02A3 DFD6 RCALL _SdCmd
(0108) SdCmd(m);
02A4 2D0C MOV R16,R12
02A5 DFD4 RCALL _SdCmd
(0109) SdCmd(n);
02A6 2D0A MOV R16,R10
02A7 DFD2 RCALL _SdCmd
(0110) for(j=0;j<8;j++)
02A8 24EE CLR R14
02A9 C021 RJMP 0x02CB
(0111) {
(0112) SdData(data_hi[j+8*i+8*2*date]); //为什么要写两次呢? 0--7 +8*0
02AA E088 LDI R24,0x8
02AB 9F84 MUL R24,R20
02AC 2DEE MOV R30,R14
02AD 27FF CLR R31
02AE 0DE0 ADD R30,R0
02AF 1DF1 ADC R31,R1
02B0 E180 LDI R24,0x10
02B1 9F86 MUL R24,R22
02B2 0DE0 ADD R30,R0
02B3 1DF1 ADC R31,R1
02B4 E88C LDI R24,0x8C
02B5 E090 LDI R25,0
02B6 0FE8 ADD R30,R24
02B7 1FF9 ADC R31,R25
02B8 9104 LPM R16,0(Z)
02B9 DFCE RCALL _SdData
(0113) SdData(data_hi[j+8*i+8*2*date]); // 0-7 +8*1
02BA E088 LDI R24,0x8
02BB 9F84 MUL R24,R20
02BC 2DEE MOV R30,R14
02BD 27FF CLR R31
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -