📄 洗衣机.s
字号:
.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 + -