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

📄 lcd.lst

📁 iccavr的一个实例
💻 LST
字号:
__start:
__text_start:
    0019 E5CF      LDI	R28,0x5F
    001A E0D2      LDI	R29,2
    001B BFCD      OUT	0x3D,R28
    001C BFDE      OUT	0x3E,R29
    001D 51C0      SUBI	R28,0x10
    001E 40D0      SBCI	R29,0
    001F EA0A      LDI	R16,0xAA
    0020 8308      STD	Y+0,R16
    0021 2400      CLR	R0
    0022 E6E0      LDI	R30,0x60
    0023 E0F0      LDI	R31,0
    0024 E010      LDI	R17,0
    0025 36E4      CPI	R30,0x64
    0026 07F1      CPC	R31,R17
    0027 F011      BEQ	0x002A
    0028 9201      ST	R0,Z+
    0029 CFFB      RJMP	0x0025
    002A 8300      STD	Z+0,R16
    002B E3E2      LDI	R30,0x32
    002C E0F0      LDI	R31,0
    002D E6A0      LDI	R26,0x60
    002E E0B0      LDI	R27,0
    002F E010      LDI	R17,0
    0030 33E2      CPI	R30,0x32
    0031 07F1      CPC	R31,R17
    0032 F021      BEQ	0x0037
    0033 95C8      LPM
    0034 9631      ADIW	R30,1
    0035 920D      ST	R0,X+
    0036 CFF9      RJMP	0x0030
    0037 D001      RCALL	_main
_exit:
    0038 CFFF      RJMP	_exit
