📄 rfidsys.lst
字号:
(0072) #ifndef LCD12864_ST7920_H
(0073) #define LCD12864_ST7920_H
(0074)
(0075) #include "D:\Headers\CmmIcc.h"
(0076)
(0077) void SPI_init()
(0078) {
(0079) DDRB |= 0xB0;
_SPI_init:
028F B387 IN R24,0x17
0290 6B80 ORI R24,0xB0
0291 BB87 OUT 0x17,R24
(0080) //DDRB |= 0x0E;
(0081) SPCR = 0x50; //setup SPI
0292 E580 LDI R24,0x50
0293 B98D OUT 0x0D,R24
(0082) SPSR = 0x01; //setup SPI
0294 E081 LDI R24,1
0295 B98E OUT 0x0E,R24
(0083) SEI();
0296 9478 BSET 7
0297 9508 RET
(0084) }
(0085)
(0086) void lcd_wrByte(uint8 data)
(0087) {
(0088) SPDR = data;
_lcd_wrByte:
data --> R16
0298 B90F OUT 0x0F,R16
(0089) while ((SPSR & 0x80) == 0);
0299 9B77 SBIS 0x0E,7
029A CFFE RJMP 0x0299
029B 9508 RET
_lcd_wrCmd:
LC --> R20
HC --> R22
029C 940E065C CALL push_gset2
029E 2F42 MOV R20,R18
029F 2F60 MOV R22,R16
(0090) }
(0091)
(0092) void lcd_wrCmd(uint8 HC,uint8 LC)
(0093) {
(0094) lcd_wrByte(0xF8);
02A0 EF08 LDI R16,0xF8
02A1 DFF6 RCALL _lcd_wrByte
(0095) lcd_wrByte(HC); //传输高四位
02A2 2F06 MOV R16,R22
02A3 DFF4 RCALL _lcd_wrByte
(0096) lcd_wrByte(LC); //传输低四位
02A4 2F04 MOV R16,R20
02A5 DFF2 RCALL _lcd_wrByte
02A6 940E064A CALL pop_gset2
02A8 9508 RET
_lcd_wrDat:
LD --> R20
HD --> R22
02A9 940E065C CALL push_gset2
02AB 2F42 MOV R20,R18
02AC 2F60 MOV R22,R16
(0097) }
(0098)
(0099) void lcd_wrDat(uint8 HD,uint8 LD)
(0100) {
(0101) lcd_wrByte(0xFA);
02AD EF0A LDI R16,0xFA
02AE DFE9 RCALL _lcd_wrByte
(0102) lcd_wrByte(HD); //传输高四位
02AF 2F06 MOV R16,R22
02B0 DFE7 RCALL _lcd_wrByte
(0103) lcd_wrByte(LD); //传输低四位
02B1 2F04 MOV R16,R20
02B2 DFE5 RCALL _lcd_wrByte
02B3 940E064A CALL pop_gset2
02B5 9508 RET
_lcd_set_xy:
adr --> R20
y --> R22
x --> R20
02B6 940E065C CALL push_gset2
02B8 2F62 MOV R22,R18
02B9 2F40 MOV R20,R16
(0104) }
(0105)
(0106) /*
(0107) x表示在第几行显示,y表示在第几列显示
(0108) */
(0109) void lcd_set_xy(uint8 x,uint8 y)
(0110) {
(0111) uint8 adr;
(0112)
(0113) switch(x)
02BA 2755 CLR R21
02BB 3041 CPI R20,1
02BC E0E0 LDI R30,0
02BD 075E CPC R21,R30
02BE F069 BEQ 0x02CC
02BF 3042 CPI R20,2
02C0 E0E0 LDI R30,0
02C1 075E CPC R21,R30
02C2 F061 BEQ 0x02CF
02C3 3043 CPI R20,3
02C4 E0E0 LDI R30,0
02C5 075E CPC R21,R30
02C6 F059 BEQ 0x02D2
02C7 3044 CPI R20,4
02C8 E0E0 LDI R30,0
02C9 075E CPC R21,R30
02CA F051 BEQ 0x02D5
02CB C00B RJMP 0x02D7
(0114) {
(0115) case 1: adr = 0x7F + y;
02CC 2F46 MOV R20,R22
02CD 5841 SUBI R20,0x81
(0116) break; //在第1行y列显示
02CE C008 RJMP 0x02D7
(0117) case 2: adr = 0x8F + y;
02CF 2F46 MOV R20,R22
02D0 5741 SUBI R20,0x71
(0118) break; //在第2行y列显示
02D1 C005 RJMP 0x02D7
(0119) case 3: adr = 0x87 + y;
02D2 2F46 MOV R20,R22
02D3 5749 SUBI R20,0x79
(0120) break; //在第3行y列显示
02D4 C002 RJMP 0x02D7
(0121) case 4: adr = 0x97 + y;
02D5 2F46 MOV R20,R22
02D6 5649 SUBI R20,0x69
(0122) break; //在第4行y列显示
(0123) default: ;
(0124) }
(0125) lcd_wrCmd(adr&0xF0,(adr&0x0F)<<4);
02D7 2F24 MOV R18,R20
02D8 702F ANDI R18,0xF
02D9 702F ANDI R18,0xF
02DA 9522 SWAP R18
02DB 2F04 MOV R16,R20
02DC 7F00 ANDI R16,0xF0
02DD DFBE RCALL _lcd_wrCmd
02DE 940E064A CALL pop_gset2
02E0 9508 RET
_lcd_putc:
ch --> Y+4
y --> R22
x --> R20
02E1 940E065C CALL push_gset2
02E3 2F62 MOV R22,R18
02E4 2F40 MOV R20,R16
(0126) }
(0127)
(0128) void lcd_putc(uint8 x,uint8 y,uint8 ch)
(0129) {
(0130) lcd_set_xy(x,y);
02E5 2F26 MOV R18,R22
02E6 2F04 MOV R16,R20
02E7 DFCE RCALL _lcd_set_xy
(0131) delay50us(20);
02E8 E104 LDI R16,0x14
02E9 E010 LDI R17,0
02EA DF7C RCALL _delay50us
(0132) //delay50us(30);
(0133) lcd_wrDat(ch&0xF0,(ch&0x0F)<<4);
02EB 812C LDD R18,Y+4
02EC 702F ANDI R18,0xF
02ED 702F ANDI R18,0xF
02EE 9522 SWAP R18
02EF 810C LDD R16,Y+4
02F0 7F00 ANDI R16,0xF0
02F1 DFB7 RCALL _lcd_wrDat
02F2 940E064A CALL pop_gset2
02F4 9508 RET
_lcd_putd0:
i --> R20
length --> Y+9
dat --> Y+5
y --> R22
x --> R20
02F5 940E065C CALL push_gset2
02F7 2F62 MOV R22,R18
02F8 2F40 MOV R20,R16
02F9 9721 SBIW R28,1
(0134) }
(0135)
(0136) void lcd_putd0(uint8 x,uint8 y,uint32 dat,uint8 length)
(0137) {
(0138) sint8 i;
(0139)
(0140) speaData(dat,length);
02FA 8409 LDD R0,Y+9
02FB 8208 STD Y+0,R0
02FC 01FE MOVW R30,R28
02FD 8105 LDD R16,Z+5
02FE 8116 LDD R17,Z+6
02FF 8127 LDD R18,Z+7
0300 8530 LDD R19,Z+8
0301 DDDE RCALL _speaData
(0141) lcd_set_xy(x,y);
0302 2F26 MOV R18,R22
0303 2F04 MOV R16,R20
0304 DFB1 RCALL _lcd_set_xy
(0142) delay50us(40);
0305 E208 LDI R16,0x28
0306 E010 LDI R17,0
0307 DF5F RCALL _delay50us
(0143) //delay50us(60);
(0144) for(i=length-1;i>=0;i--)
0308 8549 LDD R20,Y+9
0309 5041 SUBI R20,1
030A C01E RJMP 0x0329
(0145) {
(0146) lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );
030B EF82 LDI R24,0xF2
030C E091 LDI R25,1
030D 2FE4 MOV R30,R20
030E 27FF CLR R31
030F FDE7 SBRC R30,7
0310 95F0 COM R31
0311 0FE8 ADD R30,R24
0312 1FF9 ADC R31,R25
0313 8180 LDD R24,Z+0
0314 2799 CLR R25
0315 96C0 ADIW R24,0x30
0316 2F28 MOV R18,R24
0317 702F ANDI R18,0xF
0318 7030 ANDI R19,0
0319 0F22 LSL R18
031A 1F33 ROL R19
031B 0F22 LSL R18
031C 1F33 ROL R19
031D 0F22 LSL R18
031E 1F33 ROL R19
031F 0F22 LSL R18
0320 1F33 ROL R19
0321 2F08 MOV R16,R24
0322 7F00 ANDI R16,0xF0
0323 7010 ANDI R17,0
0324 DF84 RCALL _lcd_wrDat
(0147) delay50us(40);
0325 E208 LDI R16,0x28
0326 E010 LDI R17,0
0327 DF3F RCALL _delay50us
0328 954A DEC R20
0329 3040 CPI R20,0
032A F704 BGE 0x030B
032B 9621 ADIW R28,1
032C 940E064A CALL pop_gset2
032E 9508 RET
_lcd_putd:
effectLen --> R12
i --> R10
length --> Y+15
dat --> Y+11
y --> R14
x --> R10
032F 940E0656 CALL push_gset5
0331 2EE2 MOV R14,R18
0332 2EA0 MOV R10,R16
0333 9721 SBIW R28,1
(0148) //delay50us(60);
(0149) }
(0150) }
(0151)
(0152) void lcd_putd(uint8 x,uint8 y,uint32 dat,uint8 length)
(0153) {
(0154) sint8 i;
(0155) sint8 effectLen;
(0156)
(0157) if(dat>999999)
0334 E34F LDI R20,0x3F
0335 E452 LDI R21,0x42
0336 E06F LDI R22,0xF
0337 E070 LDI R23,0
0338 01FE MOVW R30,R28
0339 8423 LDD R2,Z+11
033A 8434 LDD R3,Z+12
033B 8445 LDD R4,Z+13
033C 8456 LDD R5,Z+14
033D 1542 CP R20,R2
033E 0553 CPC R21,R3
033F 0564 CPC R22,R4
0340 0575 CPC R23,R5
0341 F418 BCC 0x0345
(0158) effectLen=7;
0342 E087 LDI R24,7
0343 2EC8 MOV R12,R24
0344 C057 RJMP 0x039C
(0159) else if(dat>99999)
0345 E94F LDI R20,0x9F
0346 E856 LDI R21,0x86
0347 E061 LDI R22,1
0348 E070 LDI R23,0
0349 01FE MOVW R30,R28
034A 8423 LDD R2,Z+11
034B 8434 LDD R3,Z+12
034C 8445 LDD R4,Z+13
034D 8456 LDD R5,Z+14
034E 1542 CP R20,R2
034F 0553 CPC R21,R3
0350 0564 CPC R22,R4
0351 0575 CPC R23,R5
0352 F418 BCC 0x0356
(0160) effectLen=6;
0353 E086 LDI R24,6
0354 2EC8 MOV R12,R24
0355 C046 RJMP 0x039C
(0161) else if(dat>9999)
0356 E04F LDI R20,0xF
0357 E257 LDI R21,0x27
0358 E060 LDI R22,0
0359 E070 LDI R23,0
035A 01FE MOVW R30,R28
035B 8423 LDD R2,Z+11
035C 8434 LDD R3,Z+12
035D 8445 LDD R4,Z+13
035E 8456 LDD R5,Z+14
035F 1542 CP R20,R2
0360 0553 CPC R21,R3
0361 0564 CPC R22,R4
0362 0575 CPC R23,R5
0363 F418 BCC 0x0367
(0162) effectLen=5;
0364 E085 LDI R24,5
0365 2EC8 MOV R12,R24
0366 C035 RJMP 0x039C
(0163) else if(dat>999)
0367 EE47 LDI R20,0xE7
0368 E053 LDI R21,3
0369 E060 LDI R22,0
036A E070 LDI R23,0
036B 01FE MOVW R30,R28
036C 8423 LDD R2,Z+11
036D 8434 LDD R3,Z+12
036E 8445 LDD R4,Z+13
036F 8456 LDD R5,Z+14
0370 1542 CP R20,R2
0371 0553 CPC R21,R3
0372 0564 CPC R22,R4
0373 0575 CPC R23,R5
0374 F418 BCC 0x0378
(0164) effectLen=4;
0375 E084 LDI R24,4
0376 2EC8 MOV R12,R24
0377 C024 RJMP 0x039C
(0165) else if(dat>99)
0378 E643 LDI R20,0x63
0379 E050 LDI R21,0
037A E060 LDI R22,0
037B E070 LDI R23,0
037C 01FE MOVW R30,R28
037D 8423 LDD R2,Z+11
037E 8434 LDD R3,Z+12
037F 8445 LDD R4,Z+13
0380 8456 LDD R5,Z+14
0381 1542 CP R20,R2
0382 0553 CPC R21,R3
0383 0564 CPC R22,R4
0384 0575 CPC R23,R5
0385 F418 BCC 0x0389
(0166) effectLen=3;
0386 E083 LDI R24,3
0387 2EC8 MOV R12,R24
0388 C013 RJMP 0x039C
(0167) else if(dat>9)
0389 E049 LDI R20,0x9
038A E050 LDI R21,0
038B E060 LDI R22,0
038C E070 LDI R23,0
038D 01FE MOVW R30,R28
038E 8423 LDD R2,Z+11
038F 8434 LDD R3,Z+12
0390 8445 LDD R4,Z+13
0391 8456 LDD R5,Z+14
0392 1542 CP R20,R2
0393 0553 CPC R21,R3
0394 0564 CPC R22,R4
0395 0575 CPC R23,R5
0396 F418 BCC 0x039A
(0168) effectLen=2;
0397 E082 LDI R24,2
0398 2EC8 MOV R12,R24
0399 C002 RJMP 0x039C
(0169) else
(0170) effectLen=1;
039A 24CC CLR R12
039B 94C3 INC R12
(0171) speaData(dat,effectLen);
039C 82C8 STD Y+0,R12
039D 01FE MOVW R30,R28
039E 8503 LDD R16,Z+11
039F 8514 LDD R17,Z+12
03A0 8525 LDD R18,Z+13
03A1 8536 LDD R19,Z+14
03A2 DD3D RCALL _speaData
(0172)
(0173) lcd_set_xy(x,y);
03A3 2D2E MOV R18,R14
03A4 2D0A MOV R16,R10
03A5 DF10 RCALL _lcd_set_xy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -