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

📄 display.lst

📁 AVRkaifashili.rar
💻 LST
字号:
__start:
__text_start:
    0008 E5CF      LDI	R28,0x5F
    0009 E0D2      LDI	R29,2
    000A BFCD      OUT	0x3D,R28
    000B BFDE      OUT	0x3E,R29
    000C 51C0      SUBI	R28,0x10
    000D 40D0      SBCI	R29,0
    000E EA0A      LDI	R16,0xAA
    000F 8308      STD	Y+0,R16
    0010 2400      CLR	R0
    0011 E7E0      LDI	R30,0x70
    0012 E0F0      LDI	R31,0
    0013 E010      LDI	R17,0
    0014 37E2      CPI	R30,0x72
    0015 07F1      CPC	R31,R17
    0016 F011      BEQ	0x0019
    0017 9201      ST	R0,Z+
    0018 CFFB      RJMP	0x0014
    0019 8300      STD	Z+0,R16
    001A E0E0      LDI	R30,0
    001B E0F0      LDI	R31,0
    001C E6A0      LDI	R26,0x60
    001D E0B0      LDI	R27,0
    001E E010      LDI	R17,0
    001F 31E0      CPI	R30,0x10
    0020 07F1      CPC	R31,R17
    0021 F021      BEQ	0x0026
    0022 95C8      LPM
    0023 9631      ADIW	R30,1
    0024 920D      ST	R0,X+
    0025 CFF9      RJMP	0x001F
    0026 D07D      RCALL	_main
_exit:
    0027 CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
    0028 D0DF      RCALL	push_gset1
FILE: C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第二章\第二章程序\IO端口的C语言编程\数码管显示设计\Counter.C
(0001) 
(0002) //******************************FileName: Counter.C**************************//
(0003) //******************************ICCAVR V6.30编译*****************************//
(0004) 
(0005) #include <io8535v.h>                 
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008) 
(0009) //数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
(0010) uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0011) uchar Data[4]={0,0,0,0};       //显示初始值:0 0 0 0
(0012) uint  CNT=0;                    //初始计数值:0 
(0013) uchar Key_Up;                  //加计数按键标志  
(0014) uchar Key_Down;                //减计数按键标志  
(0015) 
(0016) void DelayMs(uint i)           //Ms级延时,参数i为延时时间
(0017) {uint j;
(0018)  for(;i!=0;i--)
    0029 C00A      RJMP	0x0034
(0019)   {for(j=8000;j!=0;j--) {;}}
    002A E440      LDI	R20,0x40
    002B E15F      LDI	R21,0x1F
    002C C002      RJMP	0x002F
    002D 5041      SUBI	R20,1
    002E 4050      SBCI	R21,0
    002F 3040      CPI	R20,0
    0030 0745      CPC	R20,R21
    0031 F7D9      BNE	0x002D
    0032 5001      SUBI	R16,1
    0033 4010      SBCI	R17,0
    0034 3000      CPI	R16,0
    0035 0701      CPC	R16,R17
    0036 F799      BNE	0x002A
(0020) }
    0037 D0D3      RCALL	pop_gset1
    0038 9508      RET
_Display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    0039 D0E8      RCALL	push_gset3
    003A 2EA0      MOV	R10,R16
    003B 2EB1      MOV	R11,R17
(0021) 
(0022) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0023) {uchar i,sel=0x01;           
    003C E041      LDI	R20,1
(0024)  for(i=0;i<4;i++)
    003D 2766      CLR	R22
    003E C012      RJMP	0x0051
(0025)   {PORTC=sel;                  //选通最右边的数码管
    003F BB45      OUT	0x15,R20
(0026)    PORTA=Table[p[i]];          //送字型码
    0040 2FE6      MOV	R30,R22
    0041 27FF      CLR	R31
    0042 0DEA      ADD	R30,R10
    0043 1DFB      ADC	R31,R11
    0044 81E0      LDD	R30,Z+0
    0045 27FF      CLR	R31
    0046 E680      LDI	R24,0x60
    0047 E090      LDI	R25,0
    0048 0FE8      ADD	R30,R24
    0049 1FF9      ADC	R31,R25
    004A 8020      LDD	R2,Z+0
    004B BA2B      OUT	0x1B,R2
(0027)    DelayMs(2);                 //显示延时    
    004C E002      LDI	R16,2
    004D E010      LDI	R17,0
    004E DFD9      RCALL	_DelayMs
(0028)    sel=sel<<1;                 //移位以显示前一位
    004F 0F44      LSL	R20
    0050 9563      INC	R22
    0051 3064      CPI	R22,4
    0052 F360      BCS	0x003F
(0029)   }
(0030) }
    0053 D0B2      RCALL	pop_gset3
    0054 9508      RET
