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

📄 洗衣机.lst

📁 自己做的AVR洗衣机模型程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
      B5 E5CF      LDI	R28,0x5F
      B6 E0D4      LDI	R29,4
      B7 BFCD      OUT	0x3D,R28
      B8 BFDE      OUT	0x3E,R29
      B9 51C0      SUBI	R28,0x10
      BA 40D0      SBCI	R29,0
      BB EA0A      LDI	R16,0xAA
      BC 8308      STD	Y+0,R16
      BD 2400      CLR	R0
      BE E7E6      LDI	R30,0x76
      BF E0F1      LDI	R31,1
      C0 E011      LDI	R17,1
      C1 39E7      CPI	R30,0x97
      C2 07F1      CPC	R31,R17
      C3 F011      BEQ	0x00C6
      C4 9201      ST	R0,Z+
      C5 CFFB      RJMP	0x00C1
      C6 8300      STD	Z+0,R16
      C7 E5E4      LDI	R30,0x54
      C8 E0F0      LDI	R31,0
      C9 E6A0      LDI	R26,0x60
      CA E0B0      LDI	R27,0
      CB E011      LDI	R17,1
      CC E000      LDI	R16,0
      CD BF0B      OUT	0x3B,R16
      CE 36EA      CPI	R30,0x6A
      CF 07F1      CPC	R31,R17
      D0 F021      BEQ	0x00D5
      D1 95C8      LPM
      D2 9631      ADIW	R30,1
      D3 920D      ST	R0,X+
      D4 CFF9      RJMP	0x00CE
      D5 940E 077A CALL	_main
_exit:
      D7 CFFF      RJMP	_exit
_Char_Set_XY:
  i                    --> R10
  p                    --> R12
  y                    --> R10
  x                    --> R20
      D8 940E 0B0D CALL	push_xgsetF03C
      DA 2EA2      MOV	R10,R18
      DB 2F40      MOV	R20,R16
      DC 9721      SBIW	R28,1
      DD 84C9      LDD	R12,Y+9
      DE 84DA      LDD	R13,Y+10
