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

📄 lcm.lst

📁 8位液晶屏LCM0825的点亮源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    001F E5CF      LDI	R28,0x5F
    0020 E0D4      LDI	R29,4
    0021 BFCD      OUT	0x3D,R28
    0022 BFDE      OUT	0x3E,R29
    0023 51C0      SUBI	R28,0x10
    0024 40D0      SBCI	R29,0
    0025 EA0A      LDI	R16,0xAA
    0026 8308      STD	Y+0,R16
    0027 2400      CLR	R0
    0028 E6E0      LDI	R30,0x60
    0029 E0F0      LDI	R31,0
    002A E010      LDI	R17,0
    002B 36E0      CPI	R30,0x60
    002C 07F1      CPC	R31,R17
    002D F011      BEQ	0x0030
    002E 9201      ST	R0,Z+
    002F CFFB      RJMP	0x002B
    0030 8300      STD	Z+0,R16
    0031 E3EE      LDI	R30,0x3E
    0032 E0F0      LDI	R31,0
    0033 E6A0      LDI	R26,0x60
    0034 E0B0      LDI	R27,0
    0035 E010      LDI	R17,0
    0036 33EE      CPI	R30,0x3E
    0037 07F1      CPC	R31,R17
    0038 F021      BEQ	0x003D
    0039 95C8      LPM
    003A 9631      ADIW	R30,1
    003B 920D      ST	R0,X+
    003C CFF9      RJMP	0x0036
    003D D0F3      RCALL	_main
_exit:
    003E CFFF      RJMP	_exit