_Process:
  p                    --> R20
  i                    --> R22
    0055 D0C9      RCALL	push_gset2
    0056 2F42      MOV	R20,R18
    0057 2F53      MOV	R21,R19
    0058 2F60      MOV	R22,R16
    0059 2F71      MOV	R23,R17
(0031) 
(0032) //******************************计数值处理函数******************************//
(0033) //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
(0034) //参数说明:参数i:计数值;参数p:处理数据存放的数组名//
(0035) void Process(uint i,uchar *p) 
(0036) {p[0]=i/1000;
    005A EE28      LDI	R18,0xE8
    005B E033      LDI	R19,3
    005C 2F06      MOV	R16,R22
    005D 2F17      MOV	R17,R23
    005E D08B      RCALL	div16u
    005F 2FE4      MOV	R30,R20
    0060 2FF5      MOV	R31,R21
    0061 8300      STD	Z+0,R16
(0037)  i=i%1000;
    0062 EE28      LDI	R18,0xE8
    0063 E033      LDI	R19,3
    0064 2F06      MOV	R16,R22
    0065 2F17      MOV	R17,R23
    0066 D081      RCALL	mod16u
    0067 2F60      MOV	R22,R16
    0068 2F71      MOV	R23,R17
(0038)  p[1]=i/100;
    0069 E624      LDI	R18,0x64
    006A E030      LDI	R19,0
    006B D07E      RCALL	div16u
    006C 2FE4      MOV	R30,R20
    006D 2FF5      MOV	R31,R21
    006E 8301      STD	Z+1,R16
(0039)  i=i%100;
    006F E624      LDI	R18,0x64
    0070 E030      LDI	R19,0
    0071 2F06      MOV	R16,R22
    0072 2F17      MOV	R17,R23
    0073 D074      RCALL	mod16u
    0074 2F60      MOV	R22,R16
    0075 2F71      MOV	R23,R17
(0040)  p[2]=i/10;
    0076 E02A      LDI	R18,0xA
    0077 E030      LDI	R19,0
    0078 D071      RCALL	div16u
    0079 2FE4      MOV	R30,R20
    007A 2FF5      MOV	R31,R21
    007B 8302      STD	Z+2,R16
(0041)  i=i%10;
    007C E02A      LDI	R18,0xA
    007D E030      LDI	R19,0
    007E 2F06      MOV	R16,R22
    007F 2F17      MOV	R17,R23
    0080 D067      RCALL	mod16u
    0081 2F60      MOV	R22,R16
    0082 2F71      MOV	R23,R17
(0042)  p[3]=i;
    0083 2FE4      MOV	R30,R20
    0084 2FF5      MOV	R31,R21
    0085 8363      STD	Z+3,R22
(0043) }
    0086 D07D      RCALL	pop_gset2
    0087 9508      RET
(0044) 
(0045) void Init_IO(void)             //初始化I/O口
(0046) {DDRA=0xff;                    //设置A口为推挽1输出
_Init_IO:
    0088 EF8F      LDI	R24,0xFF
    0089 BB8A      OUT	0x1A,R24
(0047)  PORTA=0xff;
    008A BB8B      OUT	0x1B,R24
(0048)  DDRB=0x00;                    //设置B口为不带上拉电阻输入
    008B 2422      CLR	R2
    008C BA27      OUT	0x17,R2
(0049)  PORTB=0x00;    
    008D BA28      OUT	0x18,R2
(0050)  DDRC=0xff;                    //设置C口为推挽1输出;             
    008E BB84      OUT	0x14,R24
(0051)  PORTC=0xff;
    008F BB85      OUT	0x15,R24
(0052) }
    0090 9508      RET
