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

📄 spilcd12864.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0058) ---------------------------------------------------
(0059) ---------------------------------------------------------------*/
(0060) 
(0061) #ifndef SPILCD_H
(0062) #define SPILCD_H
(0063) 
(0064) #include "D:\ICC_H\CmmIcc.h"
(0065) 
(0066) void SPI_init()
(0067) {
(0068) 	OUT_LCD_CS;
_SPI_init:
    0209 9ABB      SBI	0x17,3
(0069) 	SET_LCD_CS;
    020A 9AC3      SBI	0x18,3
(0070) 	DDRB |= 0xB0;
    020B B387      IN	R24,0x17
    020C 6B80      ORI	R24,0xB0
    020D BB87      OUT	0x17,R24
(0071) 	SPCR = 0x50;	//setup SPI
    020E E580      LDI	R24,0x50
    020F B98D      OUT	0x0D,R24
(0072) 	SPSR = 0x01;	//setup SPI
    0210 E081      LDI	R24,1
    0211 B98E      OUT	0x0E,R24
(0073) 	SEI();			
    0212 9478      BSET	7
    0213 9508      RET
(0074) }
(0075) 
(0076) void lcd_wrByte(uint8 data)
(0077) {  
(0078) 	SPDR = data;        
_lcd_wrByte:
  data                 --> R16
    0214 B90F      OUT	0x0F,R16
(0079) 	while ((SPSR & 0x80) == 0);  
    0215 9B77      SBIS	0x0E,7
    0216 CFFE      RJMP	0x0215
    0217 9508      RET
_lcd_wrCmd:
  LC                   --> R20
  HC                   --> R22
    0218 940E0489  CALL	push_gset2
    021A 2F42      MOV	R20,R18
    021B 2F60      MOV	R22,R16
(0080) }
(0081) 
(0082) void lcd_wrCmd(uint8 HC,uint8 LC)
(0083) {
(0084) 	lcd_wrByte(0xF8);
    021C EF08      LDI	R16,0xF8
    021D DFF6      RCALL	_lcd_wrByte
(0085) 	lcd_wrByte(HC);		//传输高四位 
    021E 2F06      MOV	R16,R22
    021F DFF4      RCALL	_lcd_wrByte
(0086) 	lcd_wrByte(LC);		//传输低四位
    0220 2F04      MOV	R16,R20
    0221 DFF2      RCALL	_lcd_wrByte
    0222 940E0477  CALL	pop_gset2
    0224 9508      RET
_lcd_wrDat:
  LD                   --> R20
  HD                   --> R22
    0225 940E0489  CALL	push_gset2
    0227 2F42      MOV	R20,R18
    0228 2F60      MOV	R22,R16
(0087) }
(0088) 
(0089) void lcd_wrDat(uint8 HD,uint8 LD)
(0090) {
(0091) 	lcd_wrByte(0xFA);
    0229 EF0A      LDI	R16,0xFA
    022A DFE9      RCALL	_lcd_wrByte
(0092) 	lcd_wrByte(HD);		//传输高四位
    022B 2F06      MOV	R16,R22
    022C DFE7      RCALL	_lcd_wrByte
(0093) 	lcd_wrByte(LD);		//传输低四位
    022D 2F04      MOV	R16,R20
    022E DFE5      RCALL	_lcd_wrByte
    022F 940E0477  CALL	pop_gset2
    0231 9508      RET
_lcd_set_xy:
  adr                  --> R20
  y                    --> R22
  x                    --> R20
    0232 940E0489  CALL	push_gset2
    0234 2F62      MOV	R22,R18
    0235 2F40      MOV	R20,R16
(0094) } 
(0095) 
(0096) /*
(0097) x表示在第几行显示,y表示在第几列显示
(0098) */
(0099) void lcd_set_xy(uint8 x,uint8 y ) 
(0100) {
(0101) 	uint8 adr;
(0102) 	switch(x)
    0236 2755      CLR	R21
    0237 3041      CPI	R20,1
    0238 E0E0      LDI	R30,0
    0239 075E      CPC	R21,R30
    023A F069      BEQ	0x0248
    023B 3042      CPI	R20,2
    023C E0E0      LDI	R30,0
    023D 075E      CPC	R21,R30
    023E F061      BEQ	0x024B
    023F 3043      CPI	R20,3
    0240 E0E0      LDI	R30,0
    0241 075E      CPC	R21,R30
    0242 F059      BEQ	0x024E
    0243 3044      CPI	R20,4
    0244 E0E0      LDI	R30,0
    0245 075E      CPC	R21,R30
    0246 F051      BEQ	0x0251
    0247 C00B      RJMP	0x0253
(0103) 	{
(0104) 	case 1: adr = 0x7F + y;
    0248 2F46      MOV	R20,R22
    0249 5841      SUBI	R20,0x81
(0105) 		break;		//在第1行y列显示
    024A C008      RJMP	0x0253
(0106) 	case 2: adr = 0x8F + y;
    024B 2F46      MOV	R20,R22
    024C 5741      SUBI	R20,0x71
(0107) 		break;		//在第2行y列显示
    024D C005      RJMP	0x0253
(0108) 	case 3: adr = 0x87 + y;
    024E 2F46      MOV	R20,R22
    024F 5749      SUBI	R20,0x79
(0109) 		break;		//在第3行y列显示
    0250 C002      RJMP	0x0253
(0110) 	case 4: adr = 0x97 + y;
    0251 2F46      MOV	R20,R22
    0252 5649      SUBI	R20,0x69
(0111) 		break;		//在第3行y列显示
(0112) 	default:		;
(0113) 	}
(0114) 	lcd_wrCmd(adr&0xF0,(adr&0x0F)<<4);
    0253 2F24      MOV	R18,R20
    0254 702F      ANDI	R18,0xF
    0255 702F      ANDI	R18,0xF
    0256 9522      SWAP	R18
    0257 2F04      MOV	R16,R20
    0258 7F00      ANDI	R16,0xF0
    0259 DFBE      RCALL	_lcd_wrCmd
    025A 940E0477  CALL	pop_gset2
    025C 9508      RET
_lcd_putc:
  ch                   --> Y+4
  y                    --> R22
  x                    --> R20
    025D 940E0489  CALL	push_gset2
    025F 2F62      MOV	R22,R18
    0260 2F40      MOV	R20,R16
(0115) }
(0116) 
(0117) void lcd_putc(uint8 x,uint8 y,uint8 ch)
(0118) {
(0119) 	lcd_set_xy(x,y);
    0261 2F26      MOV	R18,R22
    0262 2F04      MOV	R16,R20
    0263 DFCE      RCALL	_lcd_set_xy
(0120) 	delay50us(20); 
    0264 E104      LDI	R16,0x14
    0265 E010      LDI	R17,0
    0266 DF7A      RCALL	_delay50us
(0121) 	lcd_wrDat(ch&0xF0,(ch&0x0F)<<4);
    0267 812C      LDD	R18,Y+4
    0268 702F      ANDI	R18,0xF
    0269 702F      ANDI	R18,0xF
    026A 9522      SWAP	R18
    026B 810C      LDD	R16,Y+4
    026C 7F00      ANDI	R16,0xF0
    026D DFB7      RCALL	_lcd_wrDat
    026E 940E0477  CALL	pop_gset2
    0270 9508      RET
_lcd_putd0:
  i                    --> R20
  length               --> Y+9
  dat                  --> Y+5
  y                    --> R22
  x                    --> R20
    0271 940E0489  CALL	push_gset2
    0273 2F62      MOV	R22,R18
    0274 2F40      MOV	R20,R16
    0275 9721      SBIW	R28,1
(0122) }
(0123) 
(0124) void lcd_putd0(uint8 x,uint8 y,uint32 dat,uint8 length)
(0125) {
(0126) 	sint8 i;
(0127) 
(0128) 	speaData(dat,length);
    0276 8409      LDD	R0,Y+9
    0277 8208      STD	Y+0,R0
    0278 01FE      MOVW	R30,R28
    0279 8105      LDD	R16,Z+5
    027A 8116      LDD	R17,Z+6
    027B 8127      LDD	R18,Z+7
    027C 8530      LDD	R19,Z+8
    027D DDDC      RCALL	_speaData
(0129) 	lcd_set_xy(x,y);
    027E 2F26      MOV	R18,R22
    027F 2F04      MOV	R16,R20
    0280 DFB1      RCALL	_lcd_set_xy
(0130) 	delay50us(40);
    0281 E208      LDI	R16,0x28
    0282 E010      LDI	R17,0
    0283 DF5D      RCALL	_delay50us
(0131) 	for(i=length-1;i>=0;i--)
    0284 8549      LDD	R20,Y+9
    0285 5041      SUBI	R20,1
    0286 C01E      RJMP	0x02A5
(0132) 	{
(0133) 		lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );
    0287 E78D      LDI	R24,0x7D
    0288 E090      LDI	R25,0
    0289 2FE4      MOV	R30,R20
    028A 27FF      CLR	R31
    028B FDE7      SBRC	R30,7
    028C 95F0      COM	R31
    028D 0FE8      ADD	R30,R24
    028E 1FF9      ADC	R31,R25
    028F 8180      LDD	R24,Z+0
    0290 2799      CLR	R25
    0291 96C0      ADIW	R24,0x30
    0292 2F28      MOV	R18,R24
    0293 702F      ANDI	R18,0xF
    0294 7030      ANDI	R19,0
    0295 0F22      LSL	R18
    0296 1F33      ROL	R19
    0297 0F22      LSL	R18
    0298 1F33      ROL	R19
    0299 0F22      LSL	R18
    029A 1F33      ROL	R19
    029B 0F22      LSL	R18
    029C 1F33      ROL	R19
    029D 2F08      MOV	R16,R24
    029E 7F00      ANDI	R16,0xF0
    029F 7010      ANDI	R17,0
    02A0 DF84      RCALL	_lcd_wrDat
(0134) 		delay50us(40); 
    02A1 E208      LDI	R16,0x28
    02A2 E010      LDI	R17,0
    02A3 DF3D      RCALL	_delay50us
    02A4 954A      DEC	R20
    02A5 3040      CPI	R20,0
    02A6 F704      BGE	0x0287
    02A7 9621      ADIW	R28,1
    02A8 940E0477  CALL	pop_gset2
    02AA 9508      RET
_lcd_putd:
  effectLen            --> R12
  i                    --> R10
  length               --> Y+15
  dat                  --> Y+11
  y                    --> R14
  x                    --> R10
    02AB 940E0483  CALL	push_gset5
    02AD 2EE2      MOV	R14,R18
    02AE 2EA0      MOV	R10,R16
    02AF 9721      SBIW	R28,1
(0135) 	}
(0136) }
(0137) 
(0138) void lcd_putd(uint8 x,uint8 y,uint32 dat,uint8 length)
(0139) {
(0140) 	sint8 i;
(0141) 	sint8 effectLen;
(0142) 
(0143) 	if(dat>999999)
    02B0 E34F      LDI	R20,0x3F
    02B1 E452      LDI	R21,0x42
    02B2 E06F      LDI	R22,0xF
    02B3 E070      LDI	R23,0
    02B4 01FE      MOVW	R30,R28
    02B5 8423      LDD	R2,Z+11
    02B6 8434      LDD	R3,Z+12
    02B7 8445      LDD	R4,Z+13
    02B8 8456      LDD	R5,Z+14
    02B9 1542      CP	R20,R2
    02BA 0553      CPC	R21,R3
    02BB 0564      CPC	R22,R4
    02BC 0575      CPC	R23,R5
    02BD F418      BCC	0x02C1
(0144) 		effectLen=7;
    02BE E087      LDI	R24,7
    02BF 2EC8      MOV	R12,R24
    02C0 C057      RJMP	0x0318
(0145) 	else if(dat>99999)
    02C1 E94F      LDI	R20,0x9F
    02C2 E856      LDI	R21,0x86
    02C3 E061      LDI	R22,1
    02C4 E070      LDI	R23,0
    02C5 01FE      MOVW	R30,R28
    02C6 8423      LDD	R2,Z+11
    02C7 8434      LDD	R3,Z+12
    02C8 8445      LDD	R4,Z+13
    02C9 8456      LDD	R5,Z+14
    02CA 1542      CP	R20,R2
    02CB 0553      CPC	R21,R3
    02CC 0564      CPC	R22,R4
    02CD 0575      CPC	R23,R5
    02CE F418      BCC	0x02D2
(0146) 		effectLen=6;
    02CF E086      LDI	R24,6
    02D0 2EC8      MOV	R12,R24
    02D1 C046      RJMP	0x0318
(0147) 	else if(dat>9999)
    02D2 E04F      LDI	R20,0xF
    02D3 E257      LDI	R21,0x27
    02D4 E060      LDI	R22,0
    02D5 E070      LDI	R23,0
    02D6 01FE      MOVW	R30,R28
    02D7 8423      LDD	R2,Z+11
    02D8 8434      LDD	R3,Z+12
    02D9 8445      LDD	R4,Z+13
    02DA 8456      LDD	R5,Z+14
    02DB 1542      CP	R20,R2
    02DC 0553      CPC	R21,R3
    02DD 0564      CPC	R22,R4
    02DE 0575      CPC	R23,R5
    02DF F418      BCC	0x02E3
(0148) 		effectLen=5;
    02E0 E085      LDI	R24,5
    02E1 2EC8      MOV	R12,R24
    02E2 C035      RJMP	0x0318
(0149) 	else if(dat>999)
    02E3 EE47      LDI	R20,0xE7
    02E4 E053      LDI	R21,3
    02E5 E060      LDI	R22,0
    02E6 E070      LDI	R23,0
    02E7 01FE      MOVW	R30,R28
    02E8 8423      LDD	R2,Z+11
    02E9 8434      LDD	R3,Z+12
    02EA 8445      LDD	R4,Z+13
    02EB 8456      LDD	R5,Z+14
    02EC 1542      CP	R20,R2
    02ED 0553      CPC	R21,R3
    02EE 0564      CPC	R22,R4
    02EF 0575      CPC	R23,R5
    02F0 F418      BCC	0x02F4
(0150) 		effectLen=4;
    02F1 E084      LDI	R24,4
    02F2 2EC8      MOV	R12,R24
    02F3 C024      RJMP	0x0318
(0151) 	else if(dat>99)
    02F4 E643      LDI	R20,0x63
    02F5 E050      LDI	R21,0
    02F6 E060      LDI	R22,0
    02F7 E070      LDI	R23,0
    02F8 01FE      MOVW	R30,R28
    02F9 8423      LDD	R2,Z+11
    02FA 8434      LDD	R3,Z+12
    02FB 8445      LDD	R4,Z+13
    02FC 8456      LDD	R5,Z+14
    02FD 1542      CP	R20,R2
    02FE 0553      CPC	R21,R3
    02FF 0564      CPC	R22,R4
    0300 0575      CPC	R23,R5
    0301 F418      BCC	0x0305
(0152) 		effectLen=3;
    0302 E083      LDI	R24,3
    0303 2EC8      MOV	R12,R24
    0304 C013      RJMP	0x0318
(0153) 	else if(dat>9)
    0305 E049      LDI	R20,0x9
    0306 E050      LDI	R21,0
    0307 E060      LDI	R22,0
    0308 E070      LDI	R23,0
    0309 01FE      MOVW	R30,R28
    030A 8423      LDD	R2,Z+11
    030B 8434      LDD	R3,Z+12
    030C 8445      LDD	R4,Z+13
    030D 8456      LDD	R5,Z+14
    030E 1542      CP	R20,R2
    030F 0553      CPC	R21,R3
    0310 0564      CPC	R22,R4
    0311 0575      CPC	R23,R5
    0312 F418      BCC	0x0316
(0154) 		effectLen=2;
    0313 E082      LDI	R24,2
    0314 2EC8      MOV	R12,R24
    0315 C002      RJMP	0x0318
(0155) 	else
(0156) 		effectLen=1;
    0316 24CC      CLR	R12
    0317 94C3      INC	R12
(0157) 	speaData(dat,effectLen);
    0318 82C8      STD	Y+0,R12
    0319 01FE      MOVW	R30,R28

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -