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

📄 demoa-16sm.lst

📁 大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      DE EFCF      LDI	R28,0xFF
      DF E2D1      LDI	R29,0x21
      E0 BFCD      OUT	0x3D,R28
      E1 BFDE      OUT	0x3E,R29
      E2 51CE      SUBI	R28,0x1E
      E3 40D0      SBCI	R29,0
      E4 EA0A      LDI	R16,0xAA
      E5 8308      STD	Y+0,R16
      E6 2400      CLR	R0
      E7 E5E6      LDI	R30,0x56
      E8 E0F2      LDI	R31,2
      E9 E012      LDI	R17,2
      EA 36E1      CPI	R30,0x61
      EB 07F1      CPC	R31,R17
      EC F011      BEQ	0x00EF
      ED 9201      ST	R0,Z+
      EE CFFB      RJMP	0x00EA
      EF 8300      STD	Z+0,R16
      F0 E6E6      LDI	R30,0x66
      F1 E0F1      LDI	R31,1
      F2 E0A0      LDI	R26,0
      F3 E0B2      LDI	R27,2
      F4 E011      LDI	R17,1
      F5 E000      LDI	R16,0
      F6 BF0B      OUT	0x3B,R16
      F7 3BEC      CPI	R30,0xBC
      F8 07F1      CPC	R31,R17
      F9 F021      BEQ	0x00FE
      FA 95C8      LPM
      FB 9631      ADIW	R30,1
      FC 920D      ST	R0,X+
      FD CFF9      RJMP	0x00F7
      FE 940E 0101 CALL	_main
_exit:
     100 CFFF      RJMP	_exit
_main:
  a                    --> Y,+1
  array1               --> Y,+0
  jsave                --> Y,+1
  j                    --> Y,+1
  dark                 --> Y,+1
  pfin                 --> Y,+1
  data                 --> Y,+1
  i                    --> R10
  darkfg               --> R20
     101 972A      SBIW	R28,0xA