(0053) 
(0054) void Get_Key(void)             //按键扫描函数
(0055) {while((PINB&0x01)==0)         //若S1按下,置位加计数标志;
_Get_Key:
    0091 C006      RJMP	0x0098
(0056) {Key_Up=1;
    0092 E081      LDI	R24,1
    0093 93800071  STS	_Key_Up,R24
(0057)  Display(Data);}
    0095 E60A      LDI	R16,0x6A
    0096 E010      LDI	R17,0
    0097 DFA1      RCALL	_Display
    0098 9BB0      SBIS	0x16,0
    0099 CFF8      RJMP	0x0092
    009A C006      RJMP	0x00A1
(0058)  while((PINB&0x02)==0)         //若S2按下,置位减计数标志; 
(0059) {Key_Down=1;
    009B E081      LDI	R24,1
    009C 93800070  STS	_Key_Down,R24
(0060)  Display(Data);}
    009E E60A      LDI	R16,0x6A
    009F E010      LDI	R17,0
    00A0 DF98      RCALL	_Display
    00A1 9BB1      SBIS	0x16,1
    00A2 CFF8      RJMP	0x009B
(0061) }
    00A3 9508      RET
(0062) 
(0063) void main(void)
(0064) {uchar I;
(0065)  Init_IO();                    //初始化I/O口
_main:
  I                    --> Y+1
    00A4 DFE3      RCALL	_Init_IO
(0066)  PORTA=0xff;                   //点亮测试所有的数码管
    00A5 EF8F      LDI	R24,0xFF
    00A6 BB8B      OUT	0x1B,R24
(0067)  PORTC=0x00;                   
    00A7 2422      CLR	R2
    00A8 BA25      OUT	0x15,R2
(0068)  DelayMs(3000);                //延时
    00A9 EB08      LDI	R16,0xB8
    00AA E01B      LDI	R17,0xB
    00AB DF7C      RCALL	_DelayMs
(0069)  PORTC=0xff;                   //数码管熄灭,进入计数状态 
    00AC EF8F      LDI	R24,0xFF
    00AD BB85      OUT	0x15,R24
    00AE C037      RJMP	0x00E6
(0070)  while(1)
(0071)  {Get_Key();                   //按键扫描
    00AF DFE1      RCALL	_Get_Key
(0072)   if(Key_Up==1)                //加计数处理
    00B0 91800071  LDS	R24,_Key_Up
    00B2 3081      CPI	R24,1
    00B3 F481      BNE	0x00C4
(0073)      {if(CNT!=9999)            //条件判断是否计数到9999
    00B4 9180006E  LDS	R24,0x6E
    00B6 9190006F  LDS	R25,0x6F
    00B8 308F      CPI	R24,0xF
    00B9 E2E7      LDI	R30,0x27
    00BA 079E      CPC	R25,R30
    00BB F041      BEQ	0x00C4
(0074) 	    {CNT=CNT+1;            //计数值加1
    00BC 9601      ADIW	R24,1
    00BD 9390006F  STS	0x6F,R25
    00BF 9380006E  STS	0x6E,R24
(0075) 		 Key_Up=0;}            //加计数标志复位
    00C1 2422      CLR	R2
    00C2 92200071  STS	_Key_Up,R2
(0076)      }
(0077)   if(Key_Down==1)              //减计数处理
    00C4 91800070  LDS	R24,_Key_Down
    00C6 3081      CPI	R24,1
    00C7 F4A1      BNE	0x00DC
(0078)      {if(CNT!=0)               //条件判断是否计数到0000
    00C8 9020006E  LDS	R2,0x6E
    00CA 9030006F  LDS	R3,0x6F
    00CC 2022      TST	R2
    00CD F411      BNE	0x00D0
    00CE 2033      TST	R3
    00CF F061      BEQ	0x00DC
(0079) 	    {CNT=CNT-1;            //计数值减一
    00D0 9180006E  LDS	R24,0x6E
    00D2 9190006F  LDS	R25,0x6F
    00D4 9701      SBIW	R24,1
    00D5 9390006F  STS	0x6F,R25
    00D7 9380006E  STS	0x6E,R24
(0080) 		 Key_Down=0;}          //减计数标志复位
    00D9 2422      CLR	R2
    00DA 92200070  STS	_Key_Down,R2
(0081) 	 }
(0082)   Process(CNT,Data);           //计数值处理
    00DC E62A      LDI	R18,0x6A
    00DD E030      LDI	R19,0
    00DE 9100006E  LDS	R16,0x6E
    00E0 9110006F  LDS	R17,0x6F
    00E2 DF72      RCALL	_Process
(0083)   Display(Data);               //动态扫描显示
    00E3 E60A      LDI	R16,0x6A
    00E4 E010      LDI	R17,0
    00E5 DF53      RCALL	_Display
    00E6 CFC8      RJMP	0x00AF
(0084)  }
(0085) }
FILE: <library>
    00E7 9508      RET
