📄 1.lst
字号:
__text_start:
__start:
01B2 E5CF LDI R28,0x5F
01B3 E0D4 LDI R29,4
01B4 BFCD OUT 0x3D,R28
01B5 BFDE OUT 0x3E,R29
01B6 51C0 SUBI R28,0x10
01B7 40D0 SBCI R29,0
01B8 EA0A LDI R16,0xAA
01B9 8308 STD Y+0,R16
01BA 2400 CLR R0
01BB E6E0 LDI R30,0x60
01BC E0F0 LDI R31,0
01BD E010 LDI R17,0
01BE 36E0 CPI R30,0x60
01BF 07F1 CPC R31,R17
01C0 F011 BEQ 0x01C3
01C1 9201 ST R0,Z+
01C2 CFFB RJMP 0x01BE
01C3 8300 STD Z+0,R16
01C4 E6E4 LDI R30,0x64
01C5 E0F3 LDI R31,3
01C6 E6A0 LDI R26,0x60
01C7 E0B0 LDI R27,0
01C8 E013 LDI R17,3
01C9 36E4 CPI R30,0x64
01CA 07F1 CPC R31,R17
01CB F021 BEQ 0x01D0
01CC 95C8 LPM
01CD 9631 ADIW R30,1
01CE 920D ST R0,X+
01CF CFF9 RJMP 0x01C9
01D0 940E031A CALL _main
_exit:
01D2 CFFF RJMP _exit
_Wleft_Cmad:
Lstate --> R20
Lcmd --> R16
01D3 940E037D CALL push_gset1
FILE: G:\test\lcd\1\1.c
(0001) //mega8515 lcd of ks108
(0002) //
(0003) //-----------------------------------------------------------------------------
(0004) // Includes
(0005) //-----------------------------------------------------------------------------
(0006) #include <iom16v.h>
(0007) #include <macros.h>
(0008) typedef unsigned char uchar;
(0009) typedef unsigned int uint;
(0010) //-----------------------------------------------------------------------------
(0011) // DB0-DB7=PA
(0012) // CSA = PC7 // Select left or right LCD.
(0013) // CSB = PC6 // Select left or right LCD.
(0014) // DI = PB2 // Select Rigster LCD.
(0015) // RW = PB1 // Read or Write LCD.
(0016) // EN = PB0;
(0017) //-----------------------------------------------------------------------------
(0018) /* 定义12864端口 */
(0019) //DATA_PORT=PORTA
(0020) #define DATA PORTA
(0021) //CSA=PC7
(0022) #define CSA_H asm("sbi 0x15,7")
(0023) #define CSA_L asm("cbi 0x15,7")
(0024) //CSB=PC6
(0025) #define CSB_H asm("sbi 0x15,6")
(0026) #define CSB_L asm("cbi 0x15,6")
(0027) //DI=PB2
(0028) #define DI_H asm("sbi 0x18,2")
(0029) #define DI_L asm("cbi 0x18,2")
(0030) //RW=PB1
(0031) #define RW_H asm("sbi 0x18,1")
(0032) #define RW_L asm("cbi 0x18,1")
(0033) //EN=PB0
(0034) #define EN_H asm("sbi 0x18,0")
(0035) #define EN_L asm("cbi 0x18,0")
(0036)
(0037) //-----------------------------------------------------------------------------
(0038) // Data for display.
(0039) //-----------------------------------------------------------------------------
(0040) const uchar Dig[] = {
(0041) 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, // 0
(0042) 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // 1
(0043) 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, // 2
(0044) 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, // 3
(0045) 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, // 4
(0046) 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, // 5
(0047) 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, // 6
(0048) 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // 7
(0049) 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, // 8
(0050) 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, // 9
(0051) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, // .[10]
(0052) 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00, // %[11]
(0053) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // [12]
(0054) };
(0055)
(0056) const uchar HZK[] = {
(0057) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x56,0xD4,0x54,0xD4,0x54,0x54, // 氧量:[0]
(0058) 0x54,0xD4,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0059) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7C,0x54,0x54,0x54,0x54,0x54,0x54,
(0060) 0x54,0x7E,0x44,0x40,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
(0061) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x15,0x15,0x15,0x7F,0x15,0x15,0x15,
(0062) 0x00,0x1F,0x20,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0063) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x50,0x5F,0x55,0x55,0x55,0x7F,0x55,0x55,
(0064) 0x55,0x5F,0x50,0x40,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
(0065) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC2,0x0C,0xC0,0x00,0xFC,0x94,0x94,0x94, // 温度:[4]
(0066) 0x94,0x94,0xFE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0067) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x28,0x28,0xF8,0xAA,0xAC,0xA8,
(0068) 0xF8,0x28,0x2C,0x08,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
(0069) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7C,0x03,0x40,0x7E,0x42,0x42,0x7E,0x42,
(0070) 0x7E,0x42,0x42,0x7E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0071) 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x0F,0x40,0x42,0x42,0x26,0x2A,0x12,0x2A,
(0072) 0x26,0x42,0x40,0x40,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
(0073) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0xFE,0x50,0x10,0x40,0x90, // 热电势[8]
(0074) 0x7E,0x10,0x10,0xF8,0x10,0x80,0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xFE,0x90,0x90,
(0075) 0x90,0x90,0xF8,0x10,0x00,0x00,0x48,0x48,0x48,0xFE,0x28,0x28,0x80,0x48,0xBE,0x08,
(0076) 0x08,0xF8,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
(0077) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x34,0x07,0x10,0x64,0x02,0x11,
(0078) 0x61,0x02,0x00,0x13,0x64,0x07,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x3F,0x44,0x44,
(0079) 0x44,0x44,0x47,0x40,0x70,0x00,0x40,0x44,0x45,0x25,0x14,0x0F,0x04,0x04,0x24,0x44,
(0080) 0x3E,0x04,0x01,0x03,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
(0081) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x56,0xD4,0x54,0xD4,0x54, // 氧电势[12]
(0082) 0x54,0x54,0xD4,0x04,0x04,0x00,0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xFE,0x90,0x90,
(0083) 0x90,0x90,0xF8,0x10,0x00,0x00,0x48,0x48,0x48,0xFE,0x28,0x28,0x80,0x48,0xBE,0x08,
(0084) 0x08,0xF8,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
(0085) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x15,0x15,0x15,0x7F,0x15,0x15,
(0086) 0x15,0x00,0x1F,0x20,0x40,0x78,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x3F,0x44,0x44,
(0087) 0x44,0x44,0x47,0x40,0x70,0x00,0x40,0x44,0x45,0x25,0x14,0x0F,0x04,0x04,0x24,0x44,
(0088) 0x3E,0x04,0x01,0x03,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
(0089) 0x00,0x00,0x18,0x24,0x24,0x18,0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x00,0x00, // C:[16]
(0090) 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,
(0091) 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80, // mv[17]
(0092) 0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00
(0093) };
(0094) //-----------------------------------------------------------------------------
(0095) // LCD:Write instraction code at left.
(0096) //-----------------------------------------------------------------------------
(0097) void Wleft_Cmad(unsigned char Lcmd)
(0098) {
(0099) unsigned char Lstate;
(0100) CSA_L; CSB_H;
01D5 98AF CBI 0x15,7
01D6 9AAE SBI 0x15,6
(0101) DI_L; RW_H;
01D7 98C2 CBI 0x18,2
01D8 9AC1 SBI 0x18,1
(0102) DDRA=0x00;//a口设为输入
01D9 2422 CLR R2
01DA BA2A OUT 0x1A,R2
(0103) PORTA=0x00;
01DB BA2B OUT 0x1B,R2
(0104) do
(0105) { EN_H;
01DC 9AC0 SBI 0x18,0
(0106) Lstate = PINA;
01DD B349 IN R20,0x19
(0107) EN_L;
01DE 98C0 CBI 0x18,0
(0108) }while(Lstate & 0x80) ;
01DF FD47 SBRC R20,7
01E0 CFFB RJMP 0x01DC
(0109) DDRA=0xff;
01E1 EF8F LDI R24,0xFF
01E2 BB8A OUT 0x1A,R24
(0110) RW_L;
01E3 98C1 CBI 0x18,1
(0111) DATA = Lcmd;
01E4 BB0B OUT 0x1B,R16
(0112) EN_H;
01E5 9AC0 SBI 0x18,0
(0113) EN_L;
01E6 98C0 CBI 0x18,0
01E7 940E0380 CALL pop_gset1
01E9 9508 RET
_Wleft_Data:
Lstate --> R20
Ldat --> R16
01EA 940E037D CALL push_gset1
(0114) }
(0115) //-----------------------------------------------------------------------------
(0116) // LCD:Write Data at left.
(0117) //-----------------------------------------------------------------------------
(0118) void Wleft_Data(unsigned char Ldat)
(0119) {
(0120) unsigned char Lstate;
(0121) CSA_L; CSB_H;
01EC 98AF CBI 0x15,7
01ED 9AAE SBI 0x15,6
(0122) DI_L;
01EE 98C2 CBI 0x18,2
(0123) RW_H;
01EF 9AC1 SBI 0x18,1
(0124) DDRA=0x00;
01F0 2422 CLR R2
01F1 BA2A OUT 0x1A,R2
(0125) PORTA=0x00;
01F2 BA2B OUT 0x1B,R2
(0126) do
(0127) { EN_H;
01F3 9AC0 SBI 0x18,0
(0128) Lstate = PINA;
01F4 B349 IN R20,0x19
(0129) EN_L;
01F5 98C0 CBI 0x18,0
(0130) }while(Lstate & 0x80);
01F6 FD47 SBRC R20,7
01F7 CFFB RJMP 0x01F3
(0131) DDRA=0xff;
01F8 EF8F LDI R24,0xFF
01F9 BB8A OUT 0x1A,R24
(0132) DI_H;
01FA 9AC2 SBI 0x18,2
(0133) RW_L;
01FB 98C1 CBI 0x18,1
(0134) DATA = Ldat;
01FC BB0B OUT 0x1B,R16
(0135) EN_H;
01FD 9AC0 SBI 0x18,0
(0136) EN_L;
01FE 98C0 CBI 0x18,0
01FF 940E0380 CALL pop_gset1
0201 9508 RET
_Wrigt_Cmad:
Lstate --> R20
Rcmd --> R16
0202 940E037D CALL push_gset1
(0137) }
(0138) //-----------------------------------------------------------------------------
(0139) // LCD:Write instraction code at Right.
(0140) //-----------------------------------------------------------------------------
(0141) void Wrigt_Cmad(unsigned char Rcmd)
(0142) {
(0143) unsigned char Lstate;
(0144) CSA_H; CSB_L;
0204 9AAF SBI 0x15,7
0205 98AE CBI 0x15,6
(0145) DI_L;
0206 98C2 CBI 0x18,2
(0146) RW_H;
0207 9AC1 SBI 0x18,1
(0147) DDRA=0x00;
0208 2422 CLR R2
0209 BA2A OUT 0x1A,R2
(0148) PORTA=0x00;
020A BA2B OUT 0x1B,R2
(0149) do
(0150) { EN_H;
020B 9AC0 SBI 0x18,0
(0151) Lstate = PINA;
020C B349 IN R20,0x19
(0152) EN_L;
020D 98C0 CBI 0x18,0
(0153) }while(Lstate & 0x80) ;
020E FD47 SBRC R20,7
020F CFFB RJMP 0x020B
(0154) DDRA=0xff;
0210 EF8F LDI R24,0xFF
0211 BB8A OUT 0x1A,R24
(0155) RW_L;
0212 98C1 CBI 0x18,1
(0156) DATA = Rcmd;
0213 BB0B OUT 0x1B,R16
(0157) EN_H;
0214 9AC0 SBI 0x18,0
(0158) EN_L;
0215 98C0 CBI 0x18,0
0216 940E0380 CALL pop_gset1
0218 9508 RET
_Wrigt_Data:
Lstate --> R20
Rdat --> R16
0219 940E037D CALL push_gset1
(0159) }
(0160) //-----------------------------------------------------------------------------
(0161) // LCD:Write Data at right.
(0162) //-----------------------------------------------------------------------------
(0163) void Wrigt_Data(unsigned char Rdat)
(0164) {
(0165) unsigned char Lstate;
(0166) CSA_H; CSB_L;
021B 9AAF SBI 0x15,7
021C 98AE CBI 0x15,6
(0167) DI_L;
021D 98C2 CBI 0x18,2
(0168) RW_H;
021E 9AC1 SBI 0x18,1
(0169) DDRA=0x00;
021F 2422 CLR R2
0220 BA2A OUT 0x1A,R2
(0170) PORTA=0x00;
0221 BA2B OUT 0x1B,R2
(0171) do
(0172) { EN_H;
0222 9AC0 SBI 0x18,0
(0173) Lstate = PINA;
0223 B349 IN R20,0x19
(0174) EN_L;
0224 98C0 CBI 0x18,0
(0175) }while(Lstate & 0x80);
0225 FD47 SBRC R20,7
0226 CFFB RJMP 0x0222
(0176) DDRA=0xff;
0227 EF8F LDI R24,0xFF
0228 BB8A OUT 0x1A,R24
(0177) DI_H;
0229 9AC2 SBI 0x18,2
(0178) RW_L;
022A 98C1 CBI 0x18,1
(0179) DATA = Rdat;
022B BB0B OUT 0x1B,R16
(0180) EN_H;
022C 9AC0 SBI 0x18,0
(0181) EN_L;
022D 98C0 CBI 0x18,0
022E 940E0380 CALL pop_gset1
0230 9508 RET
(0182) }
(0183) //-----------------------------------------------------------------------------
(0184) // LCD:Iniatlize(DIlcdsplay).
(0185) //-----------------------------------------------------------------------------
(0186) void LCD_INT(void)
(0187) {
(0188) Wleft_Cmad(0xc0); // Left display start line;
_LCD_INT:
0231 EC00 LDI R16,0xC0
0232 DFA0 RCALL _Wleft_Cmad
(0189) Wrigt_Cmad(0xc0); // Right display start line;
0233 EC00 LDI R16,0xC0
0234 DFCD RCALL _Wrigt_Cmad
(0190) Wleft_Cmad(0x3f); // Left display On;
0235 E30F LDI R16,0x3F
0236 DF9C RCALL _Wleft_Cmad
(0191) Wrigt_Cmad(0x3f); // Right display On;
0237 E30F LDI R16,0x3F
0238 DFC9 RCALL _Wrigt_Cmad
0239 9508 RET
_LCD_CLR:
adrPage --> R20
adrLaw --> R22
023A 940E037B CALL push_gset2
(0192) }
(0193) //-----------------------------------------------------------------------------
(0194) // LCD:Clear picture.
(0195) //-----------------------------------------------------------------------------
(0196) void LCD_CLR(void)
(0197) {
(0198) unsigned char adrPage,adrLaw;
(0199) for(adrPage = 0; adrPage < 8; adrPage++)
023C 2744 CLR R20
023D C014 RJMP 0x0252
(0200) { Wleft_Cmad(adrPage | 0xb8);
023E 2F04 MOV R16,R20
023F 6B08 ORI R16,0xB8
0240 DF92 RCALL _Wleft_Cmad
(0201) Wrigt_Cmad(adrPage | 0xb8);
0241 2F04 MOV R16,R20
0242 6B08 ORI R16,0xB8
0243 DFBE RCALL _Wrigt_Cmad
(0202) Wleft_Cmad(0x40);
0244 E400 LDI R16,0x40
0245 DF8D RCALL _Wleft_Cmad
(0203) Wrigt_Cmad(0x40);
0246 E400 LDI R16,0x40
0247 DFBA RCALL _Wrigt_Cmad
(0204) for(adrLaw = 0; adrLaw < 64; adrLaw++)
0248 2766 CLR R22
0249 C005 RJMP 0x024F
(0205) { Wleft_Data(0x00);
024A 2700 CLR R16
024B DF9E RCALL _Wleft_Data
(0206) Wrigt_Data(0x00);
024C 2700 CLR R16
024D DFCB RCALL _Wrigt_Data
024E 9563 INC R22
024F 3460 CPI R22,0x40
0250 F3C8 BCS 0x024A
0251 9543 INC R20
0252 3048 CPI R20,0x8
0253 F350 BCS 0x023E
0254 940E036F CALL pop_gset2
0256 9508 RET
_WriteHZ:
i --> R20
left --> R22
j --> R14
dptr --> R10
ColSum --> R12
adrColumn --> Y+12
adrPage --> Y+10
XH_HZ --> R20
0257 933A ST R19,-Y
0258 932A ST R18,-Y
0259 940E0375 CALL push_gset5
025B 2F40 MOV R20,R16
025C 84CE LDD R12,Y+14
(0207) }
(0208) }
(0209) }
(0210) //-----------------------------------------------------------------------------
(0211) // LCD:DIlcdsplay Chinese.
(0212) //-----------------------------------------------------------------------------
(0213) void WriteHZ(uchar XH_HZ,uchar adrPage,int adrColumn,uchar ColSum)
(0214) {
(0215) unsigned int dptr; // dptr_adderss for HZ code.
(0216) unsigned char left=0, i, j;
025D 2766 CLR R22
(0217) dptr = XH_HZ * 32;
025E E280 LDI R24,0x20
025F 9F84 MUL R24,R20
0260 0150 MOVW R10,R0
(0218) if((adrColumn-64) >= 0) left = 0; // left = 0:for right.
0261 858C LDD R24,Y+12
0262 859D LDD R25,Y+13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -