⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfidsys.lst

📁 读写器与射频卡通信的设计采用RC522射频读写芯片与射频卡进行通信
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -