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

📄 洗衣机.s

📁 自己做的AVR洗衣机模型程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module _洗衣机.c
	.area text(rom, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\洗衣机.c
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\洗衣机.c
_wat_lv::
	.blkb 1
	.area idata
	.byte 2
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\洗衣机.c
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e wat_lv _wat_lv c
_cycle::
	.blkb 1
	.area idata
	.byte 3
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e cycle _cycle c
_replay::
	.blkb 1
	.area idata
	.byte 2
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e replay _replay c
_health::
	.blkb 1
	.area idata
	.byte 2
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e health _health c
_flag_start::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e flag_start _flag_start c
_nn::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e nn _nn c
_t_1s::
	.blkb 1
	.area idata
	.byte 50
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e t_1s _t_1s c
_tt::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e tt _tt c
_tt_2::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e tt_2 _tt_2 c
_count::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbsym e count _count c
	.area text(rom, con, rel)
	.dbfile F:\AVR洗衣机\洗衣机主机\define.h
	.dbfile F:\AVR洗衣机\洗衣机主机\LCD_Driver.h
	.dbfunc e Char_Set_XY _Char_Set_XY fV
;              i -> R10
;              p -> R12,R13
;              y -> R10
;              x -> R20
	.even
_Char_Set_XY::
	xcall push_xgsetF03C
	mov R10,R18
	mov R20,R16
	sbiw R28,1
	ldd R12,y+9
	ldd R13,y+10
	.dbline -1
	.dbline 66
; #include <iom16v.h>
; #include <macros.h>
; 
; #define nop()  NOP()
; 
; 
; #define Set_CS() DDRA |= (1<<0);PORTA |= (1<<0)
; #define Set_SID() DDRA |= (1<<1);PORTA |= (1<<1)
; #define Set_SCLK() DDRA |= (1<<2);PORTA |= (1<<2)
; 
; #define Clr_CS() DDRA |= (1<<0);PORTA &=~(1<<0)
; #define Clr_SID() DDRA |= (1<<1);PORTA &=~(1<<1)
; #define Clr_SCLK() DDRA |= (1<<2);PORTA &=~(1<<2)
; #define cls  W_1byte(0,0,0x01)//清屏
; 
;  
; //====================================================================
; //函数声明
; void Delay(uint ms);      //延时子程序
; void W_1byte(uchar RW, uchar RS, uchar W_data);
; void Write_8bits(uint W_bits);
; void LCD_Init(void);
; /********************************************************************
; ********************************************************************/ 
; //===================================================================
; 
; /********************************************************************
; 09.5.10
; 影龙   未完成
; 在(x,y)点写句子,能实现换行功能
; ********************************************************************/
; /*
; void Set_XY_str(uchar x, uchar y, uchar *p) 
; {
; uchar counter; 
; counter=x*2-1;//把X值赋给COUNTER
; x--;
; switch (y)
; {
; case 1:W_1byte(0,0,(0x80+x));
; case 2:W_1byte(0,0,(0x90+x));
; case 3:W_1byte(0,0,(0x88+x));
; case 4:W_1byte(0,0,(0x98+x));
; }
; 
; 	while(*p != 0)
; 	{counter++;
; 	    if(counter==16)//假如定时器等于8且为单数行
; 		 {y++;
; 		  counter=1;
; 		 switch (y)
; 		  {
; 		  case 1:W_1byte(0,0,0x80);counter=0;break;
; 		  case 2:W_1byte(0,0,0x90);counter=0;break;
; 		  case 3:W_1byte(0,0,0x88);counter=0;break;
; 		  case 4:W_1byte(0,0,0x98);counter=0;break;
; 		  default:break;
; 		  }
; 		 }		  
; 		W_1byte(0,1,*p++);//写字节数据
; 	}
; }
; */
; 
; void Char_Set_XY(uchar x, uchar y, uchar *p) 
; {
	.dbline 69
; uchar i;
;  
; switch (y)
	mov R22,R10
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L5
X0:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L6
X1:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L7
X2:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L8
X3:
	xjmp L3
L5:
	.dbline 71
; {
; case 0:W_1byte(0,0,(0x80+x));break;
	mov R24,R20
	subi R24,128    ; addi 128
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 71
	xjmp L3
L6:
	.dbline 72
; case 1:W_1byte(0,0,(0x90+x));break;
	mov R24,R20
	subi R24,112    ; addi 144
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 72
	xjmp L3
L7:
	.dbline 73
; case 2:W_1byte(0,0,(0x88+x));break;
	mov R24,R20
	subi R24,120    ; addi 136
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 73
	xjmp L3
L8:
	.dbline 74
; case 3:W_1byte(0,0,(0x98+x));break;
	mov R24,R20
	subi R24,104    ; addi 152
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 74
	.dbline 75
; default:break;
L3:
	.dbline 77
; }
;   nop();
	nop
	.dbline 78
;   for(i=0;p[i]!='\0';i++)
	clr R10
	xjmp L12
L9:
	.dbline 79
;   {
	.dbline 80
;    W_1byte(0,1,p[i]);
	mov R30,R10
	clr R31
	add R30,R12
	adc R31,R13
	ldd R2,z+0
	std y+0,R2
	ldi R18,1
	clr R16
	xcall _W_1byte
	.dbline 81
;      nop();
	nop
	.dbline 82
;   }
L10:
	.dbline 78
	inc R10
L12:
	.dbline 78
	mov R30,R10
	clr R31
	add R30,R12
	adc R31,R13
	ldd R2,z+0
	tst R2
	brne L9
X4:
	.dbline 83
;   nop();
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF03C
	.dbsym r i 10 c
	.dbsym r p 12 pc
	.dbsym r y 10 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e Set_XY _Set_XY fV
;              y -> R10
;              x -> R20
	.even
_Set_XY::
	xcall push_xgsetF00C
	mov R10,R18
	mov R20,R16
	sbiw R28,1
	.dbline -1
	.dbline 87
; }
; 
; void Set_XY(uchar x,uchar y)
; {
	.dbline 88
; nop();
	nop
	.dbline 89
; switch (y)
	mov R22,R10
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L17
X5:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L18
X6:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L19
X7:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L20
X8:
	xjmp L15
L17:
	.dbline 91
; {
; case 0:W_1byte(0,0,(0x80+x));break;
	mov R24,R20
	subi R24,128    ; addi 128
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 91
	xjmp L15
L18:
	.dbline 92
; case 1:W_1byte(0,0,(0x90+x));break;
	mov R24,R20
	subi R24,112    ; addi 144
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 92
	xjmp L15
L19:
	.dbline 93
; case 2:W_1byte(0,0,(0x88+x));break;
	mov R24,R20
	subi R24,120    ; addi 136
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 93
	xjmp L15
L20:
	.dbline 94
; case 3:W_1byte(0,0,(0x98+x));break;
	mov R24,R20
	subi R24,104    ; addi 152
	std y+0,R24
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 94
	.dbline 95
; default:break;
L15:
	.dbline 97
; }
; nop();
	nop
	.dbline -2
L13:
	.dbline 0 ; func end
	adiw R28,1
	xjmp pop_xgsetF00C
	.dbsym r y 10 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e Display_init _Display_init fV
	.even
_Display_init::
	.dbline -1
	.dbline 101
; }
; 
; void Display_init(void)
; {
	.dbline 102
;  Clr_CS();
	sbi 0x1a,0
	.dbline 102
	cbi 0x1b,0
	.dbline 103
;  Clr_SID();
	sbi 0x1a,1
	.dbline 103
	cbi 0x1b,1
	.dbline 104
;  Clr_SCLK();
	sbi 0x1a,2
	.dbline 104
	cbi 0x1b,2
	.dbline 105
;  LCD_Init();
	xcall _LCD_Init
	.dbline -2
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Init _LCD_Init fV
;            cmd -> R20
	.even
_LCD_Init::
	st -y,R20
	sbiw R28,1
	.dbline -1
	.dbline 140
; /* //while(1){ 
;   nop();
;   nop();
;   W_1byte(0,0,0x80);   //显示的地址0x80
;   nop();
;   for(i=0;mynew1[i]!='\0';i++)
;   {
;    W_1byte(0,1,mynew1[i]);
;   }
;   W_1byte(0,0,0x90);     //显示的地址0x90
;   for(i=0;mynew2[i]!='\0';i++)
;   {
;    W_1byte(0,1,mynew2[i]); 
;   }
;   W_1byte(0,0,0x88);   //显示的地址0x88
;   for(i=0;mynew3[i]!='\0';i++)
;   {
;    W_1byte(0,1,mynew3[i]);
;   }
;   W_1byte(0,0,0x98);     //显示的地址0x98
;   for(i=0;mynew4[i]!='\0';i++)
;   {
;    W_1byte(0,1,mynew4[i]);
;   }
;   nop();
; //  for(;;)
; //  {
; //    continue;
; //  } 
; // }
; */
; }
; /******************************************************************/
; void LCD_Init(void)
; {
	.dbline 142
;   uchar cmd;
;   cmd=0x30;   //功能设置 8位数据,基本指令
	ldi R20,48
	.dbline 143
;  W_1byte(0,0,cmd);
	std y+0,R20
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 144
;  Delay(2);
	ldi R16,2
	ldi R17,0
	xcall _Delay
	.dbline 145
;  cmd=0x0C;   //显示状态 ON,游标OFF,反白OFF
	ldi R20,12
	.dbline 146
;  W_1byte(0,0,cmd); //写指令
	std y+0,R20
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 147
;  Delay(2);
	ldi R16,2
	ldi R17,0
	xcall _Delay
	.dbline 148
;  cmd=0x01;   //清除显示
	ldi R20,1
	.dbline 149
;  W_1byte(0,0,cmd); //写指令
	std y+0,R20
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 150
;  Delay(2);
	ldi R16,2
	ldi R17,0
	xcall _Delay
	.dbline 151
;  cmd=0x02;   //地址归位
	ldi R20,2
	.dbline 152
;  W_1byte(0,0,cmd); //写指令
	std y+0,R20
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 153
;  Delay(2);
	ldi R16,2
	ldi R17,0
	xcall _Delay
	.dbline 154
;  cmd=0x80;   //设置DDRAM地址
	ldi R20,128
	.dbline 155
;  W_1byte(0,0,cmd); //写指令
	std y+0,R20
	clr R18
	clr R16
	xcall _W_1byte
	.dbline 156
;  Delay(2);   //延时
	ldi R16,2
	ldi R17,0
	xcall _Delay
	.dbline -2
L22:
	.dbline 0 ; func end
	adiw R28,1
	ld R20,y+
	ret
	.dbsym r cmd 20 c
	.dbend
	.dbfunc e W_1byte _W_1byte fV
;         H_data -> R22,R23
;           S_ID -> R10,R11
;         L_data -> R20,R21
;         W_data -> R12
;             RS -> R14
;             RW -> R20
	.even
_W_1byte::
	xcall push_xgsetF0FC
	mov R14,R18
	mov R20,R16
	ldd R12,y+10
	.dbline -1
	.dbline 172
; }
; /*******************************************************************
; 函 数 名:W_1byte
; 入口参数:RW、RS、W_data
; 出口参数:无
; 建立日期:2007年3月3日
; 修改日期:
; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
; 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
;    (一般RW都设为0,即只向液晶写数据,不读数据)
;           RS=1,写入的是数据;RS=0,写入的是指令;
;     一般模式:RW=0,RS=1;写数据
;        RW=0,RS=0;写指令
; ********************************************************************/
; void W_1byte(uchar RW, uchar RS, uchar W_data)
; {
	.dbline 173
; 	uint H_data,L_data,S_ID = 0xf8;	 //11111RWRS0
	ldi R24,248
	ldi R25,0
	movw R10,R24
	.dbline 174
; 	nop();
	nop
	.dbline 175
; 	if(RW == 0)
	tst R20
	brne L24
X9:
	.dbline 176
; 	{
	.dbline 177
; 	 	S_ID &=~ 0x04;
	andi R24,251
	movw R10,R24
	.dbline 178
; 	}
	xjmp L25
L24:
	.dbline 180
; 	else					//if(RW==1)
; 	{
	.dbline 181
; 	 	S_ID |= 0X04;
	movw R24,R10
	ori R24,4
	movw R10,R24
	.dbline 182
; 	}
L25:
	.dbline 183
; 	if(RS == 0)
	tst R14
	brne L26
X10:
	.dbline 184
; 	{
	.dbline 185
; 	 	S_ID &=~ 0x02;
	movw R24,R10
	andi R24,253
	movw R10,R24
	.dbline 186
; 	}
	xjmp L27
L26:
	.dbline 188
; 	else					//if(RS==1)
; 	{
	.dbline 189
; 	 	S_ID |= 0X02;
	movw R24,R10
	ori R24,2
	movw R10,R24
	.dbline 190
; 	}
L27:
	.dbline 191
; 	H_data = W_data;
	mov R22,R12
	clr R23
	.dbline 192
; 	H_data &= 0xf0;			//屏蔽低4位的数据
	andi R22,240
	andi R23,0
	.dbline 193
; 	L_data = W_data;	   	//xxxx0000格式
	mov R20,R12
	clr R21
	.dbline 194
; 	L_data &= 0x0f;			//屏蔽高4位的数据
	andi R20,15
	andi R21,0
	.dbline 195
; 	L_data <<= 4;			//xxxx0000格式
	lsl R20
	rol R21
	lsl R20
	rol R21
	lsl R20
	rol R21
	lsl R20
	rol R21
	.dbline 196
; 	Set_CS();
	sbi 0x1a,0
	.dbline 196
	sbi 0x1b,0
	.dbline 197
; 	Write_8bits(S_ID); 		//发送S_ID
	movw R16,R10
	xcall _Write_8bits
	.dbline 198
; 	Write_8bits(H_data);	//发送H_data
	movw R16,R22
	xcall _Write_8bits
	.dbline 199
; 	Write_8bits(L_data);	//发送L_data
	movw R16,R20
	xcall _Write_8bits
	.dbline 200
; 	Clr_CS();	
	sbi 0x1a,0
	.dbline 200
	cbi 0x1b,0
	.dbline -2
L23:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r H_data 22 i
	.dbsym r S_ID 10 i
	.dbsym r L_data 20 i
	.dbsym r W_data 12 c
	.dbsym r RS 14 c
	.dbsym r RW 20 c
	.dbend
	.dbfunc e Write_8bits _Write_8bits fV
;      Temp_data -> R12,R13
;              i -> R20,R21
;         W_bits -> R10,R11
	.even
_Write_8bits::
	xcall push_xgset303C
	movw R10,R16
	.dbline -1
	.dbline 212
; }
; /********************************************************************
; 函 数 名:Write_8bits
; 入口参数:W_bits
; 出口参数:无
; 建立日期:2007年3月3日
; 修改日期:
; 函数作用:负责串行输出8个bit位
; 说    明:
; ********************************************************************/
; void Write_8bits(uint W_bits)
; {
	.dbline 214
; 	uint i,Temp_data;
; 	for(i=0; i<8; i++)
	clr R20
	clr R21
	xjmp L32
L29:
	.dbline 215
; 	{
	.dbline 216
; 		Temp_data = W_bits;
	movw R12,R10
	.dbline 217
; 		Temp_data <<= i;
	movw R18,R20
	movw R16,R12
	xcall lsl16
	movw R12,R16
	.dbline 218
; 		if((Temp_data&0x80)==0)
	sbrc R16,7
	rjmp L33
X11:
	.dbline 219
; 		{
	.dbline 220
; 		 	Clr_SID();
	sbi 0x1a,1
	.dbline 220
	cbi 0x1b,1
	.dbline 221
; 		}
	xjmp L34
L33:
	.dbline 223
; 		else
; 		{
	.dbline 224
; 		 	Set_SID();
	sbi 0x1a,1
	.dbline 224
	sbi 0x1b,1
	.dbline 225
; 		} 
L34:
	.dbline 226
; 		nop();
	nop
	.dbline 227
; 		Set_SCLK();
	sbi 0x1a,2
	.dbline 227
	sbi 0x1b,2
	.dbline 228
; 		nop();
	nop
	.dbline 229
; 		nop();
	nop
	.dbline 230
; 		Clr_SCLK();
	sbi 0x1a,2
	.dbline 230
	cbi 0x1b,2
	.dbline 231
; 		nop();
	nop
	.dbline 232
; 		Clr_SID();
	sbi 0x1a,1
	.dbline 232
	cbi 0x1b,1
	.dbline 233
; 	}
L30:
	.dbline 214
	subi R20,255  ; offset = 1
	sbci R21,255
L32:
	.dbline 214
	cpi R20,8
	ldi R30,0
	cpc R21,R30
	brlo L29
X12:

⌨️ 快捷键说明

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