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

📄 lcd.lst

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

⌨️ 快捷键说明

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