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

📄 keyled.lst

📁 avr单片机入门小程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      4E EFCF      LDI	R28,0xFF
      4F E1D0      LDI	R29,0x10
      50 BFCD      OUT	0x3D,R28
      51 BFDE      OUT	0x3E,R29
      52 51C0      SUBI	R28,0x10
      53 40D0      SBCI	R29,0
      54 EA0A      LDI	R16,0xAA
      55 8308      STD	Y+0,R16
      56 2400      CLR	R0
      57 E0E0      LDI	R30,0
      58 E0F1      LDI	R31,1
      59 E011      LDI	R17,1
      5A 30EF      CPI	R30,0xF
      5B 07F1      CPC	R31,R17
      5C F011      BEQ	0x005F
      5D 9201      ST	R0,Z+
      5E CFFB      RJMP	0x005A
      5F 8300      STD	Z+0,R16
      60 E9EC      LDI	R30,0x9C
      61 E0F0      LDI	R31,0
      62 E0A0      LDI	R26,0
      63 E0B1      LDI	R27,1
      64 E010      LDI	R17,0
      65 E000      LDI	R16,0
      66 BF0B      OUT	0x3B,R16
      67 39EC      CPI	R30,0x9C
      68 07F1      CPC	R31,R17
      69 F021      BEQ	0x006E
      6A 95C8      LPM
      6B 9631      ADIW	R30,1
      6C 920D      ST	R0,X+
      6D CFF9      RJMP	0x0067
      6E 940E 0232 CALL	_main
_exit:
      70 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\按键显示\delay.h