FILE: F:\应用\拷贝应用\icc-avr-lcd\main01.c
(0001) #include<io8515.h> 
(0002) //**************************************
(0003) void Cacu_Display(unsigned char temp);
(0004) void Display(unsigned char DisNum);
(0005) void main()
(0006) 	 {   DDRB=0b11111111;	
_main:
    0039 EF8F      LDI	R24,0xFF
    003A BB87      OUT	0x17,R24
(0007) 	 	 //DDRA=0b11111111;
(0008) 		// DDRC=0b11111111;
(0009) 		 //DDRD=0b11111111;
(0010) 		 
(0011) 	    //Cacu_Display(0255);
(0012) 		//PORTA=0b01010101;
(0013) 		//PORTB=0b01010101;
(0014) 		//PORTC=0b01010101;
(0015) 		//PORTD=0b01010101;
(0016) 		 Display(1);
    003B E001      LDI	R16,1
    003C D008      RCALL	_Display
(0017) 		 Display(2);
    003D E002      LDI	R16,2
    003E D006      RCALL	_Display
(0018) 		 Display(3);
    003F E003      LDI	R16,3
    0040 D004      RCALL	_Display
(0019) 		 Display(4);
    0041 E004      LDI	R16,4
    0042 D002      RCALL	_Display
(0020) 		while(1)
    0043 CFFF      RJMP	0x0043
    0044 9508      RET
_Display:
  Disi                 --> R20
  DisTem               --> R22
  DisNum               --> R10
    0045 D05B      RCALL	push_gset3
    0046 2EA0      MOV	R10,R16
FILE: F:\应用\拷贝应用\icc-avr-lcd\Display.c
(0001) #include<io8515.h> 
(0002) //***************************************************
(0003) //显示子程序,用于显示一个数字,小数点在最高位。
(0004) //传递一个0-9的数字  
(0005) //DisPort——显示的端口。DisPortD——端口方向。
(0006) //DisTab[10]——显示码(const unsigned char)
(0007) //74ls4093三个输入口 str,dada,clock  
(0008) //and3=str+data+clock. 
(0009) //**************************************************
(0010) //P0  data
(0011) //P1  clock
(0012) //P2   TRO
(0013) //STR-PB0   CLOCK-PB1   DATA-PB2
(0014) #define  DisPort   PORTB
(0015) #define  DisDdr    DDRB
(0016) #define  str       0b00000100
(0017) #define  data      0b00000001
(0018) #define  clock     0b00000010
(0019) #define  and3      0b00000111
(0020) 
(0021) //===============================================================
(0022) unsigned char num[4];
(0023) //最后三条为"E""-""全灭"
(0024) const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
(0025)                                   0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
(0026)                                    
(0027) //=============================================================== 
(0028) void Display(unsigned char DisNum)
(0029) {  unsigned char DisTem;
(0030)    unsigned char Disi=8;
    0047 E048      LDI	R20,0x8
(0031)    DisTem= DisNum;
    0048 2D6A      MOV	R22,R10
(0032)    DisTem=DisTem&0b01111111;
    0049 776F      ANDI	R22,0x7F
(0033)    DisTem=DisTab[DisTem];
    004A E282      LDI	R24,0x22
    004B E090      LDI	R25,0
    004C 2FE6      MOV	R30,R22
    004D 27FF      CLR	R31
    004E 0FE8      ADD	R30,R24
    004F 1FF9      ADC	R31,R25
    0050 9164      LPM	R22,0(Z)
(0034)    DisNum=DisNum&0b10000000;
    0051 2D8A      MOV	R24,R10
    0052 7880      ANDI	R24,0x80
    0053 2EA8      MOV	R10,R24
(0035)    DisNum=DisNum|DisTem;
    0054 2AA6      OR	R10,R22
(0036)    DisNum=~DisNum;
    0055 94A0      COM	R10
(0037)    DisDdr=and3;
    0056 E087      LDI	R24,7
    0057 BB87      OUT	0x17,R24
(0038)    DisPort=DisPort|str;//set str=1  	
    0058 9AC2      SBI	0x18,2
    0059 C010      RJMP	0x006A
(0039) 	while(Disi)
(0040) 	   {DisTem=DisNum;
    005A 2D6A      MOV	R22,R10
(0041) 	    DisPort=DisPort&~clock;//clock=0
    005B 98C1      CBI	0x18,1
(0042) 	    DisTem=DisTem>>(Disi-1);
    005C 2F14      MOV	R17,R20
    005D 5011      SUBI	R17,1
    005E 2F06      MOV	R16,R22
    005F D05C      RCALL	lsr8
    0060 2F60      MOV	R22,R16
(0043) 	    DisTem=DisTem&0b00000001;
    0061 7061      ANDI	R22,1
(0044) 	    if(DisTem==1)
    0062 3061      CPI	R22,1
    0063 F419      BNE	0x0067
(0045) 		      {DisPort=DisPort|data;
    0064 9AC0      SBI	0x18,0
(0046) 			   DisPort=DisPort|clock;}
    0065 9AC1      SBI	0x18,1
    0066 C002      RJMP	0x0069
(0047) 		else
(0048) 		      {DisPort=DisPort&~data;
    0067 98C0      CBI	0x18,0
(0049) 			   DisPort=DisPort|clock;}      	  
    0068 9AC1      SBI	0x18,1
(0050) 	    Disi--;
    0069 954A      DEC	R20
    006A 2344      TST	R20
    006B F771      BNE	0x005A
    006C D02E      RCALL	pop_gset3
    006D 9508      RET
_Cacu_Display:
  num                  --> Y+0
  temp                 --> R20
    006E D036      RCALL	push_gset1
    006F 2F40      MOV	R20,R16
    0070 9723      SBIW	R28,3
(0051) 	    }	
(0052) }	
(0053) //=============================================================
(0054) //***************************************************************
(0055) //计算显示一个不带小数点的四位数
(0056) void Cacu_Display(unsigned char temp)
(0057) {  unsigned char num[3]={0,0,0};
    0071 E28F      LDI	R24,0x2F
    0072 E090      LDI	R25,0
    0073 01FE      MOVW	R30,R28
    0074 E003      LDI	R16,3
    0075 E010      LDI	R17,0
    0076 93FA      ST	R31,-Y
    0077 93EA      ST	R30,-Y
    0078 939A      ST	R25,-Y
    0079 938A      ST	R24,-Y
    007A D047      RCALL	asgncblk
    007B C004      RJMP	0x0080
(0058)    
(0059)     while(temp>=1000)
(0060) 			 {
(0061) 			   temp=temp-1000;								 
    007C 5E48      SUBI	R20,0xE8
(0062) 			   num[2]=num[2]+1;
    007D 818A      LDD	R24,Y+2
    007E 5F8F      SUBI	R24,0xFF
    007F 838A      STD	Y+2,R24
    0080 3E48      CPI	R20,0xE8
    0081 F7D4      BGE	0x007C
    0082 C004      RJMP	0x0087
(0063) 			 }
(0064)    while(temp>=100)
(0065) 		     {
(0066) 			  temp=temp-100;
    0083 5644      SUBI	R20,0x64
(0067) 			  num[1]=num[1]+1;
    0084 8189      LDD	R24,Y+1
    0085 5F8F      SUBI	R24,0xFF
    0086 8389      STD	Y+1,R24
    0087 3644      CPI	R20,0x64
    0088 F7D0      BCC	0x0083
    0089 C004      RJMP	0x008E
(0068) 		     }
(0069)    while(temp>=10)
(0070) 			 {
(0071) 			   temp=temp-10;
    008A 504A      SUBI	R20,0xA
(0072) 		       num[0]=num[0]+1;
    008B 8188      LDD	R24,Y+0
    008C 5F8F      SUBI	R24,0xFF
    008D 8388      STD	Y+0,R24
    008E 304A      CPI	R20,0xA
    008F F7D0      BCC	0x008A
(0073) 			 } 
(0074)    Display(temp); 
    0090 2F04      MOV	R16,R20
    0091 DFB3      RCALL	_Display
(0075)    Display(num[0]);
    0092 8108      LDD	R16,Y+0
    0093 DFB1      RCALL	_Display
(0076)    Display(num[1]); 			  
    0094 8109      LDD	R16,Y+1
    0095 DFAF      RCALL	_Display
(0077)    Display(num[2]);
FILE: <library>
    0096 810A      LDD	R16,Y+2
    0097 DFAD      RCALL	_Display
    0098 9623      ADIW	R28,3
    0099 D00E      RCALL	pop_gset1
    009A 9508      RET
pop_gset3:
    009B E0E4      LDI	R30,4
    009C C00C      RJMP	pop
push_gset5:
    009D 92FA      ST	R15,-Y
    009E 92EA      ST	R14,-Y
push_gset4:
    009F 92DA      ST	R13,-Y
    00A0 92CA      ST	R12,-Y
push_gset3:
    00A1 92BA      ST	R11,-Y
    00A2 92AA      ST	R10,-Y
push_gset2:
    00A3 937A      ST	R23,-Y
    00A4 936A      ST	R22,-Y
push_gset1:
    00A5 935A      ST	R21,-Y
    00A6 934A      ST	R20,-Y
    00A7 9508      RET
pop_gset1:
    00A8 E0E1      LDI	R30,1
pop:
    00A9 9149      LD	R20,Y+
    00AA 9159      LD	R21,Y+
    00AB FDE0      SBRC	R30,0
    00AC 9508      RET
    00AD 9169      LD	R22,Y+
    00AE 9179      LD	R23,Y+
    00AF FDE1      SBRC	R30,1
    00B0 9508      RET
    00B1 90A9      LD	R10,Y+
    00B2 90B9      LD	R11,Y+
    00B3 FDE2      SBRC	R30,2
    00B4 9508      RET
    00B5 90C9      LD	R12,Y+
    00B6 90D9      LD	R13,Y+
    00B7 FDE3      SBRC	R30,3
    00B8 9508      RET
    00B9 90E9      LD	R14,Y+
    00BA 90F9      LD	R15,Y+
    00BB 9508      RET
lsr8:
    00BC 2311      TST	R17
    00BD F019      BEQ	0x00C1
    00BE 9506      LSR	R16
    00BF 951A      DEC	R17
    00C0 CFFB      RJMP	lsr8
    00C1 9508      RET
asgncblk:
    00C2 93AA      ST	R26,-Y
    00C3 93BA      ST	R27,-Y
    00C4 93EA      ST	R30,-Y
    00C5 93FA      ST	R31,-Y
    00C6 920A      ST	R0,-Y
    00C7 81AF      LDD	R26,Y+7
    00C8 85B8      LDD	R27,Y+8
    00C9 81ED      LDD	R30,Y+5
    00CA 81FE      LDD	R31,Y+6
    00CB 3000      CPI	R16,0
    00CC 0701      CPC	R16,R17
    00CD F031      BEQ	0x00D4
    00CE 95C8      LPM
    00CF 920D      ST	R0,X+
    00D0 9631      ADIW	R30,1
    00D1 5001      SUBI	R16,1
    00D2 4010      SBCI	R17,0
    00D3 CFF7      RJMP	0x00CB
    00D4 9009      LD	R0,Y+
    00D5 91F9      LD	R31,Y+
    00D6 91E9      LD	R30,Y+
    00D7 91B9      LD	R27,Y+
    00D8 91A9      LD	R26,Y+
    00D9 9624      ADIW	R28,4
    00DA 9508      RET

⌨️ 快捷键说明

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