FILE: C:\+samples-16small\DEMOA-16sm\DEMOA-16sm.c
(0001) /*
(0002) Title:	DEMOA-16sm.c
(0003) Connection:
(0004) 	  Factory fixed setting:
(0005) 	  PORTA:
(0006) 	  		PA0-PA2 LCD control
(0007) 			PA3-PA7 4x7-segment display control
(0008) 			Drive LED group2 (the right group of LED)
(0009) 	  PORTB:
(0010) 	  		Shared by LCD and 4x7-segment displays
(0011) 	  		output 8-bit data to LCD or 8-bit data to 4x7-segment displays
(0012) 	  PORTC:
(0013) 	        shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
(0014) 			receive inputs from dipswitch, touch switches and buttons 				
(0015) 	  PORTD: 
(0016) 	  		Drive LED group1 (the left group of LED) 
(0017) Attention:
(0018) 	  1. J12 should be capped (connectted)
(0019) 	  2. J5 is the Jump for LCD back light power 	  
(0020) 
(0021) Operation:
(0022) 	  See the User Mannual, which is included in CD
(0023) */
(0024) 
(0025) #include <iom16v.h>
(0026) #include <macros.h>
(0027) #include <stdlib.h>
(0028) 
(0029) // external symbols defined in LCD-avr-sm.c
(0030) extern unsigned char lcd_enable, lcd_disable;
(0031) extern unsigned char in_instr_wr, in_data_wr;
(0032) extern unsigned char in_instr_rd, in_data_rd;
(0033) extern void wr_instruction(unsigned char instr);
(0034) extern void wr_data(unsigned char data);
(0035) extern int indexhead, indextail, indexcount;
(0036) extern int cursor_index;
(0037) extern unsigned char swin, swin2;
(0038) extern const char message1[];
(0039) extern const char message2[]; 
(0040) extern const char message3[];
(0041) extern const char message4[];
(0042) extern const char message5[];
(0043) extern const char message6[];
(0044) extern const char message7[];
(0045) extern const char message8[];
(0046) 
(0047) extern void port_init(void);
(0048) extern void WDT_off(void);
(0049) extern void lcd_delay(int count);
(0050) extern void ldelay(int ms);
(0051) extern void wr_instruction(unsigned char instr);
(0052) extern void wr_data(unsigned char data);
(0053) extern void wr_instruction2(unsigned char instr);
(0054) extern void wr_data2(unsigned char data);
(0055) extern void cursor_home(void);			
(0056) extern void cursor_line1(void);		  
(0057) extern void cursor_line2(void);		
(0058) extern void space(void);				  
(0059) extern void out_string(const char array[]); 
(0060) extern void lcd_on(void);
(0061) 
(0062) // External symboles defined in SegDisp-avr-fn.c
(0063) 
(0064) extern const char dig0, dig1, dig2, dig3, dot;
(0065) extern char segconv[];
(0066) extern unsigned char BCD0, BCD1, BCD2, BCD3;
(0067) extern int count;
(0068) 
(0069) //extern void port_init(void);
(0070) extern void delay(int count);
(0071) extern void BinToBCD(int data);
(0072) extern void dispseg(void);
(0073) 
(0074) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(0075) 
(0076) void main(void)
(0077) {
(0078)  unsigned char data, pfin, dark, darkfg=0xff;
     102 EF4F      LDI	R20,0xFF
(0079)  int i=0;
     103 24AA      CLR	R10
     104 24BB      CLR	R11
(0080)  unsigned char j, jsave, array1[10];
(0081)  int a;
(0082)  CLI();
     105 94F8      BCLR	7
(0083)  port_init();
     106 940E 018C CALL	_port_init
(0084)  WDT_off();
     108 940E 0194 CALL	_WDT_off
(0085)  ldelay(200);
     10A EC08      LDI	R16,0xC8
     10B E010      LDI	R17,0
     10C 940E 01A9 CALL	_ldelay
(0086)  lcd_on();
     10E 940E 025C CALL	_lcd_on
(0087)  PORTD=0x50;
     110 E580      LDI	R24,0x50
     111 BB82      OUT	0x12,R24
(0088)  ldelay(50);
     112 E302      LDI	R16,0x32
     113 E010      LDI	R17,0
     114 940E 01A9 CALL	_ldelay
(0089)  PORTD=0x05;
     116 E085      LDI	R24,5
     117 BB82      OUT	0x12,R24
(0090)  ldelay(50);
     118 E302      LDI	R16,0x32
     119 E010      LDI	R17,0
     11A 940E 01A9 CALL	_ldelay
(0091)  out_string(message1);
     11C EE04      LDI	R16,0xE4
     11D E010      LDI	R17,0
     11E 940E 0245 CALL	_out_string
(0092)  cursor_line2();
     120 940E 0236 CALL	_cursor_line2
(0093)  out_string(message2);
     122 EF03      LDI	R16,0xF3
     123 E010      LDI	R17,0
     124 940E 0245 CALL	_out_string
(0094)  PORTD=0x55;
     126 E585      LDI	R24,0x55
     127 BB82      OUT	0x12,R24
(0095)  PORTA=0xF8;
     128 EF88      LDI	R24,0xF8
     129 BB8B      OUT	0x1B,R24
(0096)  PORTB=0x00;
     12A 2422      CLR	R2
     12B BA28      OUT	0x18,R2
(0097)  ldelay(100);
     12C E604      LDI	R16,0x64
     12D E010      LDI	R17,0
     12E 940E 01A9 CALL	_ldelay
     130 C058      RJMP	0x0189
(0098) 
(0099)  while(1)
(0100)  {
(0101)   WDR();
     131 95A8      WDR
(0102)   swin=PINC&0x30;
     132 B383      IN	R24,0x13
     133 7380      ANDI	R24,0x30
     134 9380 0257 STS	swin,R24
(0103)   swin=(swin>>4)&0x03;
     136 9582      SWAP	R24
     137 708F      ANDI	R24,0xF
     138 7083      ANDI	R24,3
     139 9380 0257 STS	swin,R24
(0104)   if(swin2!=swin)
     13B 2E28      MOV	R2,R24
     13C 9030 0256 LDS	R3,swin2
     13E 1638      CP	R3,R24
     13F F409      BNE	0x0141
     140 C03F      RJMP	0x0180
(0105)     {
(0106) 	 swin2=swin;
     141 9220 0256 STS	swin2,R2
(0107)   	 if(swin==0x00)
     143 2388      TST	R24
     144 F469      BNE	0x0152
(0108)       {
(0109) 	  cursor_home();
     145 940E 0219 CALL	_cursor_home
(0110) 	  out_string(message1);
     147 EE04      LDI	R16,0xE4
     148 E010      LDI	R17,0
     149 940E 0245 CALL	_out_string
(0111)  	  cursor_line2();
     14B 940E 0236 CALL	_cursor_line2
(0112)  	  out_string(message2);
     14D EF03      LDI	R16,0xF3
     14E E010      LDI	R17,0
     14F 940E 0245 CALL	_out_string
(0113) 	  }
     151 C02E      RJMP	0x0180
(0114)   	 else if(swin==0x01)
     152 9180 0257 LDS	R24,swin
     154 3081      CPI	R24,1
     155 F469      BNE	0x0163
(0115)       {
(0116) 	  cursor_home();
     156 940E 0219 CALL	_cursor_home
(0117) 	  out_string(message3);
     158 E003      LDI	R16,3
     159 E011      LDI	R17,1
     15A 940E 0245 CALL	_out_string
(0118)  	  cursor_line2();
     15C 940E 0236 CALL	_cursor_line2
(0119)  	  out_string(message4);
     15E E103      LDI	R16,0x13
     15F E011      LDI	R17,1
     160 940E 0245 CALL	_out_string
(0120) 	  }
     162 C01D      RJMP	0x0180
(0121)      else if(swin==0x02)
     163 9180 0257 LDS	R24,swin
     165 3082      CPI	R24,2
     166 F469      BNE	0x0174
(0122)       {
(0123) 	  cursor_home();
     167 940E 0219 CALL	_cursor_home
(0124) 	  out_string(message5);
     169 E203      LDI	R16,0x23
     16A E011      LDI	R17,1
     16B 940E 0245 CALL	_out_string
(0125)  	  cursor_line2();
     16D 940E 0236 CALL	_cursor_line2
(0126)  	  out_string(message6);
     16F E302      LDI	R16,0x32
     170 E011      LDI	R17,1
     171 940E 0245 CALL	_out_string
(0127) 	  }
     173 C00C      RJMP	0x0180
(0128)      else
(0129)       {
(0130) 	  cursor_home();
     174 940E 0219 CALL	_cursor_home
(0131) 	  out_string(message7);
     176 E402      LDI	R16,0x42
     177 E011      LDI	R17,1
     178 940E 0245 CALL	_out_string
(0132)  	  cursor_line2();
     17A 940E 0236 CALL	_cursor_line2
(0133)  	  out_string(message8);
     17C E500      LDI	R16,0x50
     17D E011      LDI	R17,1
     17E 940E 0245 CALL	_out_string
(0134) 	  }		
(0135) 	}
(0136) 	swin=PINC;
     180 B223      IN	R2,0x13
     181 9220 0257 STS	swin,R2
(0137) 	BinToBCD(swin);
     183 2D02      MOV	R16,R2
     184 2711      CLR	R17
     185 940E 0318 CALL	_BinToBCD
(0138) 	dispseg();	
     187 940E 0362 CALL	_dispseg
     189 CFA7      RJMP	0x0131
     18A 962A      ADIW	R28,0xA
     18B 9508      RET
FILE: C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
(0001) // Title:	LCD-16sn.c
(0002) // 			Functon program for DEMOA-16sm utilizing LCD
(0003) 
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include <stdlib.h>
(0007) 
(0008) unsigned char lcd_enable = 0b00000001, lcd_disable = 0b11111110;
(0009) unsigned char in_instr_wr = 0b00000000, in_data_wr = 0b00000100;
(0010) unsigned char in_instr_rd = 0b00000010, in_data_rd = 0b00000110;
(0011) 
(0012) void wr_instruction(unsigned char instr);
(0013) void wr_data(unsigned char data);
(0014) 
(0015) int indexhead=0, indextail=0, indexcount;
(0016) int cursor_index=0;
(0017) 
(0018) 
(0019) const char message1[]= {"  Hello World!"};
(0020) const char message2[]= {"www.inovacs.com"}; 
(0021) const char message3[]= {" Happy New Year"};
(0022) const char message4[]= {" 2008 is coming"};
(0023) const char message5[]= {" Greeting From"};
(0024) const char message6[]= {"www.inovacs.com"};
(0025) const char message7[]= {"Contact Inova"};
(0026) const char message8[]= {"Tel:0592 5563570"};
(0027) 
(0028) void cursor_home(void);
(0029) void cursor_line1(void);
(0030) void cursor_line2(void);
(0031) void lcd_delay(int);
(0032) 
(0033) unsigned char swin, swin2;
(0034) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(0035) // Initilization file
(0036) 
(0037) void port_init(void)
(0038)  {
(0039)  DDRA = 0xff;		 //PA0-PA2 for LCD control
_port_init:
     18C EF8F      LDI	R24,0xFF
     18D BB8A      OUT	0x1A,R24
(0040)  DDRB = 0xff;	 	 //PB0-PB7 for LCD data
     18E BB87      OUT	0x17,R24
(0041)  	  				 
(0042)  DDRD = 0xff;	  	 //Control LEDs on left group 
     18F BB81      OUT	0x11,R24
(0043)  DDRC = 0x00;	  	 //Receive from dip-switch and button 		
     190 2422      CLR	R2
     191 BA24      OUT	0x14,R2
(0044)  PORTC=0xff;		
     192 BB85      OUT	0x15,R24
     193 9508      RET
(0045)  }
(0046) 
(0047) void WDT_off(void)
(0048)  {
(0049)  WDR();
_WDT_off:
     194 95A8      WDR
(0050)  WDTCR=0b00010111;
     195 E187      LDI	R24,0x17
     196 BD81      OUT	0x21,R24
(0051)  WDTCR=0b00000111;
     197 E087      LDI	R24,7
     198 BD81      OUT	0x21,R24
     199 9508      RET
_lcd_delay:
  b                    --> R10
  a                    --> R20
  count                --> R16
     19A 940E 03FC CALL	push_xgset300C
(0052)  }
(0053)  
(0054) void lcd_delay(int count)
(0055) {
(0056)  int a,b;
(0057)     b=2*count;
     19C 0158      MOVW	R10,R16
     19D 0CAA      LSL	R10
     19E 1CBB      ROL	R11
(0058)  	for(a=0; a<b; a++)
     19F 2744      CLR	R20
     1A0 2755      CLR	R21
     1A1 C002      RJMP	0x01A4
     1A2 5F4F      SUBI	R20,0xFF
     1A3 4F5F      SBCI	R21,0xFF
     1A4 154A      CP	R20,R10
     1A5 055B      CPC	R21,R11
     1A6 F3DC      BLT	0x01A2
     1A7 940C 0401 JMP	pop_xgset300C
_ldelay:
  i                    --> R20
  ms                   --> R10
     1A9 940E 03FC CALL	push_xgset300C
     1AB 0158      MOVW	R10,R16
(0059) 			 ;
(0060) }
(0061) 
(0062) void ldelay(int ms)
(0063) {
(0064)  int i;
(0065)  for(i=0; i<=ms; i++)
     1AC 2744      CLR	R20
     1AD 2755      CLR	R21
     1AE C005      RJMP	0x01B4
(0066)  	 lcd_delay(0x2000);	  	  //2000-->4000
     1AF E000      LDI	R16,0
     1B0 E210      LDI	R17,0x20
     1B1 DFE8      RCALL	_lcd_delay
     1B2 5F4F      SUBI	R20,0xFF
     1B3 4F5F      SBCI	R21,0xFF
     1B4 16A4      CP	R10,R20
     1B5 06B5      CPC	R11,R21
     1B6 F7C4      BGE	0x01AF
     1B7 940C 0401 JMP	pop_xgset300C
_wr_instruction:
  instr                --> R10
     1B9 92AA      ST	R10,-Y
     1BA 2EA0      MOV	R10,R16
(0067) }		  

⌨️ 快捷键说明

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