FILE: G:\AVR系列\LCM0825\lcm.c
(0001) //lcm.c
(0002) //液晶显示程序
(0003) #include<iom8v.h>
(0004) void delay_1us(void)//1us延时程序
(0005)  {
(0006)   unsigned  int k;
(0007)   for(k=1;k<10;k++) 
_delay_1us:
  k                    --> R16
    003F E001      LDI	R16,1
    0040 E010      LDI	R17,0
    0041 C002      RJMP	0x0044
    0042 5F0F      SUBI	R16,0xFF
    0043 4F1F      SBCI	R17,0xFF
    0044 300A      CPI	R16,0xA
    0045 E0E0      LDI	R30,0
    0046 071E      CPC	R17,R30
    0047 F3D0      BCS	0x0042
    0048 9508      RET
(0008)   ;
(0009)  }
(0010) 
(0011)  void delay_1ms(void)//1ms延时程序
(0012)  {
(0013)   unsigned  int k;
(0014)   for(k=1;k<856;k++) 
_delay_1ms:
  k                    --> R16
    0049 E001      LDI	R16,1
    004A E010      LDI	R17,0
    004B C002      RJMP	0x004E
    004C 5F0F      SUBI	R16,0xFF
    004D 4F1F      SBCI	R17,0xFF
    004E 3508      CPI	R16,0x58
    004F E0E3      LDI	R30,3
    0050 071E      CPC	R17,R30
    0051 F3D0      BCS	0x004C
    0052 9508      RET
_delay:
  l                    --> R20
  m                    --> R22
    0053 D148      RCALL	push_gset2
    0054 01B8      MOVW	R22,R16
(0015)   ;
(0016)  }
(0017)   void delay(unsigned int m)//延时m ms程序
(0018)  {
(0019)   unsigned  int l;
(0020)   
(0021)   for(l=0;l<m;l++) 
    0055 2744      CLR	R20
    0056 2755      CLR	R21
    0057 C003      RJMP	0x005B
(0022)   delay_1ms();
    0058 DFF0      RCALL	_delay_1ms
    0059 5F4F      SUBI	R20,0xFF
    005A 4F5F      SBCI	R21,0xFF
    005B 1746      CP	R20,R22
    005C 0757      CPC	R21,R23
    005D F3D0      BCS	0x0058
    005E D133      RCALL	pop_gset2
    005F 9508      RET
_data_0:
  i                    --> R20
  n                    --> R22
    0060 D13B      RCALL	push_gset2
    0061 01B8      MOVW	R22,R16
(0023)  }
(0024) 
(0025)  void data_0(unsigned int n)//传输N个0
(0026) { int i;
(0027)    for(i=0;i<n;i++)
    0062 2744      CLR	R20
    0063 2755      CLR	R21
    0064 C00C      RJMP	0x0071
(0028)    {
(0029)    
(0030)    PORTD&=0x7F; delay_1us();//data=0
    0065 B382      IN	R24,0x12
    0066 778F      ANDI	R24,0x7F
    0067 BB82      OUT	0x12,R24
    0068 DFD6      RCALL	_delay_1us
(0031)    PORTD&=0xBF;delay_1us();//wr=0
    0069 B382      IN	R24,0x12
    006A 7B8F      ANDI	R24,0xBF
    006B BB82      OUT	0x12,R24
    006C DFD2      RCALL	_delay_1us
(0032)    PORTD|=0x40; delay_1us();//wr=1
    006D 9A96      SBI	0x12,6
    006E DFD0      RCALL	_delay_1us
    006F 5F4F      SUBI	R20,0xFF
    0070 4F5F      SBCI	R21,0xFF
    0071 1746      CP	R20,R22
    0072 0757      CPC	R21,R23
    0073 F388      BCS	0x0065
    0074 D11D      RCALL	pop_gset2
    0075 9508      RET
_data_1:
  i                    --> R20
  n                    --> R22
    0076 D125      RCALL	push_gset2
    0077 01B8      MOVW	R22,R16
(0033)    }
(0034)  }
(0035)  
(0036)  void data_1(unsigned int n)//传输N个1
(0037) { int i;
(0038)    for(i=0;i<n;i++)
    0078 2744      CLR	R20
    0079 2755      CLR	R21
    007A C00D      RJMP	0x0088
(0039)    {
(0040)     PORTD&=0x7f; 
    007B B382      IN	R24,0x12
    007C 778F      ANDI	R24,0x7F
    007D BB82      OUT	0x12,R24
(0041)    PORTD|=0x80;delay_1us();//data=1
    007E 9A97      SBI	0x12,7
    007F DFBF      RCALL	_delay_1us
(0042)    PORTD&=0xBF;delay_1us();//wr=0
    0080 B382      IN	R24,0x12
    0081 7B8F      ANDI	R24,0xBF
    0082 BB82      OUT	0x12,R24
    0083 DFBB      RCALL	_delay_1us
(0043)    PORTD|=0x40;delay_1us();//wr=1
    0084 9A96      SBI	0x12,6
    0085 DFB9      RCALL	_delay_1us
    0086 5F4F      SUBI	R20,0xFF
    0087 4F5F      SBCI	R21,0xFF
    0088 1746      CP	R20,R22
    0089 0757      CPC	R21,R23
    008A F380      BCS	0x007B
    008B D106      RCALL	pop_gset2
    008C 9508      RET
_write_lcd:
  j                    --> R20
  dat                  --> R22
  data                 --> R10
  n                    --> R20
    008D D10C      RCALL	push_gset3
    008E 2EA2      MOV	R10,R18
    008F 2F40      MOV	R20,R16
(0044)    }
(0045)  }
(0046)  
(0047) 
(0048) void write_lcd(char n,unsigned char data )
(0049)  {
(0050)    char j;
(0051)    unsigned char dat=data;
    0090 2D6A      MOV	R22,R10
(0052)     DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
    0091 EF80      LDI	R24,0xF0
    0092 BB81      OUT	0x11,R24
    0093 DFAB      RCALL	_delay_1us
(0053)  PORTD=0xff; delay_1us();
    0094 EF8F      LDI	R24,0xFF
    0095 BB82      OUT	0x12,R24
    0096 DFA8      RCALL	_delay_1us
(0054)   switch(n)
    0097 2755      CLR	R21
    0098 304A      CPI	R20,0xA
    0099 E0E0      LDI	R30,0
    009A 075E      CPC	R21,R30
    009B F409      BNE	0x009D
    009C C062      RJMP	0x00FF
    009D 304C      CPI	R20,0xC
    009E E0E0      LDI	R30,0
    009F 075E      CPC	R21,R30
    00A0 F029      BEQ	0x00A6
    00A1 304D      CPI	R20,0xD
    00A2 E0E0      LDI	R30,0
    00A3 075E      CPC	R21,R30
    00A4 F161      BEQ	0x00D1
    00A5 C089      RJMP	0x012F
(0055)   { 
(0056)    case 12://写命令
(0057)    {
(0058)   
(0059)     PORTD&=0xef;delay_1us(); 
    00A6 B382      IN	R24,0x12
    00A7 7E8F      ANDI	R24,0xEF
    00A8 BB82      OUT	0x12,R24
    00A9 DF95      RCALL	_delay_1us
(0060) 	data_1(1);
    00AA E001      LDI	R16,1
    00AB E010      LDI	R17,0
    00AC DFC9      RCALL	_data_1
(0061) 	data_0(2);
    00AD E002      LDI	R16,2
    00AE E010      LDI	R17,0
    00AF DFB0      RCALL	_data_0
(0062) 	for(j=0;j<8;j++)
    00B0 2744      CLR	R20
    00B1 C013      RJMP	0x00C5
(0063)     { 
(0064)      PORTD&=0x7f; delay_1us();      
    00B2 B382      IN	R24,0x12
    00B3 778F      ANDI	R24,0x7F
    00B4 BB82      OUT	0x12,R24
    00B5 DF89      RCALL	_delay_1us
(0065)      PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
    00B6 2F86      MOV	R24,R22
    00B7 7880      ANDI	R24,0x80
    00B8 B222      IN	R2,0x12
    00B9 2A28      OR	R2,R24
    00BA BA22      OUT	0x12,R2
    00BB DF83      RCALL	_delay_1us
(0066)      PORTD&=0xbf;delay_1us(); 
    00BC B382      IN	R24,0x12
    00BD 7B8F      ANDI	R24,0xBF
    00BE BB82      OUT	0x12,R24
    00BF DF7F      RCALL	_delay_1us
(0067) 	 PORTD|=0x40;delay_1us();                 
    00C0 9A96      SBI	0x12,6
    00C1 DF7D      RCALL	_delay_1us
(0068)      dat=(dat<<1);delay_1us();  
    00C2 0F66      LSL	R22
    00C3 DF7B      RCALL	_delay_1us
    00C4 9543      INC	R20
    00C5 3048      CPI	R20,0x8
    00C6 F358      BCS	0x00B2
(0069) 	 
(0070)     }
(0071) 	data_0(1);
    00C7 E001      LDI	R16,1
    00C8 E010      LDI	R17,0
    00C9 DF96      RCALL	_data_0
(0072) 	PORTD|=0x10;delay_1us(); 
    00CA 9A94      SBI	0x12,4
    00CB DF73      RCALL	_delay_1us
(0073) 	PORTD|=0xc0;delay_1us();
    00CC B382      IN	R24,0x12
    00CD 6C80      ORI	R24,0xC0
    00CE BB82      OUT	0x12,R24
    00CF DF6F      RCALL	_delay_1us
(0074) 	//delay(100);
(0075)    }break;
    00D0 C05E      RJMP	0x012F
(0076) case 13://写最低位数据
(0077)    {
(0078)   
(0079)   
(0080)     PORTD&=0xef;delay_1us(); 
    00D1 B382      IN	R24,0x12
    00D2 7E8F      ANDI	R24,0xEF
    00D3 BB82      OUT	0x12,R24
    00D4 DF6A      RCALL	_delay_1us
(0081) 	 data_1(1);
    00D5 E001      LDI	R16,1
    00D6 E010      LDI	R17,0
    00D7 DF9E      RCALL	_data_1
(0082)    data_0(1);
    00D8 E001      LDI	R16,1
    00D9 E010      LDI	R17,0
    00DA DF85      RCALL	_data_0
(0083)    data_1(2);
    00DB E002      LDI	R16,2
    00DC E010      LDI	R17,0
    00DD DF98      RCALL	_data_1
(0084)    data_0(1);
    00DE E001      LDI	R16,1
    00DF E010      LDI	R17,0
    00E0 DF7F      RCALL	_data_0
(0085) 	for(j=0;j<8;j++)
    00E1 2744      CLR	R20
    00E2 C013      RJMP	0x00F6
(0086)     { 
(0087) 	
(0088)      PORTD&=0x7f;  delay_1us();       
    00E3 B382      IN	R24,0x12
    00E4 778F      ANDI	R24,0x7F
    00E5 BB82      OUT	0x12,R24
    00E6 DF58      RCALL	_delay_1us
(0089)      PORTD|=(dat&0x80);delay_1us(); 
    00E7 2F86      MOV	R24,R22
    00E8 7880      ANDI	R24,0x80

⌨️ 快捷键说明

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