mod16u:
    00E8 9468      BSET	6
    00E9 C001      RJMP	xdiv16u
div16u:
    00EA 94E8      BCLR	6
xdiv16u:
    00EB 92EA      ST	R14,-Y
    00EC 92FA      ST	R15,-Y
    00ED 938A      ST	R24,-Y
    00EE 24EE      CLR	R14
    00EF 24FF      CLR	R15
    00F0 E180      LDI	R24,0x10
    00F1 0F00      LSL	R16
    00F2 1F11      ROL	R17
    00F3 1CEE      ROL	R14
    00F4 1CFF      ROL	R15
    00F5 16E2      CP	R14,R18
    00F6 06F3      CPC	R15,R19
    00F7 F018      BCS	0x00FB
    00F8 1AE2      SUB	R14,R18
    00F9 0AF3      SBC	R15,R19
    00FA 9503      INC	R16
    00FB 958A      DEC	R24
    00FC F7A1      BNE	0x00F1
    00FD F416      BRTC	0x0100
    00FE 2D0E      MOV	R16,R14
    00FF 2D1F      MOV	R17,R15
    0100 9189      LD	R24,Y+
    0101 90F9      LD	R15,Y+
    0102 90E9      LD	R14,Y+
    0103 9508      RET
pop_gset2:
    0104 E0E2      LDI	R30,2
    0105 C006      RJMP	pop
pop_gset3:
    0106 E0E4      LDI	R30,4
    0107 C004      RJMP	pop
push_gset1:
    0108 935A      ST	R21,-Y
    0109 934A      ST	R20,-Y
    010A 9508      RET
pop_gset1:
    010B E0E1      LDI	R30,1
pop:
    010C 9149      LD	R20,Y+
    010D 9159      LD	R21,Y+
    010E FDE0      SBRC	R30,0
    010F 9508      RET
    0110 9169      LD	R22,Y+
    0111 9179      LD	R23,Y+
    0112 FDE1      SBRC	R30,1
    0113 9508      RET
    0114 90A9      LD	R10,Y+
    0115 90B9      LD	R11,Y+
    0116 FDE2      SBRC	R30,2
    0117 9508      RET
    0118 90C9      LD	R12,Y+
    0119 90D9      LD	R13,Y+
    011A FDE3      SBRC	R30,3
    011B 9508      RET
    011C 90E9      LD	R14,Y+
    011D 90F9      LD	R15,Y+
    011E 9508      RET
push_gset2:
    011F 937A      ST	R23,-Y
    0120 936A      ST	R22,-Y
    0121 CFE6      RJMP	push_gset1
push_gset3:
    0122 92BA      ST	R11,-Y
    0123 92AA      ST	R10,-Y
    0124 CFFA      RJMP	push_gset2

⌨️ 快捷键说明

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