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

📄 main.lst

📁 是一款开发板的外围电路试验程序(附有原理图)
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0159) void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0160) unsigned char SelscP,unsigned char num,unsigned char flag)//Add:显示数据的起始地址
(0161) { unsigned char i,m=0,dat;                                //xAdd,yAdd:显示位置
    0194 2744      CLR	R20
(0162)                                                           //SelscP:选择屏1,2,3
(0163)   OutI(SelscP,xAdd++); //x首地址                          //mun显示宽度,一般为16
    0195 842C      LDD	R2,Y+12
    0196 2D82      MOV	R24,R2
    0197 5F8F      SUBI	R24,0xFF
    0198 878C      STD	Y+12,R24
    0199 2D22      MOV	R18,R2
    019A 8908      LDD	R16,Y+16
    019B DF6F      RCALL	_OutI
(0164)   OutI(SelscP,yAdd); //y首地址							  //flag:是否清字位1不清
    019C 852E      LDD	R18,Y+14
    019D 8908      LDD	R16,Y+16
    019E DF6C      RCALL	_OutI
    019F C026      RJMP	0x01C6
(0165)   while(m<num+2)
(0166)   { for(i=0;i<num;i++)
    01A0 2766      CLR	R22
    01A1 C017      RJMP	0x01B9
(0167)     { if(flag==0) dat=0;
    01A2 20AA      TST	R10
    01A3 F411      BNE	0x01A6
    01A4 24EE      CLR	R14
    01A5 C00F      RJMP	0x01B5
(0168) 	  else dat=font[Add+i+m];
    01A6 2E26      MOV	R2,R22
    01A7 2433      CLR	R3
    01A8 85EA      LDD	R30,Y+10
    01A9 85FB      LDD	R31,Y+11
    01AA 0DE2      ADD	R30,R2
    01AB 1DF3      ADC	R31,R3
    01AC 2E24      MOV	R2,R20
    01AD 2433      CLR	R3
    01AE 0DE2      ADD	R30,R2
    01AF 1DF3      ADC	R31,R3
    01B0 E584      LDI	R24,0x54
    01B1 E090      LDI	R25,0
    01B2 0FE8      ADD	R30,R24
    01B3 1FF9      ADC	R31,R25
    01B4 90E4      LPM	R14,0(Z)
(0169) 	  OutD(SelscP,dat);
    01B5 2D2E      MOV	R18,R14
    01B6 8908      LDD	R16,Y+16
    01B7 DF82      RCALL	_OutD
    01B8 9563      INC	R22
    01B9 156C      CP	R22,R12
    01BA F338      BCS	0x01A2
(0170) 	}
(0171) 	OutI(SelscP,xAdd++); 
    01BB 842C      LDD	R2,Y+12
    01BC 2D82      MOV	R24,R2
    01BD 5F8F      SUBI	R24,0xFF
    01BE 878C      STD	Y+12,R24
    01BF 2D22      MOV	R18,R2
    01C0 8908      LDD	R16,Y+16
    01C1 DF49      RCALL	_OutI
(0172) 	OutI(SelscP,yAdd);
    01C2 852E      LDD	R18,Y+14
    01C3 8908      LDD	R16,Y+16
    01C4 DF46      RCALL	_OutI
(0173) 	m+=num;
    01C5 0D4C      ADD	R20,R12
    01C6 2D8C      MOV	R24,R12
    01C7 5F8E      SUBI	R24,0xFE
    01C8 1748      CP	R20,R24
    01C9 F2B0      BCS	0x01A0
    01CA 940E0265  CALL	pop_gset5
    01CC 9624      ADIW	R28,4
    01CD 9508      RET
_DisplayLine:
  p                    --> Y+8
  r                    --> R20
  l                    --> R22
  i                    --> R10
  flag                 --> R12
  line                 --> R14
  com                  --> R22
  Add                  --> Y+17
    01CE 940E0242  CALL	push_arg4
    01D0 940E0268  CALL	push_gset5
    01D2 2F62      MOV	R22,R18
    01D3 9727      SBIW	R28,7
    01D4 88ED      LDD	R14,Y+21
    01D5 88CF      LDD	R12,Y+23
(0174)    } 
(0175) }
(0176) 
(0177) void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag)
(0178) { unsigned char i,p,l,r;  	  			   			     //Add:数据起始位置
(0179)   		   												 //com:空位置个数,4字为满
(0180)   r=com&0x0f;											 //line: 显示行位置
    01D6 2F46      MOV	R20,R22
    01D7 704F      ANDI	R20,0xF
(0181)   l=com>>4;												 //flag:是否清字符1不清
    01D8 2F86      MOV	R24,R22
    01D9 9582      SWAP	R24
    01DA 708F      ANDI	R24,0xF
    01DB 2F68      MOV	R22,R24
(0182)   for(i=0;i<r;i++)
    01DC 24AA      CLR	R10
    01DD C01F      RJMP	0x01FD
(0183)     DisplayWord(Add+i*32,0xb8+(line%4)*2,0x40+(i+l)*16,(line/4)+1,16,flag);
    01DE 82CE      STD	Y+6,R12
    01DF E180      LDI	R24,0x10
    01E0 838C      STD	Y+4,R24
    01E1 2D8E      MOV	R24,R14
    01E2 9586      LSR	R24
    01E3 9586      LSR	R24
    01E4 5F8F      SUBI	R24,0xFF
    01E5 838A      STD	Y+2,R24
    01E6 2C2A      MOV	R2,R10
    01E7 0E26      ADD	R2,R22
    01E8 E180      LDI	R24,0x10
    01E9 9D82      MUL	R24,R2
    01EA 2D80      MOV	R24,R0
    01EB 5C80      SUBI	R24,0xC0
    01EC 8388      STD	Y+0,R24
    01ED E014      LDI	R17,4
    01EE 2D0E      MOV	R16,R14
    01EF 940E0247  CALL	mod8u
    01F1 E082      LDI	R24,2
    01F2 9F80      MUL	R24,R16
    01F3 2D20      MOV	R18,R0
    01F4 5428      SUBI	R18,0x48
    01F5 E280      LDI	R24,0x20
    01F6 9D8A      MUL	R24,R10
    01F7 8909      LDD	R16,Y+17
    01F8 891A      LDD	R17,Y+18
    01F9 0D00      ADD	R16,R0
    01FA 1D11      ADC	R17,R1
    01FB DF92      RCALL	_DisplayWord
    01FC 94A3      INC	R10
    01FD 16A4      CP	R10,R20
    01FE F2F8      BCS	0x01DE
    01FF 9627      ADIW	R28,7
    0200 940E0265  CALL	pop_gset5
    0202 9624      ADIW	R28,4
    0203 9508      RET
FILE: F:\工程文件\程序\12864\huomen.c
(0001) //ICC-AVR application builder : 2006-11-4 10:04:08
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include <stdlib.h>
(0008) 
(0009) #include "12864.h"
(0010) int i,j;
(0011) void port_init(void)
(0012) {
(0013)  PORTA = 0xFF;
_port_init:
    0204 EF8F      LDI	R24,0xFF
    0205 BB8B      OUT	0x1B,R24
(0014)  DDRA  = 0xFF;
    0206 BB8A      OUT	0x1A,R24
(0015)  PORTB = 0xFF;
    0207 BB88      OUT	0x18,R24
(0016)  DDRB  = 0xFF;
    0208 BB87      OUT	0x17,R24
(0017)  PORTC = 0xFF; //m103 output only
    0209 BB85      OUT	0x15,R24
(0018)  DDRC  = 0xFF;
    020A BB84      OUT	0x14,R24
(0019)  PORTD = 0xFF;
    020B BB82      OUT	0x12,R24
(0020)  DDRD  = 0xFF;
    020C BB81      OUT	0x11,R24
    020D 9508      RET
(0021) }
(0022) 
(0023) //call this routine to initialise all peripherals
(0024) void init_devices(void)
(0025) {
(0026)  //stop errant interrupts until set up
(0027)  CLI(); //disable all interrupts
_init_devices:
    020E 94F8      BCLR	7
(0028)  port_init();
    020F DFF4      RCALL	_port_init
(0029) 
(0030)  MCUCR = 0x00;
    0210 2422      CLR	R2
    0211 BE25      OUT	0x35,R2
(0031)  GICR  = 0x00;
    0212 BE2B      OUT	0x3B,R2
(0032)  TIMSK = 0x00; //timer interrupt sources
    0213 BE29      OUT	0x39,R2
(0033)  SEI(); //re-enable interrupts
    0214 9478      BSET	7
    0215 9508      RET
_main:
  k                    --> Y+4
    0216 9723      SBIW	R28,3
(0034)  //all peripherals are now initialised
(0035) }
(0036) 
(0037) //
(0038) void main(void)
(0039) {
(0040)  int k;
(0041)  init_devices();
    0217 DFF6      RCALL	_init_devices
(0042)  
(0043) 
(0044)   OutI(0,0x3e);
    0218 E32E      LDI	R18,0x3E
    0219 2700      CLR	R16
    021A DEF0      RCALL	_OutI
(0045)   OutI(0,0xb8);
    021B EB28      LDI	R18,0xB8
    021C 2700      CLR	R16
    021D DEED      RCALL	_OutI
(0046)   OutI(0,0x40);
    021E E420      LDI	R18,0x40
    021F 2700      CLR	R16
    0220 DEEA      RCALL	_OutI
(0047)   
(0048)   OutI(0,0xC0);
    0221 EC20      LDI	R18,0xC0
    0222 2700      CLR	R16
    0223 DEE7      RCALL	_OutI
(0049)   OutI(0,0x3f); //启动LCD
    0224 E32F      LDI	R18,0x3F
    0225 2700      CLR	R16
    0226 DEE4      RCALL	_OutI
(0050)   ClearDisplay();
    0227 DF4D      RCALL	_ClearDisplay
(0051)   ClearDisplay();
    0228 DF4C      RCALL	_ClearDisplay
(0052)  DisplayLine(0,0x04,0,1);
    0229 E081      LDI	R24,1
    022A 838A      STD	Y+2,R24
    022B 2422      CLR	R2
    022C 8228      STD	Y+0,R2
    022D E024      LDI	R18,4
    022E 2700      CLR	R16
    022F 2711      CLR	R17
    0230 DF9D      RCALL	_DisplayLine
(0053)  DisplayLine(128,0x04,4,1);
    0231 E081      LDI	R24,1
    0232 838A      STD	Y+2,R24
    0233 E084      LDI	R24,4
    0234 8388      STD	Y+0,R24
    0235 E024      LDI	R18,4
    0236 E800      LDI	R16,0x80
    0237 E010      LDI	R17,0
    0238 DF95      RCALL	_DisplayLine
(0054)  DisplayLine(256,0x04,1,1);
FILE: <library>
    0239 E081      LDI	R24,1
    023A 838A      STD	Y+2,R24
    023B 8388      STD	Y+0,R24
    023C E024      LDI	R18,4
    023D E000      LDI	R16,0
    023E E011      LDI	R17,1
    023F DF8E      RCALL	_DisplayLine
    0240 9623      ADIW	R28,3
    0241 9508      RET
push_arg4:
    0242 933A      ST	R19,-Y
    0243 932A      ST	R18,-Y
push_arg2:
    0244 931A      ST	R17,-Y
    0245 930A      ST	R16,-Y
    0246 9508      RET
mod8u:
    0247 9468      BSET	6
    0248 C001      RJMP	xdiv8u
div8u:
    0249 94E8      BCLR	6
xdiv8u:
    024A 932A      ST	R18,-Y
    024B 92FA      ST	R15,-Y
    024C 92EA      ST	R14,-Y
    024D 24FF      CLR	R15
    024E 24EE      CLR	R14
    024F E120      LDI	R18,0x10
    0250 0F00      LSL	R16
    0251 1CFF      ROL	R15
    0252 1CEE      ROL	R14
    0253 16E1      CP	R14,R17
    0254 F010      BCS	0x0257
    0255 1AE1      SUB	R14,R17
    0256 9503      INC	R16
    0257 952A      DEC	R18
    0258 F7B9      BNE	0x0250
    0259 F40E      BRTC	0x025B
    025A 2D0E      MOV	R16,R14
    025B 90E9      LD	R14,Y+
    025C 90F9      LD	R15,Y+
    025D 9129      LD	R18,Y+
    025E 9508      RET
pop_gset2:
    025F E0E2      LDI	R30,2
    0260 940C0274  JMP	pop
pop_gset3:
    0262 E0E4      LDI	R30,4
    0263 940C0274  JMP	pop
pop_gset5:
    0265 27EE      CLR	R30
    0266 940C0274  JMP	pop
push_gset5:
    0268 92FA      ST	R15,-Y
    0269 92EA      ST	R14,-Y
push_gset4:
    026A 92DA      ST	R13,-Y
    026B 92CA      ST	R12,-Y
push_gset3:
    026C 92BA      ST	R11,-Y
    026D 92AA      ST	R10,-Y
push_gset2:
    026E 937A      ST	R23,-Y
    026F 936A      ST	R22,-Y
push_gset1:
    0270 935A      ST	R21,-Y
    0271 934A      ST	R20,-Y
    0272 9508      RET
pop_gset1:
    0273 E0E1      LDI	R30,1
pop:
    0274 9149      LD	R20,Y+
    0275 9159      LD	R21,Y+
    0276 FDE0      SBRC	R30,0
    0277 9508      RET
    0278 9169      LD	R22,Y+
    0279 9179      LD	R23,Y+
    027A FDE1      SBRC	R30,1
    027B 9508      RET
    027C 90A9      LD	R10,Y+
    027D 90B9      LD	R11,Y+
    027E FDE2      SBRC	R30,2
    027F 9508      RET
    0280 90C9      LD	R12,Y+
    0281 90D9      LD	R13,Y+
    0282 FDE3      SBRC	R30,3
    0283 9508      RET
    0284 90E9      LD	R14,Y+
    0285 90F9      LD	R15,Y+
    0286 9508      RET

⌨️ 快捷键说明

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