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

📄 lcd.lst

📁 AtMega169芯片对LCD进行测试的C程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
      39 EFCF      LDI	R28,0xFF
      3A E0D4      LDI	R29,4
      3B BFCD      OUT	0x3D,R28
      3C BFDE      OUT	0x3E,R29
      3D 51C0      SUBI	R28,0x10
      3E 40D0      SBCI	R29,0
      3F EA0A      LDI	R16,0xAA
      40 8308      STD	Y+0,R16
      41 2400      CLR	R0
      42 E0E0      LDI	R30,0
      43 E0F1      LDI	R31,1
      44 E011      LDI	R17,1
      45 30E0      CPI	R30,0
      46 07F1      CPC	R31,R17
      47 F011      BEQ	0x004A
      48 9201      ST	R0,Z+
      49 CFFB      RJMP	0x0045
      4A 8300      STD	Z+0,R16
      4B E7E2      LDI	R30,0x72
      4C E0F0      LDI	R31,0
      4D E0A0      LDI	R26,0
      4E E0B1      LDI	R27,1
      4F E010      LDI	R17,0
      50 37E2      CPI	R30,0x72
      51 07F1      CPC	R31,R17
      52 F021      BEQ	0x0057
      53 95C8      LPM
      54 9631      ADIW	R30,1
      55 920D      ST	R0,X+
      56 CFF9      RJMP	0x0050
      57 940E 00AF CALL	_main
_exit:
      59 CFFF      RJMP	_exit