FILE: F:\AVR洗衣机\洗衣机主机\LCD_Driver.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) #define nop()  NOP()
(0005) 
(0006) 
(0007) #define Set_CS() DDRA |= (1<<0);PORTA |= (1<<0)
(0008) #define Set_SID() DDRA |= (1<<1);PORTA |= (1<<1)
(0009) #define Set_SCLK() DDRA |= (1<<2);PORTA |= (1<<2)
(0010) 
(0011) #define Clr_CS() DDRA |= (1<<0);PORTA &=~(1<<0)
(0012) #define Clr_SID() DDRA |= (1<<1);PORTA &=~(1<<1)
(0013) #define Clr_SCLK() DDRA |= (1<<2);PORTA &=~(1<<2)
(0014) #define cls  W_1byte(0,0,0x01)//清屏
(0015) 
(0016)  
(0017) //====================================================================
(0018) //函数声明
(0019) void Delay(uint ms);      //延时子程序
(0020) void W_1byte(uchar RW, uchar RS, uchar W_data);
(0021) void Write_8bits(uint W_bits);
(0022) void LCD_Init(void);
(0023) /********************************************************************
(0024) ********************************************************************/ 
(0025) //===================================================================
(0026) 
(0027) /********************************************************************
(0028) 09.5.10
(0029) 影龙   未完成
(0030) 在(x,y)点写句子,能实现换行功能
(0031) ********************************************************************/
(0032) /*
(0033) void Set_XY_str(uchar x, uchar y, uchar *p) 
(0034) {
(0035) uchar counter; 
(0036) counter=x*2-1;//把X值赋给COUNTER
(0037) x--;
(0038) switch (y)
(0039) {
(0040) case 1:W_1byte(0,0,(0x80+x));
(0041) case 2:W_1byte(0,0,(0x90+x));
(0042) case 3:W_1byte(0,0,(0x88+x));
(0043) case 4:W_1byte(0,0,(0x98+x));
(0044) }
(0045) 
(0046) 	while(*p != 0)
(0047) 	{counter++;
(0048) 	    if(counter==16)//假如定时器等于8且为单数行
(0049) 		 {y++;
(0050) 		  counter=1;
(0051) 		 switch (y)
(0052) 		  {
(0053) 		  case 1:W_1byte(0,0,0x80);counter=0;break;
(0054) 		  case 2:W_1byte(0,0,0x90);counter=0;break;
(0055) 		  case 3:W_1byte(0,0,0x88);counter=0;break;
(0056) 		  case 4:W_1byte(0,0,0x98);counter=0;break;
(0057) 		  default:break;
(0058) 		  }
(0059) 		 }		  
(0060) 		W_1byte(0,1,*p++);//写字节数据
(0061) 	}
(0062) }
(0063) */
(0064) 
(0065) void Char_Set_XY(uchar x, uchar y, uchar *p) 
(0066) {
(0067) uchar i;
(0068)  
(0069) switch (y)
      DF 2D6A      MOV	R22,R10
      E0 2777      CLR	R23
      E1 3060      CPI	R22,0
      E2 0767      CPC	R22,R23
      E3 F069      BEQ	0x00F1
      E4 3061      CPI	R22,1
      E5 E0E0      LDI	R30,0
      E6 077E      CPC	R23,R30
      E7 F081      BEQ	0x00F8
      E8 3062      CPI	R22,2
      E9 E0E0      LDI	R30,0
      EA 077E      CPC	R23,R30
      EB F099      BEQ	0x00FF
      EC 3063      CPI	R22,3
      ED E0E0      LDI	R30,0
      EE 077E      CPC	R23,R30
      EF F0B1      BEQ	0x0106
      F0 C01B      RJMP	0x010C
(0070) {
(0071) case 0:W_1byte(0,0,(0x80+x));break;
      F1 2F84      MOV	R24,R20
      F2 5880      SUBI	R24,0x80
      F3 8388      STD	Y+0,R24
      F4 2722      CLR	R18
      F5 2700      CLR	R16
      F6 D09A      RCALL	_W_1byte
      F7 C014      RJMP	0x010C
(0072) case 1:W_1byte(0,0,(0x90+x));break;
      F8 2F84      MOV	R24,R20
      F9 5780      SUBI	R24,0x70
      FA 8388      STD	Y+0,R24
      FB 2722      CLR	R18
      FC 2700      CLR	R16
      FD D093      RCALL	_W_1byte
      FE C00D      RJMP	0x010C
(0073) case 2:W_1byte(0,0,(0x88+x));break;
      FF 2F84      MOV	R24,R20
     100 5788      SUBI	R24,0x78
     101 8388      STD	Y+0,R24
     102 2722      CLR	R18
     103 2700      CLR	R16
     104 D08C      RCALL	_W_1byte
     105 C006      RJMP	0x010C
(0074) case 3:W_1byte(0,0,(0x98+x));break;
     106 2F84      MOV	R24,R20
     107 5688      SUBI	R24,0x68
     108 8388      STD	Y+0,R24
     109 2722      CLR	R18
     10A 2700      CLR	R16
     10B D085      RCALL	_W_1byte
(0075) default:break;
(0076) }
(0077)   nop();
     10C 0000      NOP
(0078)   for(i=0;p[i]!='\0';i++)
     10D 24AA      CLR	R10
     10E C00B      RJMP	0x011A
(0079)   {
(0080)    W_1byte(0,1,p[i]);
     10F 2DEA      MOV	R30,R10
     110 27FF      CLR	R31
     111 0DEC      ADD	R30,R12
     112 1DFD      ADC	R31,R13
     113 8020      LDD	R2,Z+0
     114 8228      STD	Y+0,R2
     115 E021      LDI	R18,1
     116 2700      CLR	R16
     117 D079      RCALL	_W_1byte
(0081)      nop();
     118 0000      NOP
     119 94A3      INC	R10
     11A 2DEA      MOV	R30,R10
     11B 27FF      CLR	R31
     11C 0DEC      ADD	R30,R12
     11D 1DFD      ADC	R31,R13
     11E 8020      LDD	R2,Z+0
     11F 2022      TST	R2
     120 F771      BNE	0x010F
(0082)   }
(0083)   nop();
     121 0000      NOP
     122 9621      ADIW	R28,1
     123 940C 0B16 JMP	pop_xgsetF03C
_Set_XY:
  y                    --> R10
  x                    --> R20
     125 940E 0AF1 CALL	push_xgsetF00C
     127 2EA2      MOV	R10,R18
     128 2F40      MOV	R20,R16
     129 9721      SBIW	R28,1
(0084) }
(0085) 
(0086) void Set_XY(uchar x,uchar y)
(0087) {
(0088) nop();
     12A 0000      NOP
(0089) switch (y)
     12B 2D6A      MOV	R22,R10
     12C 2777      CLR	R23
     12D 3060      CPI	R22,0
     12E 0767      CPC	R22,R23
     12F F069      BEQ	0x013D
     130 3061      CPI	R22,1
     131 E0E0      LDI	R30,0
     132 077E      CPC	R23,R30
     133 F081      BEQ	0x0144
     134 3062      CPI	R22,2
     135 E0E0      LDI	R30,0
     136 077E      CPC	R23,R30
     137 F099      BEQ	0x014B
     138 3063      CPI	R22,3
     139 E0E0      LDI	R30,0
     13A 077E      CPC	R23,R30
     13B F0B1      BEQ	0x0152
     13C C01B      RJMP	0x0158
(0090) {
(0091) case 0:W_1byte(0,0,(0x80+x));break;
     13D 2F84      MOV	R24,R20
     13E 5880      SUBI	R24,0x80
     13F 8388      STD	Y+0,R24
     140 2722      CLR	R18
     141 2700      CLR	R16
     142 D04E      RCALL	_W_1byte
     143 C014      RJMP	0x0158
(0092) case 1:W_1byte(0,0,(0x90+x));break;
     144 2F84      MOV	R24,R20
     145 5780      SUBI	R24,0x70
     146 8388      STD	Y+0,R24
     147 2722      CLR	R18
     148 2700      CLR	R16
     149 D047      RCALL	_W_1byte
     14A C00D      RJMP	0x0158
(0093) case 2:W_1byte(0,0,(0x88+x));break;
     14B 2F84      MOV	R24,R20
     14C 5788      SUBI	R24,0x78
     14D 8388      STD	Y+0,R24
     14E 2722      CLR	R18
     14F 2700      CLR	R16
     150 D040      RCALL	_W_1byte
     151 C006      RJMP	0x0158
(0094) case 3:W_1byte(0,0,(0x98+x));break;
     152 2F84      MOV	R24,R20
     153 5688      SUBI	R24,0x68
     154 8388      STD	Y+0,R24
     155 2722      CLR	R18
     156 2700      CLR	R16
     157 D039      RCALL	_W_1byte
(0095) default:break;
(0096) }
(0097) nop();
     158 0000      NOP
     159 9621      ADIW	R28,1
     15A 940C 0AF8 JMP	pop_xgsetF00C
(0098) }
(0099) 
(0100) void Display_init(void)
(0101) {
(0102)  Clr_CS();
_Display_init:
     15C 9AD0      SBI	0x1A,0
     15D 98D8      CBI	0x1B,0
(0103)  Clr_SID();
     15E 9AD1      SBI	0x1A,1
     15F 98D9      CBI	0x1B,1
(0104)  Clr_SCLK();
     160 9AD2      SBI	0x1A,2
     161 98DA      CBI	0x1B,2
(0105)  LCD_Init();
     162 D001      RCALL	_LCD_Init
     163 9508      RET
_LCD_Init:
  cmd                  --> R20
     164 934A      ST	R20,-Y
     165 9721      SBIW	R28,1
(0106) /* //while(1){ 
(0107)   nop();
(0108)   nop();
(0109)   W_1byte(0,0,0x80);   //显示的地址0x80
(0110)   nop();
(0111)   for(i=0;mynew1[i]!='\0';i++)
(0112)   {
(0113)    W_1byte(0,1,mynew1[i]);
(0114)   }
(0115)   W_1byte(0,0,0x90);     //显示的地址0x90
(0116)   for(i=0;mynew2[i]!='\0';i++)
(0117)   {
(0118)    W_1byte(0,1,mynew2[i]); 
(0119)   }
(0120)   W_1byte(0,0,0x88);   //显示的地址0x88
(0121)   for(i=0;mynew3[i]!='\0';i++)
(0122)   {
(0123)    W_1byte(0,1,mynew3[i]);
(0124)   }
(0125)   W_1byte(0,0,0x98);     //显示的地址0x98
(0126)   for(i=0;mynew4[i]!='\0';i++)
(0127)   {
(0128)    W_1byte(0,1,mynew4[i]);
(0129)   }
(0130)   nop();
(0131) //  for(;;)
(0132) //  {
(0133) //    continue;
(0134) //  } 
(0135) // }
(0136) */
(0137) }
(0138) /******************************************************************/
(0139) void LCD_Init(void)
(0140) {
(0141)   uchar cmd;
(0142)   cmd=0x30;   //功能设置 8位数据,基本指令
     166 E340      LDI	R20,0x30
(0143)  W_1byte(0,0,cmd);
     167 8348      STD	Y+0,R20
     168 2722      CLR	R18
     169 2700      CLR	R16
     16A D026      RCALL	_W_1byte
(0144)  Delay(2);
     16B E002      LDI	R16,2
     16C E010      LDI	R17,0
     16D D09A      RCALL	_Delay
(0145)  cmd=0x0C;   //显示状态 ON,游标OFF,反白OFF
     16E E04C      LDI	R20,0xC
(0146)  W_1byte(0,0,cmd); //写指令
     16F 8348      STD	Y+0,R20
     170 2722      CLR	R18
     171 2700      CLR	R16
     172 D01E      RCALL	_W_1byte
(0147)  Delay(2);
     173 E002      LDI	R16,2
     174 E010      LDI	R17,0
     175 D092      RCALL	_Delay
(0148)  cmd=0x01;   //清除显示
     176 E041      LDI	R20,1
(0149)  W_1byte(0,0,cmd); //写指令
     177 8348      STD	Y+0,R20
     178 2722      CLR	R18
     179 2700      CLR	R16
     17A D016      RCALL	_W_1byte
(0150)  Delay(2);
     17B E002      LDI	R16,2
     17C E010      LDI	R17,0
     17D D08A      RCALL	_Delay
(0151)  cmd=0x02;   //地址归位
     17E E042      LDI	R20,2
(0152)  W_1byte(0,0,cmd); //写指令
     17F 8348      STD	Y+0,R20
     180 2722      CLR	R18
     181 2700      CLR	R16
     182 D00E      RCALL	_W_1byte
(0153)  Delay(2);
     183 E002      LDI	R16,2
     184 E010      LDI	R17,0
     185 D082      RCALL	_Delay
(0154)  cmd=0x80;   //设置DDRAM地址
     186 E840      LDI	R20,0x80
(0155)  W_1byte(0,0,cmd); //写指令
     187 8348      STD	Y+0,R20
     188 2722      CLR	R18
     189 2700      CLR	R16
     18A D006      RCALL	_W_1byte
(0156)  Delay(2);   //延时
     18B E002      LDI	R16,2
     18C E010      LDI	R17,0
     18D D07A      RCALL	_Delay
     18E 9621      ADIW	R28,1
     18F 9149      LD	R20,Y+
     190 9508      RET
_W_1byte:
  H_data               --> R22
  S_ID                 --> R10
  L_data               --> R20
  W_data               --> R12
  RS                   --> R14
  RW                   --> R20
     191 940E 0AD2 CALL	push_xgsetF0FC
     193 2EE2      MOV	R14,R18
     194 2F40      MOV	R20,R16
     195 84CA      LDD	R12,Y+10
(0157) }
(0158) /*******************************************************************
(0159) 函 数 名:W_1byte
(0160) 入口参数:RW、RS、W_data
(0161) 出口参数:无
(0162) 建立日期:2007年3月3日
(0163) 修改日期:
(0164) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0165) 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0166)    (一般RW都设为0,即只向液晶写数据,不读数据)
(0167)           RS=1,写入的是数据;RS=0,写入的是指令;
(0168)     一般模式:RW=0,RS=1;写数据
(0169)        RW=0,RS=0;写指令
(0170) ********************************************************************/
(0171) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0172) {
(0173) 	uint H_data,L_data,S_ID = 0xf8;	 //11111RWRS0
     196 EF88      LDI	R24,0xF8
     197 E090      LDI	R25,0
     198 015C      MOVW	R10,R24
(0174) 	nop();
     199 0000      NOP
(0175) 	if(RW == 0)
     19A 2344      TST	R20
     19B F419      BNE	0x019F
(0176) 	{
(0177) 	 	S_ID &=~ 0x04;
     19C 7F8B      ANDI	R24,0xFB
     19D 015C      MOVW	R10,R24
(0178) 	}
     19E C003      RJMP	0x01A2

⌨️ 快捷键说明

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