(0001) /* 1MHz 下延时程序*/
(0002) 
(0003) #ifndef DELAY_H_H
(0004) #define DELAY_H_H
(0005) 
(0006) void delay_1ms()             //1ms 延时
(0007) {
(0008)   unsigned int i;
(0009)  /*
(0010)   for(i=1;i<140;i++)   //1MHz
(0011)   ;
(0012)   */
(0013)   for(i=1331;i>0;i--)   // 8MHz
_delay_1ms:
  i                    --> R16
      71 E303      LDI	R16,0x33
      72 E015      LDI	R17,5
      73 C002      RJMP	0x0076
      74 5001      SUBI	R16,1
      75 4010      SBCI	R17,0
      76 3000      CPI	R16,0
      77 0701      CPC	R16,R17
      78 F7D9      BNE	0x0074
      79 9508      RET
_delay:
  i                    --> R20
  n                    --> R10
      7A 940E 035A CALL	push_xgset300C
      7C 0158      MOVW	R10,R16
(0014) ;
(0015) 
(0016) }
(0017) 
(0018) void delay(unsigned int n)
(0019) {
(0020)  unsigned int i=0;
      7D 2744      CLR	R20
      7E 2755      CLR	R21
(0021)  for(i=0;i<n;i++)
      7F C003      RJMP	0x0083
(0022)  delay_1ms();
      80 DFF0      RCALL	_delay_1ms
      81 5F4F      SUBI	R20,0xFF
      82 4F5F      SBCI	R21,0xFF
      83 154A      CP	R20,R10
      84 055B      CPC	R21,R11
      85 F3D0      BCS	0x0080
      86 940C 035F JMP	pop_xgset300C
_display:
  j                    --> Y,+1
  i                    --> R20
  k                    --> R20
      88 934A      ST	R20,-Y
FILE: C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
(0001) /*跑表和计时  
(0002)   8MHz   */
(0003) #include <iom128v.h>
(0004) #include <macros.h>
(0005) #include "delay.h"
(0006) unsigned char  temp;
(0007) unsigned char timer2;     //the num of 5ms
(0008) unsigned int  timer200;  // the num of  1s
(0009) unsigned char work_state; //to set the timer or clock,0表示计时,1表示跑表
(0010) unsigned char time_change; //to sign the state of change
(0011) unsigned char clock_start; // 跑表开始信号,0表示开始,1 表示暂停
(0012) unsigned char time[4]; //array of time
(0013) unsigned char clock[4]; //array of watch
(0014) const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
(0015) 	0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
(0016) #pragma interrupt_handler timer0_com_isr:17  //timer0 compare interrupt
(0017) 
(0018) void display()
(0019) {
(0020)  unsigned char i,j,k;
(0021)  DDRA=0xff;
      89 EF8F      LDI	R24,0xFF
      8A BB8A      OUT	0x1A,R24
(0022)  PORTA=0xff;
      8B BB8B      OUT	0x1B,R24
(0023)  DDRC=0xff;
      8C BB84      OUT	0x14,R24
(0024)  PORTC=0xff;
      8D BB85      OUT	0x15,R24
(0025)  
(0026)  if(work_state==0)    //计时显示
      8E 9020 010A LDS	R2,work_state
      90 2022      TST	R2
      91 F009      BEQ	0x0093
      92 C0BD      RJMP	0x0150
(0027) { 
(0028)  if(time_change==0x00)   // normal 
      93 9020 0109 LDS	R2,time_change
      95 2022      TST	R2
      96 F501      BNE	0x00B7
(0029)   {for(i=0;i<4;i++)
      97 2744      CLR	R20
      98 C01B      RJMP	0x00B4
(0030)    {
(0031)    PORTA=seg_table[time[i]];
      99 E084      LDI	R24,4
      9A E091      LDI	R25,1
      9B 2FE4      MOV	R30,R20
      9C 27FF      CLR	R31
      9D 0FE8      ADD	R30,R24
      9E 1FF9      ADC	R31,R25
      9F 81E0      LDD	R30,Z+0
      A0 27FF      CLR	R31
      A1 E88C      LDI	R24,0x8C
      A2 E090      LDI	R25,0
      A3 0FE8      ADD	R30,R24
      A4 1FF9      ADC	R31,R25
      A5 9026      ELPM	R2,0(Z)
      A6 BA2B      OUT	0x1B,R2
(0032)    PORTC=~(1<<(i+4));
      A7 2F14      MOV	R17,R20
      A8 5F1C      SUBI	R17,0xFC
      A9 E001      LDI	R16,1
      AA 940E 0364 CALL	lsl8
      AC 2E20      MOV	R2,R16
      AD 9420      COM	R2
      AE BA25      OUT	0x15,R2
(0033)    delay_1ms();
      AF DFC1      RCALL	_delay_1ms
(0034)    PORTC|=0xf0;
      B0 B385      IN	R24,0x15
      B1 6F80      ORI	R24,0xF0
      B2 BB85      OUT	0x15,R24
      B3 9543      INC	R20
      B4 3044      CPI	R20,4
      B5 F318      BCS	0x0099
(0035)    }
(0036)    }
      B6 C099      RJMP	0x0150
(0037)  else if(time_change==0x01)  // change second 
      B7 9180 0109 LDS	R24,time_change
      B9 3081      CPI	R24,1
      BA F009      BEQ	0x00BC
      BB C048      RJMP	0x0104
(0038)        {
(0039) 	    if(timer200<100)  //正常显示
      BC 9180 010B LDS	R24,timer200
      BE 9190 010C LDS	R25,timer200+1
      C0 3684      CPI	R24,0x64
      C1 E0E0      LDI	R30,0
      C2 079E      CPC	R25,R30
      C3 F500      BCC	0x00E4
(0040)          {
(0041) 		  for(i=0;i<4;i++)
      C4 2744      CLR	R20
      C5 C01B      RJMP	0x00E1
(0042)           {
(0043)             PORTA=seg_table[time[i]];
      C6 E084      LDI	R24,4
      C7 E091      LDI	R25,1
      C8 2FE4      MOV	R30,R20
      C9 27FF      CLR	R31
      CA 0FE8      ADD	R30,R24
      CB 1FF9      ADC	R31,R25
      CC 81E0      LDD	R30,Z+0
      CD 27FF      CLR	R31
      CE E88C      LDI	R24,0x8C
      CF E090      LDI	R25,0
      D0 0FE8      ADD	R30,R24
      D1 1FF9      ADC	R31,R25
      D2 9026      ELPM	R2,0(Z)
      D3 BA2B      OUT	0x1B,R2
(0044)             PORTC=~(1<<(i+4));
      D4 2F14      MOV	R17,R20
      D5 5F1C      SUBI	R17,0xFC
      D6 E001      LDI	R16,1
      D7 940E 0364 CALL	lsl8
      D9 2E20      MOV	R2,R16
      DA 9420      COM	R2
      DB BA25      OUT	0x15,R2
(0045)             delay_1ms();
      DC DF94      RCALL	_delay_1ms
(0046)             PORTC|=0xf0;
      DD B385      IN	R24,0x15
      DE 6F80      ORI	R24,0xF0
      DF BB85      OUT	0x15,R24
      E0 9543      INC	R20
      E1 3044      CPI	R20,4
      E2 F318      BCS	0x00C6
(0047) 		  }
(0048) 	   }
      E3 C06C      RJMP	0x0150
(0049) 	   else      //只显示分
(0050)         {for(i=2;i<4;i++)
      E4 E042      LDI	R20,2
      E5 C01B      RJMP	0x0101
(0051)          {
(0052)             PORTA=seg_table[time[i]];
      E6 E084      LDI	R24,4
      E7 E091      LDI	R25,1
      E8 2FE4      MOV	R30,R20
      E9 27FF      CLR	R31
      EA 0FE8      ADD	R30,R24
      EB 1FF9      ADC	R31,R25
      EC 81E0      LDD	R30,Z+0
      ED 27FF      CLR	R31
      EE E88C      LDI	R24,0x8C
      EF E090      LDI	R25,0
      F0 0FE8      ADD	R30,R24
      F1 1FF9      ADC	R31,R25
      F2 9026      ELPM	R2,0(Z)
      F3 BA2B      OUT	0x1B,R2
(0053)             PORTC=~(1<<(i+4));
      F4 2F14      MOV	R17,R20
      F5 5F1C      SUBI	R17,0xFC
      F6 E001      LDI	R16,1
      F7 940E 0364 CALL	lsl8
      F9 2E20      MOV	R2,R16
      FA 9420      COM	R2
      FB BA25      OUT	0x15,R2
(0054)             delay_1ms();
      FC DF74      RCALL	_delay_1ms
(0055)             PORTC|=0xc0;
      FD B385      IN	R24,0x15
      FE 6C80      ORI	R24,0xC0
      FF BB85      OUT	0x15,R24
     100 9543      INC	R20
     101 3044      CPI	R20,4
     102 F318      BCS	0x00E6
(0056) 		  }
(0057) 		  }
(0058) 	 }
     103 C04C      RJMP	0x0150
(0059) 	  else if(time_change==0x02) //正常显示
     104 9180 0109 LDS	R24,time_change
     106 3082      CPI	R24,2
     107 F009      BEQ	0x0109
     108 C047      RJMP	0x0150
(0060) 	   {  if(timer200<100)
     109 9180 010B LDS	R24,timer200
     10B 9190 010C LDS	R25,timer200+1
     10D 3684      CPI	R24,0x64
     10E E0E0      LDI	R30,0
     10F 079E      CPC	R25,R30
     110 F500      BCC	0x0131
(0061) 	     {
(0062) 		 { for(i=0;i<4;i++)
     111 2744      CLR	R20
     112 C01B      RJMP	0x012E
(0063)            {
(0064)             PORTA=seg_table[time[i]];
     113 E084      LDI	R24,4
     114 E091      LDI	R25,1
     115 2FE4      MOV	R30,R20
     116 27FF      CLR	R31
     117 0FE8      ADD	R30,R24
     118 1FF9      ADC	R31,R25
     119 81E0      LDD	R30,Z+0
     11A 27FF      CLR	R31
     11B E88C      LDI	R24,0x8C
     11C E090      LDI	R25,0
     11D 0FE8      ADD	R30,R24
     11E 1FF9      ADC	R31,R25
     11F 9026      ELPM	R2,0(Z)
     120 BA2B      OUT	0x1B,R2
(0065)             PORTC=~(1<<(i+4));
     121 2F14      MOV	R17,R20
     122 5F1C      SUBI	R17,0xFC
     123 E001      LDI	R16,1
     124 940E 0364 CALL	lsl8
     126 2E20      MOV	R2,R16
     127 9420      COM	R2
     128 BA25      OUT	0x15,R2
(0066)             delay_1ms();
     129 DF47      RCALL	_delay_1ms
(0067)             PORTC|=0xf0;
     12A B385      IN	R24,0x15
     12B 6F80      ORI	R24,0xF0
     12C BB85      OUT	0x15,R24
     12D 9543      INC	R20
     12E 3044      CPI	R20,4
     12F F318      BCS	0x0113
(0068) 		  }
(0069) 		  }
(0070) 		  }
     130 C01F      RJMP	0x0150
(0071) 		else                  //只显示秒
(0072) 		for(i=0;i<2;i++)
     131 2744      CLR	R20
     132 C01B      RJMP	0x014E
(0073) 		 {
(0074) 		   PORTA=seg_table[time[i]];
     133 E084      LDI	R24,4
     134 E091      LDI	R25,1
     135 2FE4      MOV	R30,R20
     136 27FF      CLR	R31
     137 0FE8      ADD	R30,R24
     138 1FF9      ADC	R31,R25
     139 81E0      LDD	R30,Z+0
     13A 27FF      CLR	R31
     13B E88C      LDI	R24,0x8C
     13C E090      LDI	R25,0
     13D 0FE8      ADD	R30,R24
     13E 1FF9      ADC	R31,R25
     13F 9026      ELPM	R2,0(Z)
     140 BA2B      OUT	0x1B,R2
(0075)             PORTC=~(1<<(i+4));
     141 2F14      MOV	R17,R20
     142 5F1C      SUBI	R17,0xFC
     143 E001      LDI	R16,1
     144 940E 0364 CALL	lsl8
     146 2E20      MOV	R2,R16
     147 9420      COM	R2
     148 BA25      OUT	0x15,R2
(0076)             delay_1ms();
     149 DF27      RCALL	_delay_1ms
(0077)             PORTC|=0x30;
     14A B385      IN	R24,0x15
     14B 6380      ORI	R24,0x30
     14C BB85      OUT	0x15,R24
     14D 9543      INC	R20
     14E 3042      CPI	R20,2
     14F F318      BCS	0x0133
(0078) 		 }
(0079) 		 }
(0080)  }
(0081) //}
(0082)  //if(clock_start==0x00)    //跑表显示,当跑表已经启动时
(0083)   if(work_state==1)
     150 9180 010A LDS	R24,work_state
     152 3081      CPI	R24,1
     153 F4F9      BNE	0x0173
(0084)   //{for(j=0;j<5;j++)
(0085)    {
(0086)     for(k=0;k<4;k++)
     154 2744      CLR	R20
     155 C01B      RJMP	0x0171
(0087)     {
(0088)     PORTA=seg_table[clock[k]];
     156 E080      LDI	R24,0
     157 E091      LDI	R25,1
     158 2FE4      MOV	R30,R20
     159 27FF      CLR	R31
     15A 0FE8      ADD	R30,R24
     15B 1FF9      ADC	R31,R25
     15C 81E0      LDD	R30,Z+0
     15D 27FF      CLR	R31
     15E E88C      LDI	R24,0x8C
     15F E090      LDI	R25,0
     160 0FE8      ADD	R30,R24
     161 1FF9      ADC	R31,R25
     162 9026      ELPM	R2,0(Z)
     163 BA2B      OUT	0x1B,R2
(0089)     PORTC=~(1<<(k+4));
     164 2F14      MOV	R17,R20
     165 5F1C      SUBI	R17,0xFC
     166 E001      LDI	R16,1
     167 940E 0364 CALL	lsl8
     169 2E20      MOV	R2,R16
     16A 9420      COM	R2
     16B BA25      OUT	0x15,R2
(0090)     delay_1ms();
     16C DF04      RCALL	_delay_1ms
(0091)     PORTC|=0xf0;
     16D B385      IN	R24,0x15
     16E 6F80      ORI	R24,0xF0
     16F BB85      OUT	0x15,R24
     170 9543      INC	R20
     171 3044      CPI	R20,4
     172 F318      BCS	0x0156
(0092)    }
(0093)   }
     173 9149      LD	R20,Y+
     174 9508      RET
_timer0_com_isr:
     175 920A      ST	R0,-Y
     176 921A      ST	R1,-Y
     177 922A      ST	R2,-Y
     178 923A      ST	R3,-Y
     179 924A      ST	R4,-Y
     17A 925A      ST	R5,-Y
     17B 926A      ST	R6,-Y
     17C 927A      ST	R7,-Y
     17D 928A      ST	R8,-Y
     17E 929A      ST	R9,-Y
     17F 930A      ST	R16,-Y
     180 931A      ST	R17,-Y
     181 932A      ST	R18,-Y
     182 933A      ST	R19,-Y
     183 938A      ST	R24,-Y
     184 939A      ST	R25,-Y
     185 93AA      ST	R26,-Y
     186 93BA      ST	R27,-Y
     187 93EA      ST	R30,-Y
     188 93FA      ST	R31,-Y
     189 B60F      IN	R0,0x3F
     18A 920A      ST	R0,-Y
(0094) //}
(0095) }
(0096) void timer0_com_isr()  /* 2 ms*/
(0097) {
(0098)  TIFR=0xff;
     18B EF8F      LDI	R24,0xFF
     18C BF86      OUT	0x36,R24
(0099) // timer2++;     //10 ms
(0100)  timer200++;   //1 s,因为没有暂停的说法,所以一直加
     18D 9180 010B LDS	R24,timer200
     18F 9190 010C LDS	R25,timer200+1
     191 9601      ADIW	R24,1
     192 9390 010C STS	timer200+1,R25
     194 9380 010B STS	timer200,R24
(0101) //TCNT0=0x05;
(0102) TCNT0=0xd7;
     196 ED87      LDI	R24,0xD7
     197 BF82      OUT	0x32,R24
(0103)  if(timer200==200)   //计时  1s 
     198 9180 010B LDS	R24,timer200
     19A 9190 010C LDS	R25,timer200+1
     19C 3C88      CPI	R24,0xC8
     19D E0E0      LDI	R30,0
     19E 079E      CPC	R25,R30
     19F F589      BNE	0x01D1
(0104)  {
(0105)     timer200=0;
     1A0 2422      CLR	R2
     1A1 2433      CLR	R3
     1A2 9230 010C STS	timer200+1,R3
     1A4 9220 010B STS	timer200,R2
(0106)   	time[0]++;
     1A6 9180 0104 LDS	R24,time
     1A8 5F8F      SUBI	R24,0xFF
     1A9 9380 0104 STS	time,R24
(0107) 	if(time[0]==10)  // second 个位 
     1AB 308A      CPI	R24,0xA
     1AC F521      BNE	0x01D1
(0108) 	{
(0109) 	 time[0]=0;
     1AD 9220 0104 STS	time,R2
(0110)      time[1]++;
     1AF 9180 0105 LDS	R24,time+1
     1B1 5F8F      SUBI	R24,0xFF
     1B2 9380 0105 STS	time+1,R24
(0111) 	 if(time[1]==6)  //second 十位
     1B4 3086      CPI	R24,6
     1B5 F4D9      BNE	0x01D1
(0112) 	  {
(0113) 	   time[1]=0;
     1B6 9220 0105 STS	time+1,R2
(0114) 	   time[2]++;
     1B8 9180 0106 LDS	R24,time+2
     1BA 5F8F      SUBI	R24,0xFF
     1BB 9380 0106 STS	time+2,R24
(0115) 	    if(time[2]==10) // 分个位
     1BD 308A      CPI	R24,0xA
     1BE F491      BNE	0x01D1
(0116) 		 {
(0117) 		  time[2]=0;
     1BF 9220 0106 STS	time+2,R2
(0118) 		  time[3]++;
     1C1 9180 0107 LDS	R24,time+3
     1C3 5F8F      SUBI	R24,0xFF
     1C4 9380 0107 STS	time+3,R24
(0119) 		  if(time[3]==6)
     1C6 3086      CPI	R24,6
     1C7 F411      BNE	0x01CA
(0120) 		  time[3]=0;
     1C8 9220 0107 STS	time+3,R2
(0121) 		  time[2]=0;
     1CA 2422      CLR	R2
     1CB 9220 0106 STS	time+2,R2
(0122)   		  time[1]=0;
     1CD 9220 0105 STS	time+1,R2
(0123)   		  time[0]=0;
     1CF 9220 0104 STS	time,R2
(0124) 		 } //time[2]
(0125) 	  }  //time[1]
(0126) 	}  //time[0]
(0127) 	
(0128)  }   // 1s

⌨️ 快捷键说明

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