FILE: C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
(0001) // **************************************************************
(0002) // *** 		         广 州 天 河 双 龙 电 子 公 司 	            ***
(0003) // ***                   http://www.sl.com.cn                 ***
(0004) // ***                    lcd 显示校验    		                ***
(0005) // ***                  作者:zxy@sl.com.cn                   ***
(0006) // ***                       2006年3月28日                    ***
(0007) // ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
(0008) // **************************************************************
(0009) //实验效果:0-9动态循环显示
(0010) #include <iom169v.h>
(0011) #include <macros.h>
(0012) #define pLCDREG (*(unsigned char *)(0xEC)) 
(0013) const unsigned int LCD_character_table[] = // Character definitions table.
(0014) {
(0015) 	0x1323,		// '0'
(0016) 	0x0220,		// '1'
(0017) 	0x1132,		// '2'
(0018) 	0x1232,		// '3'	
(0019) 	0x0231,		// '4'
(0020) 	0x1213,		// '5'
(0021) 	0x1313,		// '6'
(0022) 	0x0222,		// '7'
(0023) 	0x1333,		// '8'
(0024) 	0x1233,		// '9'
(0025) 	0x2220         // 'c'
(0026) };          
(0027) void port_init(void)
(0028) {
(0029)  PORTA = 0x00;
_port_init:
      5A 2422      CLR	R2
      5B B822      OUT	0x02,R2
(0030)  DDRA  = 0x00;
      5C B821      OUT	0x01,R2
(0031)  PORTC = 0x00; 
      5D B828      OUT	0x08,R2
(0032)  DDRC  = 0x00;
      5E B827      OUT	0x07,R2
(0033)  PORTD = 0x00;
      5F B82B      OUT	0x0B,R2
(0034)  DDRD  = 0x00; 
      60 B82A      OUT	0x0A,R2
(0035)  PORTG = 0x00;
      61 BA24      OUT	0x14,R2
(0036)  DDRG  = 0x00;
      62 BA23      OUT	0x13,R2
      63 9508      RET
(0037) }
(0038) /*				微秒级延时程序	  		*/
(0039) void delay_us(int time)
(0040) 	 {     
(0041)   	  do
(0042) 	  	{
(0043) 		 time--;
_delay_us:
  time                 --> R16
      64 5001      SUBI	R16,1
      65 4010      SBCI	R17,0
(0044) 		}	
(0045)   	  while (time>1);
      66 E081      LDI	R24,1
      67 E090      LDI	R25,0
      68 1780      CP	R24,R16
      69 0791      CPC	R25,R17
      6A F3CC      BLT	0x0064
      6B 9508      RET
_delay_ms:
  time                 --> R20
      6C 934A      ST	R20,-Y
      6D 935A      ST	R21,-Y
      6E 01A8      MOVW	R20,R16
(0046) 	 }	  
(0047) /*	  		    毫秒级延时程序			*/	 
(0048) void delay_ms(unsigned int time)
(0049) 	 {
      6F C005      RJMP	0x0075
(0050) 	  while(time!=0)
(0051) 	  	  {		
(0052) 		   delay_us(1000);
      70 EE08      LDI	R16,0xE8
      71 E013      LDI	R17,3
      72 DFF1      RCALL	_delay_us
(0053) 		   time--;
      73 5041      SUBI	R20,1
      74 4050      SBCI	R21,0
      75 3040      CPI	R20,0
      76 0745      CPC	R20,R21
      77 F7C1      BNE	0x0070
      78 9159      LD	R21,Y+
      79 9149      LD	R20,Y+
      7A 9508      RET
(0054) 		  }
(0055) 	 }					
(0056) void lcd_init(void)
(0057) {
(0058) 
(0059) LCDCRA = (1<<LCDEN);
_lcd_init:
      7B E880      LDI	R24,0x80
      7C 9380 00E4 STS	0x00E4,R24
(0060) /* 晶体振荡器*/
(0061) /* 1/3 偏置和1/4 占空比 */
(0062) LCDCRB =  (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
      7E E387      LDI	R24,0x37
      7F 9380 00E5 STS	0x00E5,R24
(0063) /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
(0064) /* 得到帧速率为 Hz */
(0065) LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
      81 E686      LDI	R24,0x66
      82 9380 00E6 STS	0x00E6,R24
(0066) /* 设置输出电压为3.3 V */
(0067) LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
      84 E08F      LDI	R24,0xF
      85 9380 00E7 STS	0x00E7,R24
(0068) /* 使能LCD,缺省波形并禁止所有中断*/
(0069) 
(0070)  LCDDR0=0x00;
      87 2422      CLR	R2
      88 9220 00EC STS	0x00EC,R2
(0071)  LCDDR1=0x00;
      8A 9220 00ED STS	0x00ED,R2
(0072)  LCDDR2=0x00;
      8C 9220 00EE STS	0x00EE,R2
(0073)  LCDDR3=0x00;
      8E 9220 00EF STS	0x00EF,R2
(0074)  LCDDR5=0x00;
      90 9220 00F1 STS	0x00F1,R2
(0075)  LCDDR6=0x00;
      92 9220 00F2 STS	0x00F2,R2
(0076)  LCDDR7=0x00;
      94 9220 00F3 STS	0x00F3,R2
(0077)  LCDDR8=0x00;
      96 9220 00F4 STS	0x00F4,R2
(0078)  LCDDR10=0x00;
      98 9220 00F6 STS	0x00F6,R2
(0079)  LCDDR11=0x00;
      9A 9220 00F7 STS	0x00F7,R2
(0080)  LCDDR12=0x00;
      9C 9220 00F8 STS	0x00F8,R2
(0081)  LCDDR13=0x00;
      9E 9220 00F9 STS	0x00F9,R2
(0082)  LCDDR15=0x00;
      A0 9220 00FB STS	0x00FB,R2
(0083)  LCDDR16=0x00;
      A2 9220 00FC STS	0x00FC,R2
(0084)  LCDDR17=0x00;
      A4 9220 00FD STS	0x00FD,R2
(0085)  LCDDR18=0x00;
      A6 9220 00FE STS	0x00FE,R2
(0086)  LCDCRA=(1<<LCDEN);
      A8 E880      LDI	R24,0x80
      A9 9380 00E4 STS	0x00E4,R24
      AB 9508      RET
(0087) }
(0088) void init_devices(void)
(0089) {
(0090)  
(0091)  port_init();
_init_devices:
      AC DFAD      RCALL	_port_init
(0092)  lcd_init();
      AD DFCD      RCALL	_lcd_init
      AE 9508      RET
(0093) 
(0094) }
(0095) 
(0096) void main(void)
(0097) {
(0098)  unsigned int i,j,m,n=0;
_main:
  n                    --> R10
  i                    --> R20
  j                    --> R10
  m                    --> R22
      AF 24AA      CLR	R10
      B0 24BB      CLR	R11
(0099)  init_devices();
      B1 DFFA      RCALL	_init_devices
      B2 C23E      RJMP	0x02F1
(0100)  while(1)
(0101)  		 {  
(0102) 		  while ( !(LCDCRA & (1<<LCDIF)) );
      B3 9020 00E4 LDS	R2,0x00E4
      B5 FE24      SBRS	R2,4
      B6 CFFC      RJMP	0x00B3
(0103) 		  LCDCRA = (1<<LCDEN)|(1<<LCDIF);
      B7 E980      LDI	R24,0x90
      B8 9380 00E4 STS	0x00E4,R24
(0104) 		  for(i=0;i<10;i++)	
      BA 2744      CLR	R20
      BB 2755      CLR	R21
      BC C22F      RJMP	0x02EC
(0105) 		   {
(0106) 		    j=LCD_character_table[i];			//左1位
      BD E002      LDI	R16,2
      BE E010      LDI	R17,0
      BF 019A      MOVW	R18,R20
      C0 940E 02F3 CALL	empy16s
      C2 01F8      MOVW	R30,R16
      C3 E58C      LDI	R24,0x5C
      C4 E090      LDI	R25,0
      C5 0FE8      ADD	R30,R24
      C6 1FF9      ADC	R31,R25
      C7 90A5      LPM	R10,Z+
      C8 90B4      LPM	R11,0(Z)
(0107) 			//j=j<<n;			
(0108) 			m=j&0x000f;
      C9 01B5      MOVW	R22,R10
      CA 706F      ANDI	R22,0xF
      CB 7070      ANDI	R23,0
(0109) 			LCDDR0=m;
      CC 9360 00EC STS	0x00EC,R22
(0110) 			m=(j>>4)&0x000f;
      CE 01B5      MOVW	R22,R10
      CF 9576      LSR	R23
      D0 9567      ROR	R22
      D1 9576      LSR	R23
      D2 9567      ROR	R22
      D3 9576      LSR	R23
      D4 9567      ROR	R22
      D5 9576      LSR	R23
      D6 9567      ROR	R22
      D7 706F      ANDI	R22,0xF
      D8 7070      ANDI	R23,0
(0111) 			LCDDR5=m; 
      D9 9360 00F1 STS	0x00F1,R22
(0112) 			m=(j>>8)&0x000f;
      DB 01B5      MOVW	R22,R10
      DC 2F67      MOV	R22,R23
      DD 2777      CLR	R23
      DE 706F      ANDI	R22,0xF
      DF 7070      ANDI	R23,0
(0113) 			LCDDR10=m;
      E0 9360 00F6 STS	0x00F6,R22
(0114) 			m=(j>>12)&0x000f;
      E2 E02C      LDI	R18,0xC
      E3 E030      LDI	R19,0
      E4 0185      MOVW	R16,R10
      E5 940E 030A CALL	lsr16
      E7 01B8      MOVW	R22,R16
      E8 706F      ANDI	R22,0xF
      E9 7070      ANDI	R23,0
(0115) 			LCDDR15=m;
      EA 9360 00FB STS	0x00FB,R22
(0116) 			
(0117) 			
(0118) 			j=LCD_character_table[i];		//左2位
      EC E002      LDI	R16,2
      ED E010      LDI	R17,0
      EE 019A      MOVW	R18,R20
      EF 940E 02F3 CALL	empy16s
      F1 01F8      MOVW	R30,R16
      F2 E58C      LDI	R24,0x5C
      F3 E090      LDI	R25,0
      F4 0FE8      ADD	R30,R24
      F5 1FF9      ADC	R31,R25
      F6 90A5      LPM	R10,Z+
      F7 90B4      LPM	R11,0(Z)
(0119) 			j=j<<2;			
      F8 0CAA      LSL	R10
      F9 1CBB      ROL	R11
      FA 0CAA      LSL	R10
      FB 1CBB      ROL	R11
(0120) 			m=j&0x000f;
      FC 01B5      MOVW	R22,R10
      FD 706F      ANDI	R22,0xF
      FE 7070      ANDI	R23,0
(0121) 			LCDDR0|=m;
      FF 9020 00EC LDS	R2,0x00EC
     101 2433      CLR	R3
     102 2A26      OR	R2,R22
     103 2A37      OR	R3,R23
     104 9220 00EC STS	0x00EC,R2
(0122) 			m=(j>>4)&0x000f;
     106 01B5      MOVW	R22,R10
     107 9576      LSR	R23
     108 9567      ROR	R22
     109 9576      LSR	R23
     10A 9567      ROR	R22
     10B 9576      LSR	R23
     10C 9567      ROR	R22
     10D 9576      LSR	R23
     10E 9567      ROR	R22
     10F 706F      ANDI	R22,0xF
     110 7070      ANDI	R23,0
(0123) 			LCDDR5|=m; 
     111 9020 00F1 LDS	R2,0x00F1
     113 2433      CLR	R3
     114 2A26      OR	R2,R22
     115 2A37      OR	R3,R23
     116 9220 00F1 STS	0x00F1,R2
(0124) 			m=(j>>8)&0x000f;
     118 01B5      MOVW	R22,R10
     119 2F67      MOV	R22,R23
     11A 2777      CLR	R23
     11B 706F      ANDI	R22,0xF
     11C 7070      ANDI	R23,0
(0125) 			LCDDR10|=m;
     11D 9020 00F6 LDS	R2,0x00F6
     11F 2433      CLR	R3
     120 2A26      OR	R2,R22
     121 2A37      OR	R3,R23
     122 9220 00F6 STS	0x00F6,R2
(0126) 			m=(j>>12)&0x000f;
     124 E02C      LDI	R18,0xC
     125 E030      LDI	R19,0
     126 0185      MOVW	R16,R10
     127 940E 030A CALL	lsr16
     129 01B8      MOVW	R22,R16
     12A 706F      ANDI	R22,0xF
     12B 7070      ANDI	R23,0
(0127) 			LCDDR15|=m;
     12C 9020 00FB LDS	R2,0x00FB
     12E 2433      CLR	R3
     12F 2A26      OR	R2,R22
     130 2A37      OR	R3,R23
     131 9220 00FB STS	0x00FB,R2
(0128) 			
(0129) 			m=LCDDR0<<2;                     //左3位
     133 9160 00EC LDS	R22,0x00EC
     135 2777      CLR	R23
     136 0F66      LSL	R22
     137 1F77      ROL	R23
     138 0F66      LSL	R22
     139 1F77      ROL	R23
(0130) 			LCDDR0|=m;
     13A 9020 00EC LDS	R2,0x00EC
     13C 2433      CLR	R3
     13D 2A26      OR	R2,R22
     13E 2A37      OR	R3,R23
     13F 9220 00EC STS	0x00EC,R2
(0131) 			m=LCDDR5<<2;
     141 9160 00F1 LDS	R22,0x00F1
     143 2777      CLR	R23
     144 0F66      LSL	R22
     145 1F77      ROL	R23
     146 0F66      LSL	R22
     147 1F77      ROL	R23
(0132) 			LCDDR5|=m;
     148 9020 00F1 LDS	R2,0x00F1
     14A 2433      CLR	R3
     14B 2A26      OR	R2,R22
     14C 2A37      OR	R3,R23
     14D 9220 00F1 STS	0x00F1,R2
(0133) 			m=LCDDR10<<2;
     14F 9160 00F6 LDS	R22,0x00F6
     151 2777      CLR	R23
     152 0F66      LSL	R22
     153 1F77      ROL	R23
     154 0F66      LSL	R22
     155 1F77      ROL	R23
(0134) 			LCDDR10|=m;
     156 9020 00F6 LDS	R2,0x00F6
     158 2433      CLR	R3
     159 2A26      OR	R2,R22
     15A 2A37      OR	R3,R23
     15B 9220 00F6 STS	0x00F6,R2
(0135) 			m=LCDDR15<<2;
     15D 9160 00FB LDS	R22,0x00FB
     15F 2777      CLR	R23
     160 0F66      LSL	R22
     161 1F77      ROL	R23
     162 0F66      LSL	R22
     163 1F77      ROL	R23
(0136) 			LCDDR15|=m;
     164 9020 00FB LDS	R2,0x00FB
     166 2433      CLR	R3
     167 2A26      OR	R2,R22
     168 2A37      OR	R3,R23
     169 9220 00FB STS	0x00FB,R2
(0137) 			
(0138) 			m=LCDDR0<<2;                        //左4位
     16B 9160 00EC LDS	R22,0x00EC
     16D 2777      CLR	R23
     16E 0F66      LSL	R22
     16F 1F77      ROL	R23
     170 0F66      LSL	R22
     171 1F77      ROL	R23
(0139) 			LCDDR0|=m;
     172 9020 00EC LDS	R2,0x00EC
     174 2433      CLR	R3
     175 2A26      OR	R2,R22

⌨️ 快捷键说明

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