📄 lcd.s
字号:
mov R16,R22
subi R16,1
subi R16,192 ; addi 64
rcall _WriInsn
.dbline 106
clr R16
rcall _WriData
.dbline 107
dec R22
.dbline 108
L14:
.dbline 101
tst R22
brne L13
.dbline 109
dec R20
.dbline 110
L11:
.dbline 98
tst R20
brne L10
.dbline 112
; while(Clear_Y)
; {
;
; WriInsn((Clear_page-1)+0b10111000);
; WriInsn((Clear_Y-1)+0b01000000);
; WriData(0x00);
; Clear_Y--;
; }
; Clear_page--;
; }
; //***************************************************
; ContrPort=ContrPort&~CS1; //cs1=0
cbi 0x15,7
.dbline 113
; ContrPort=ContrPort|CS2;//cs2=1
sbi 0x15,6
.dbline 114
; Clear_page=8;
ldi R20,8
rjmp L17
L16:
.dbline 116
; while(Clear_page)
; {
.dbline 117
; Clear_Y=64;
ldi R22,64
rjmp L20
L19:
.dbline 119
.dbline 121
mov R16,R20
subi R16,1
subi R16,72 ; addi 184
rcall _WriInsn
.dbline 122
mov R16,R22
subi R16,1
subi R16,192 ; addi 64
rcall _WriInsn
.dbline 123
clr R16
rcall _WriData
.dbline 124
dec R22
.dbline 125
L20:
.dbline 118
tst R22
brne L19
.dbline 126
dec R20
.dbline 127
L17:
.dbline 115
tst R20
brne L16
.dbline -2
.dbline 130
; while(Clear_Y)
; {
;
; WriInsn((Clear_page-1)+0b10111000);
; WriInsn((Clear_Y-1)+0b01000000);
; WriData(0x00);
; Clear_Y--;
; }
; Clear_page--;
; }
;
;
; }
L9:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Clear_page 20 c
.dbsym r Clear_Y 22 c
.dbfunc s WriteCgram _WriteCgram fI
; NumCs2 -> R20,R21
; NumCs1 -> R22,R23
; NumTemp01 -> R12,R13
; NumPage -> R14
; j -> R20,R21
; i -> R22,R23
; Point -> R10
; DataSequent -> R6
.even
_WriteCgram::
rcall push_gset5
mov R10,R18
mov R6,R16
.dbline -1
.dbline 134
; //********************************************************
; //**setup CGRAM**********************
; void WriteCgram(unsigned char DataSequent, unsigned char Point)
; {
.dbline 138
; unsigned char NumPage; //the data page
; unsigned NumCs1,NumCs2;//chip select
; unsigned NumTemp01,i,j;
; if(DataSequent<8)
mov R24,R6
cpi R24,8
brsh L23
.dbline 139
; {
.dbline 140
; NumPage=0;
clr R14
.dbline 141
; if(DataSequent<4)
cpi R24,4
brsh L25
.dbline 142
; {NumCs1=1;
.dbline 142
ldi R22,1
ldi R23,0
.dbline 143
; NumCs2=0;
clr R20
clr R21
.dbline 144
; NumTemp01=16*DataSequent;
mov R12,R6
clr R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 145
; }
rjmp L24
L25:
.dbline 147
; else
; {NumCs1=0;
.dbline 147
clr R22
clr R23
.dbline 148
; NumCs2=1;
ldi R20,1
ldi R21,0
.dbline 149
; NumTemp01=16*(DataSequent-4);
mov R24,R6
clr R25
sbiw R24,4
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 150
; }
.dbline 152
;
; }
rjmp L24
L23:
.dbline 153
; else if((DataSequent)<16&&(DataSequent>7))
mov R24,R6
cpi R24,16
brsh L27
ldi R24,7
cp R24,R6
brsh L27
.dbline 154
; {
.dbline 155
; NumPage=2;
ldi R24,2
mov R14,R24
.dbline 156
; if(DataSequent<12)
mov R24,R6
cpi R24,12
brsh L29
.dbline 157
; {NumCs1=1;
.dbline 157
ldi R22,1
ldi R23,0
.dbline 158
; NumCs2=0;
clr R20
clr R21
.dbline 159
; NumTemp01=16*(DataSequent-8);
clr R25
sbiw R24,8
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 160
; }
rjmp L28
L29:
.dbline 162
; else
; {NumCs1=0;
.dbline 162
clr R22
clr R23
.dbline 163
; NumCs2=1;
ldi R20,1
ldi R21,0
.dbline 164
; NumTemp01=16*(DataSequent-12);
mov R24,R6
clr R25
sbiw R24,12
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 165
; }
.dbline 166
; }
rjmp L28
L27:
.dbline 167
; else if((DataSequent>15)&&(DataSequent<24))
ldi R24,15
cp R24,R6
brsh L31
mov R24,R6
cpi R24,24
brsh L31
.dbline 168
; {
.dbline 169
; NumPage=4;
ldi R24,4
mov R14,R24
.dbline 170
; if(DataSequent<20)
mov R24,R6
cpi R24,20
brsh L33
.dbline 171
; {NumCs1=1;
.dbline 171
ldi R22,1
ldi R23,0
.dbline 172
; NumCs2=0;
clr R20
clr R21
.dbline 173
; NumTemp01=16*(DataSequent-16);
clr R25
sbiw R24,16
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 174
; }
rjmp L32
L33:
.dbline 176
; else
; {NumCs1=0;
.dbline 176
clr R22
clr R23
.dbline 177
; NumCs2=1;
ldi R20,1
ldi R21,0
.dbline 178
; NumTemp01=16*(DataSequent-20);
mov R24,R6
clr R25
sbiw R24,20
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 179
; }
.dbline 180
; }
rjmp L32
L31:
.dbline 181
; else if((DataSequent>23)&&(DataSequent<32))
ldi R24,23
cp R24,R6
brsh L35
mov R24,R6
cpi R24,32
brsh L35
.dbline 182
; {
.dbline 183
; NumPage=6;
ldi R24,6
mov R14,R24
.dbline 184
; if(DataSequent<28)
mov R24,R6
cpi R24,28
brsh L37
.dbline 185
; {NumCs1=1;
.dbline 185
ldi R22,1
ldi R23,0
.dbline 186
; NumCs2=0;
clr R20
clr R21
.dbline 187
; NumTemp01=16*(DataSequent-24);
clr R25
sbiw R24,24
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 188
; }
rjmp L38
L37:
.dbline 190
; else
; {NumCs1=0;
.dbline 190
clr R22
clr R23
.dbline 191
; NumCs2=1;
ldi R20,1
ldi R21,0
.dbline 192
; NumTemp01=16*(DataSequent-28);
mov R24,R6
clr R25
sbiw R24,28
mov R12,R24
mov R13,R25
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
lsl R12
rol R13
.dbline 193
; }
L38:
.dbline 194
; }
L35:
L32:
L28:
L24:
.dbline 195
; if(NumCs1)
cpi R22,0
cpc R22,R23
breq L39
.dbline 196
; {ContrPort=ContrPort|CS1;}
.dbline 196
sbi 0x15,7
.dbline 196
rjmp L40
L39:
.dbline 198
; else
; {ContrPort=ContrPort&~CS1;}
.dbline 198
cbi 0x15,7
.dbline 198
L40:
.dbline 199
; if(NumCs2)
cpi R20,0
cpc R20,R21
breq L41
.dbline 200
; {ContrPort=ContrPort|CS2;}
.dbline 200
sbi 0x15,6
.dbline 200
rjmp L42
L41:
.dbline 202
; else
; {ContrPort=ContrPort&~CS2;}
.dbline 202
cbi 0x15,6
.dbline 202
L42:
.dbline 203
; NumPage=NumPage&0b00000111;
mov R24,R14
andi R24,7
mov R14,R24
.dbline 204
; NumPage=NumPage|0b10111000;
ori R24,184
mov R14,R24
.dbline 205
; NumTemp01=NumTemp01&0b00111111;
mov R24,R12
mov R25,R13
andi R24,63
andi R25,0
mov R12,R24
mov R13,R25
.dbline 206
; NumTemp01=NumTemp01|0b01000000;
ori R24,64
mov R12,R24
mov R13,R25
.dbline 207
; WriInsn(NumPage);//set the page
mov R16,R14
rcall _WriInsn
.dbline 208
; WriInsn(NumTemp01);// y address
mov R16,R12
rcall _WriInsn
.dbline 210
;
; i=16;j=0;
ldi R22,16
ldi R23,0
.dbline 210
clr R20
clr R21
rjmp L44
L43:
.dbline 212
.dbline 213
ldi R18,5
ldi R19,0
mov R16,R10
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_TAB
ldi R25,>_TAB
add R2,R24
adc R3,R25
mov R4,R20
mov R5,R21
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
mov R16,R0
rcall _WriData
.dbline 214
subi R22,1
sbci R23,0
.dbline 215
subi R20,255 ; offset = 1
sbci R21,255
.dbline 216
L44:
.dbline 211
; while(i)
cpi R22,0
cpc R22,R23
brne L43
.dbline 217
; {
; WriData(TAB[Point][j]);
; i--;
; j++;
; }
; WriInsn(NumPage+1);//set the page
mov R16,R14
subi R16,255 ; addi 1
rcall _WriInsn
.dbline 218
; WriInsn(NumTemp01);// y address
mov R16,R12
rcall _WriInsn
.dbline 219
; i=16;
ldi R22,16
ldi R23,0
rjmp L47
L46:
.dbline 221
.dbline 222
ldi R18,5
ldi R19,0
mov R16,R10
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_TAB
ldi R25,>_TAB
add R2,R24
adc R3,R25
mov R4,R20
mov R5,R21
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
mov R16,R0
rcall _WriData
.dbline 223
subi R22,1
sbci R23,0
.dbline 224
subi R20,255 ; offset = 1
sbci R21,255
.dbline 225
L47:
.dbline 220
; while(i)
cpi R22,0
cpc R22,R23
brne L46
.dbline -2
.dbline 227
; {
; WriData(TAB[Point][j]);
; i--;
; j++;
; }
;
; }
L22:
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r NumCs2 20 i
.dbsym r NumCs1 22 i
.dbsym r NumTemp01 12 i
.dbsym r NumPage 14 c
.dbsym r j 20 i
.dbsym r i 22 i
.dbsym r Point 10 c
.dbsym r DataSequent 6 c
.dbfunc s StartDiaplay _StartDiaplay fI
.even
_StartDiaplay::
.dbline -1
.dbline 231
; //**************************************************
; //开始显示
; void StartDiaplay(void)
; {
.dbline 233
; //***********use the left hand number******
; PORTC=PORTC|~0b01111111; //cs1=1
in R24,0x15
ori R24,128
out 0x15,R24
.dbline 234
; PORTC=PORTC&~0b01000000; //cs2=0
cbi 0x15,6
.dbline 236
; //****************************************
; WriInsn(0b11000000);//the first line
ldi R16,192
rcall _WriInsn
.dbline 237
; PORTC=PORTC&0b01111111; //cs1=0
in R24,0x15
andi R24,127
out 0x15,R24
.dbline 238
; PORTC=PORTC|0b01000000; //cs2=1
sbi 0x15,6
.dbline 239
; WriInsn(0b11000000);//the first line
ldi R16,192
rcall _WriInsn
.dbline 240
; PORTC=PORTC|~0b01111111; //cs1=1
in R24,0x15
ori R24,128
out 0x15,R24
.dbline 241
; PORTC=PORTC&~0b01000000; //cs2=0
cbi 0x15,6
.dbline 242
; WriInsn(0b00111111);//start
ldi R16,63
rcall _WriInsn
.dbline 243
; WriInsn(0b00111111);
ldi R16,63
rcall _WriInsn
.dbline 244
; PORTC=PORTC&0b01111111; //cs1=0
in R24,0x15
andi R24,127
out 0x15,R24
.dbline 245
; PORTC=PORTC|0b01000000; //cs2=1
sbi 0x15,6
.dbline 246
; WriInsn(0b00111111);//start
ldi R16,63
rcall _WriInsn
.dbline -2
.dbline 247
; }
L49:
.dbline 0 ; func end
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -