📄 child.s
字号:
.module child.c
.area text(rom, con, rel)
.dbfile F:\赵一\edu6000_1125\child.c
.dbfunc e delay_us _delay_us fV
; us -> R16
.even
_delay_us::
.dbline -1
.dbline 6
; #include <iom8v.h>
; #include <macros.h>
; #include "head.h"
;
; void delay_us(unsigned char us) //when the xtal is 8M, the delay time is 1 us.
; {
L2:
.dbline 8
; do
; {
.dbline 9
; us--;
dec R16
.dbline 10
; asm("nop");
nop
.dbline 11
; asm("nop");
nop
.dbline 12
; asm("nop");
nop
.dbline 13
; asm("nop");
nop
.dbline 14
L3:
.dbline 14
; }while(us);
tst R16
brne L2
.dbline -2
.dbline 15
; }
L1:
.dbline 0 ; func end
ret
.dbsym r us 16 c
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R22,R23
; ms -> R20
.even
_delay_ms::
xcall push_gset2
mov R20,R16
.dbline -1
.dbline 18
;
; void delay_ms(unsigned char ms)
; {
L6:
.dbline 21
; unsigned int i;
; do
; {
.dbline 22
; ms--;
dec R20
.dbline 23
; for(i=0;i<5;i++)
clr R22
clr R23
xjmp L12
L9:
.dbline 24
ldi R16,200
xcall _delay_us
L10:
.dbline 23
subi R22,255 ; offset = 1
sbci R23,255
L12:
.dbline 23
cpi R22,5
ldi R30,0
cpc R23,R30
brlo L9
.dbline 25
L7:
.dbline 25
; delay_us(200);
; }while(ms);
tst R20
brne L6
.dbline -2
.dbline 26
; }
L5:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 22 i
.dbsym r ms 20 c
.dbend
.dbfunc e send_cmd _send_cmd fV
; i -> R20
; mod -> R22
; cmd -> R10
.even
_send_cmd::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 29
;
; void send_cmd(unsigned char cmd) //send comend to the lcd.
; {
.dbline 31
; unsigned char i,mod;
; clr_cs;
cbi 0x12,7
.dbline 32
; mod=0x80;
ldi R22,128
.dbline 33
; for(i=0;i<3;i++)
clr R20
xjmp L17
L14:
.dbline 34
; {
.dbline 35
; if((mod&0x80)==0x80)
mov R24,R22
andi R24,128
cpi R24,128
brne L18
.dbline 36
; set_data;
sbi 0x18,3
xjmp L19
L18:
.dbline 38
; else
; clr_data;
cbi 0x18,3
L19:
.dbline 40
cbi 0x18,4
.dbline 41
ldi R16,8
xcall _delay_us
.dbline 42
sbi 0x18,4
.dbline 43
lsl R22
.dbline 44
ldi R16,8
xcall _delay_us
.dbline 45
L15:
.dbline 33
inc R20
L17:
.dbline 33
cpi R20,3
brlo L14
.dbline 46
;
; clr_wr;
; delay_us(8);
; set_wr;
; mod=mod<<1;
; delay_us(8);
; }
; mod=cmd;
mov R22,R10
.dbline 47
; for(i=0;i<9;i++)
clr R20
xjmp L23
L20:
.dbline 48
; {
.dbline 49
; if((mod&0x80)==0x80)
mov R24,R22
andi R24,128
cpi R24,128
brne L24
.dbline 50
; set_data;
sbi 0x18,3
xjmp L25
L24:
.dbline 52
; else
; clr_data;
cbi 0x18,3
L25:
.dbline 53
cbi 0x18,4
.dbline 54
ldi R16,8
xcall _delay_us
.dbline 55
sbi 0x18,4
.dbline 56
lsl R22
.dbline 57
ldi R16,8
xcall _delay_us
.dbline 58
L21:
.dbline 47
inc R20
L23:
.dbline 47
cpi R20,9
brlo L20
.dbline 59
; clr_wr;
; delay_us(8);
; set_wr;
; mod=mod<<1;
; delay_us(8);
; }
; set_cs;
sbi 0x12,7
.dbline -2
.dbline 60
; }
L13:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r mod 22 c
.dbsym r cmd 10 c
.dbend
.dbfunc e send_data _send_data fV
; i -> R20
; mod -> R22
; data -> R10
; addr -> R12
.even
_send_data::
xcall push_gset4
mov R10,R18
mov R12,R16
.dbline -1
.dbline 65
;
; //send data and address to the lcd.
;
; void send_data(unsigned char addr,unsigned char data)
; {
.dbline 68
; unsigned char i,mod;
;
; clr_cs;
cbi 0x12,7
.dbline 69
; mod=0x05; //entern the write mode.
ldi R22,5
.dbline 70
; for(i=0;i<3;i++)
clr R20
xjmp L30
L27:
.dbline 71
; {
.dbline 72
; if((mod&0x01)==0x01)
mov R24,R22
andi R24,1
cpi R24,1
brne L31
.dbline 73
; set_data;
sbi 0x18,3
xjmp L32
L31:
.dbline 75
; else
; clr_data;
cbi 0x18,3
L32:
.dbline 77
cbi 0x18,4
.dbline 78
ldi R16,8
xcall _delay_us
.dbline 79
sbi 0x18,4
.dbline 80
lsr R22
.dbline 81
ldi R16,8
xcall _delay_us
.dbline 82
L28:
.dbline 70
inc R20
L30:
.dbline 70
cpi R20,3
brlo L27
.dbline 83
;
; clr_wr;
; delay_us(8);
; set_wr;
; mod=mod>>1;
; delay_us(8);
; }
; mod=addr;
mov R22,R12
.dbline 84
; for(i=0;i<6;i++)
clr R20
xjmp L36
L33:
.dbline 85
; {
.dbline 86
; if((mod&0x01)==0x01)
mov R24,R22
andi R24,1
cpi R24,1
brne L37
.dbline 87
; set_data;
sbi 0x18,3
xjmp L38
L37:
.dbline 89
; else
; clr_data;
cbi 0x18,3
L38:
.dbline 90
cbi 0x18,4
.dbline 91
ldi R16,8
xcall _delay_us
.dbline 92
sbi 0x18,4
.dbline 93
lsr R22
.dbline 94
ldi R16,8
xcall _delay_us
.dbline 95
L34:
.dbline 84
inc R20
L36:
.dbline 84
cpi R20,6
brlo L33
.dbline 97
; clr_wr;
; delay_us(8);
; set_wr;
; mod=mod>>1;
; delay_us(8);
; }
;
; mod=data;
mov R22,R10
.dbline 98
; for(i=0;i<8;i++)
clr R20
xjmp L42
L39:
.dbline 99
; {
.dbline 100
; if((mod&0x01)==0x01)
mov R24,R22
andi R24,1
cpi R24,1
brne L43
.dbline 101
; set_data;
sbi 0x18,3
xjmp L44
L43:
.dbline 103
; else
; clr_data;
cbi 0x18,3
L44:
.dbline 104
cbi 0x18,4
.dbline 105
ldi R16,8
xcall _delay_us
.dbline 106
sbi 0x18,4
.dbline 107
lsr R22
.dbline 108
ldi R16,8
xcall _delay_us
.dbline 109
L40:
.dbline 98
inc R20
L42:
.dbline 98
cpi R20,8
brlo L39
.dbline 110
; clr_wr;
; delay_us(8);
; set_wr;
; mod=mod>>1;
; delay_us(8);
; }
; set_cs;
sbi 0x12,7
.dbline -2
.dbline 111
; }
L26:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r mod 22 c
.dbsym r data 10 c
.dbsym r addr 12 c
.dbend
.dbfunc e init_lcd _init_lcd fV
.even
_init_lcd::
.dbline -1
.dbline 114
; //initialize the lcd.
; void init_lcd(void)
; {
.dbline 115
; send_cmd(0x18);
ldi R16,24
xcall _send_cmd
.dbline 116
; send_cmd(0x01);
ldi R16,1
xcall _send_cmd
.dbline 117
; send_cmd(0x03);
ldi R16,3
xcall _send_cmd
.dbline 118
; send_cmd(0x29);
ldi R16,41
.dbline -2
.dbline 119
; }
L45:
.dbline 0 ; func end
xjmp _send_cmd
.dbend
.dbfunc e display _display fV
; i -> R20
; k -> R22
; data -> R10
.even
_display::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 122
; //display full screen or clear the screen.
; void display(unsigned char data)
; {
.dbline 124
; unsigned char i,k;
; k=0;
clr R22
.dbline 125
; for(i=0;i<16;i++)
clr R20
xjmp L50
L47:
.dbline 126
.dbline 127
mov R18,R10
mov R16,R22
xcall _send_data
.dbline 128
inc R22
.dbline 129
inc R22
.dbline 130
L48:
.dbline 125
inc R20
L50:
.dbline 125
cpi R20,16
brlo L47
.dbline -2
.dbline 131
; {
; send_data(k,data);
; k++;
; k++;
; }
; }
L46:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r k 22 c
.dbsym r data 10 c
.dbend
.dbfunc e key_scan _key_scan fc
; key_num -> R22
; key -> R20
.even
_key_scan::
xcall push_gset3
.dbline -1
.dbline 134
;
; unsigned char key_scan(void)
; {
.dbline 136
; unsigned char key,key_num;
; key_num=0;
clr R22
.dbline 137
; DDRC=0x77;
ldi R24,119
out 0x14,R24
.dbline 138
; DDRB|=BIT(PB5);
sbi 0x17,5
.dbline 139
; DDRD=0x97;
ldi R24,151
out 0x11,R24
.dbline 140
; PORTB&=~BIT(PB5);
cbi 0x18,5
.dbline 141
; PORTC|=BIT(PC0);
sbi 0x15,0
.dbline 142
; PORTC|=BIT(PC1);
sbi 0x15,1
.dbline 143
; _NOP();
nop
.dbline 144
; _NOP();
nop
.dbline 145
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 146
; if(key!=0x0D)
cpi R20,13
brne X3
xjmp L52
X3:
.dbline 147
; {
.dbline 148
; delay_ms(40);
ldi R16,40
xcall _delay_ms
.dbline 149
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 150
; if(key!=0x0D)
cpi R20,13
breq L54
.dbline 151
; {
.dbline 152
; switch(key)
mov R10,R20
clr R11
movw R24,R10
cpi R24,5
ldi R30,0
cpc R25,R30
breq L61
cpi R24,5
ldi R30,0
cpc R25,R30
brlt L57
L62:
movw R24,R10
cpi R24,9
ldi R30,0
cpc R25,R30
breq L60
cpi R24,12
ldi R30,0
cpc R25,R30
breq L59
xjmp L57
X0:
.dbline 153
; {
L59:
.dbline 154
; case 0x0C: key_num=1;break;
ldi R22,1
.dbline 154
xjmp L57
L60:
.dbline 155
; case 0x09: key_num=2;break;
ldi R22,2
.dbline 155
xjmp L57
L61:
.dbline 156
; case 0x05: key_num=3;break;
ldi R22,3
.dbline 156
.dbline 157
; default: break;
L57:
.dbline 159
; }
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
xjmp L64
L63:
.dbline 161
.dbline 162
ldi R16,5
xcall _delay_ms
.dbline 163
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 164
L64:
.dbline 160
; while(key!=0x0D)
cpi R20,13
brne L63
.dbline 165
; {
; delay_ms(5);
; key=((PIND&0x68)>>3);
; }
; }
L54:
.dbline 166
; }
L52:
.dbline 167
; PORTB|=BIT(PB5);
sbi 0x18,5
.dbline 168
; PORTC&=~BIT(PC0);
cbi 0x15,0
.dbline 169
; PORTC|=BIT(PC1);
sbi 0x15,1
.dbline 170
; _NOP();
nop
.dbline 171
; _NOP();
nop
.dbline 172
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 173
; if(key!=0x0D)
cpi R20,13
brne X4
xjmp L66
X4:
.dbline 174
; {
.dbline 175
; delay_ms(40);
ldi R16,40
xcall _delay_ms
.dbline 176
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 177
; if(key!=0x0D)
cpi R20,13
breq L68
.dbline 178
; {
.dbline 179
; switch(key)
mov R10,R20
clr R11
movw R24,R10
cpi R24,5
ldi R30,0
cpc R25,R30
breq L75
cpi R24,5
ldi R30,0
cpc R25,R30
brlt L71
L76:
movw R24,R10
cpi R24,9
ldi R30,0
cpc R25,R30
breq L74
cpi R24,12
ldi R30,0
cpc R25,R30
breq L73
xjmp L71
X1:
.dbline 180
; {
L73:
.dbline 181
; case 0x0C: key_num=4;break;
ldi R22,4
.dbline 181
xjmp L71
L74:
.dbline 182
; case 0x09: key_num=5;break;
ldi R22,5
.dbline 182
xjmp L71
L75:
.dbline 183
; case 0x05: key_num=6;break;
ldi R22,6
.dbline 183
.dbline 184
; default: break;
L71:
.dbline 186
; }
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
xjmp L78
L77:
.dbline 188
.dbline 189
ldi R16,5
xcall _delay_ms
.dbline 190
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 191
L78:
.dbline 187
; while(key!=0x0D)
cpi R20,13
brne L77
.dbline 192
; {
; delay_ms(5);
; key=((PIND&0x68)>>3);
; }
; }
L68:
.dbline 193
; }
L66:
.dbline 194
; PORTB|=BIT(PB5);
sbi 0x18,5
.dbline 195
; PORTC|=BIT(PC0);
sbi 0x15,0
.dbline 196
; PORTC&=~BIT(PC1);
cbi 0x15,1
.dbline 197
; _NOP();
nop
.dbline 198
; _NOP();
nop
.dbline 199
; key=((PINB&0x68)>>3);
in R20,0x16
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 200
; if(key!=0x0D)
cpi R20,13
brne X5
xjmp L80
X5:
.dbline 201
; {
.dbline 202
; delay_ms(40);
ldi R16,40
xcall _delay_ms
.dbline 203
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 204
; if(key!=0x0D)
cpi R20,13
breq L82
.dbline 205
; {
.dbline 206
; switch(key)
mov R10,R20
clr R11
movw R24,R10
cpi R24,5
ldi R30,0
cpc R25,R30
breq L89
cpi R24,5
ldi R30,0
cpc R25,R30
brlt L85
L90:
movw R24,R10
cpi R24,9
ldi R30,0
cpc R25,R30
breq L88
cpi R24,12
ldi R30,0
cpc R25,R30
breq L87
xjmp L85
X2:
.dbline 207
; {
L87:
.dbline 208
; case 0x0C: key_num=7;break;
ldi R22,7
.dbline 208
xjmp L85
L88:
.dbline 209
; case 0x09: key_num=8;break;
ldi R22,8
.dbline 209
xjmp L85
L89:
.dbline 210
; case 0x05: key_num=9;break;
ldi R22,9
.dbline 210
.dbline 211
; default: break;
L85:
.dbline 213
; }
; key=((PIND&0x68)>>3);
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
xjmp L92
L91:
.dbline 215
.dbline 216
ldi R16,5
xcall _delay_ms
.dbline 217
in R20,0x10
andi R20,104
lsr R20
lsr R20
lsr R20
.dbline 218
L92:
.dbline 214
; while(key!=0x0D)
cpi R20,13
brne L91
.dbline 219
; {
; delay_ms(5);
; key=((PIND&0x68)>>3);
; }
; }
L82:
.dbline 220
; }
L80:
.dbline 221
; return key_num;
mov R16,R22
.dbline -2
L51:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r key_num 22 c
.dbsym r key 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -