📄 megalcd.s
字号:
; }
; case 0x01:
; {
.dbline 171
; adc2=temp;
sts _adc2+1,R17
sts _adc2,R16
.dbline 172
; ADMUX=0;
clr R2
out 0x7,R2
.dbline 173
; break;
xjmp L6
L5:
.dbline 176
; }
; default :
; {
.dbline 177
; ADMUX=0;
clr R2
out 0x7,R2
.dbline 178
; }
.dbline 179
; }
L6:
.dbline 180
; ADCSR|=0x40;
sbi 0x6,6
.dbline -2
.dbline 181
; }
L1:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r temp 16 i
.dbfunc s adctoasc _adctoasc fI
; char_p -> R10,R11
; i -> R12
; temp -> R14,R15
; adc -> R10,R11
.even
_adctoasc::
xcall push_gset5
mov R10,R16
mov R11,R17
.dbline -1
.dbline 185
; /* AD结果转换成电压 */
; #define vref 473
; unsigned char * adctoasc(unsigned int adc)
; {
.dbline 189
; unsigned int temp;
; unsigned char i;
; unsigned char *char_p;
; temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
mov R2,R10
mov R3,R11
clr R4
clr R5
ldi R16,<L11
ldi R17,>L11
xcall lpm32
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall mpy32u
ldi R24,10
ldi R25,0
st -y,R24
xcall lsr32
mov R14,R16
mov R15,R17
.dbline 190
; for(i=0;i<3;i++)
clr R12
xjmp L15
L12:
.dbline 191
.dbline 192
mov R2,R12
clr R3
ldi R30,3
ldi R31,0
sub R30,R2
sbc R31,R3
ldi R24,<_adcval
ldi R25,>_adcval
add R30,R24
adc R31,R25
ldi R18,10
ldi R19,0
mov R16,R14
mov R17,R15
xcall mod16u
mov R24,R16
mov R25,R17
adiw R24,48
std z+0,R24
.dbline 193
ldi R18,10
ldi R19,0
mov R16,R14
mov R17,R15
xcall div16u
mov R14,R16
mov R15,R17
.dbline 194
L13:
.dbline 190
inc R12
L15:
.dbline 190
mov R24,R12
cpi R24,3
brlo L12
.dbline 195
; {
; adcval[3-i]=temp%10+0x30;
; temp=temp/10;
; }
; adcval[0]=adcval[1];
lds R2,_adcval+1
sts _adcval,R2
.dbline 196
; adcval[1]='.';
ldi R24,46
sts _adcval+1,R24
.dbline 197
; adcval[4]='V';
ldi R24,86
sts _adcval+4,R24
.dbline 198
; adcval[5]=0;
clr R2
sts _adcval+5,R2
.dbline 199
; char_p=adcval;
ldi R24,<_adcval
ldi R25,>_adcval
mov R10,R24
mov R11,R25
.dbline 200
; return char_p;
mov R16,R10
mov R17,R11
.dbline -2
L10:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r char_p 10 pc
.dbsym r i 12 c
.dbsym r temp 14 i
.dbsym r adc 10 i
.dbfunc s ocmj_init _ocmj_init fI
.even
_ocmj_init::
.dbline -1
.dbline 204
; }
; /* OCMJ4X8LCD初始化 */
; void ocmj_init(void)
; {
.dbline 205
; MCUCR=0;
clr R2
out 0x35,R2
.dbline 206
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline 207
; PORTA=0xff;
out 0x1b,R24
.dbline 208
; DDRE=0x80;
ldi R24,128
out 0x2,R24
.dbline 209
; PORTE=0xff;
ldi R24,255
out 0x3,R24
.dbline 210
; PORTC=0xff;
out 0x15,R24
.dbline 211
; DDRD=0x00;
out 0x11,R2
.dbline 212
; PORTD=0xff;
out 0x12,R24
.dbline 213
; clr_reset;//LCD复位
cbi 0x15,3
.dbline 214
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 215
; set_reset;
sbi 0x15,3
.dbline 216
; clr_answer;
cbi 0x03,7
.dbline 217
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline -2
.dbline 218
; }
L20:
.dbline 0 ; func end
ret
.dbfunc s ocmj_write _ocmj_write fI
; data -> R16
.even
_ocmj_write::
.dbline -1
.dbline 221
; /* 写数据到LCD */
; void ocmj_write(unsigned char data)
; {
L22:
.dbline 223
L23:
.dbline 222
; while(ask!=0)
sbic 0x1,6
rjmp L22
.dbline 224
; ;
; data_port=data;
out 0x1b,R16
.dbline 225
; wait;
nop
nop
.dbline 226
; set_answer;
sbi 0x03,7
.dbline 227
; wait;
nop
nop
L25:
.dbline 229
L26:
.dbline 228
; while(ask==0)
sbis 0x1,6
rjmp L25
.dbline 230
; ;
; clr_answer;
cbi 0x03,7
.dbline -2
.dbline 231
; }
L21:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbfunc s ico_tran _ico_tran fI
; j -> R20
; i -> R22
; ico_p -> R10,R11
; y -> R12
; x -> R14
.even
_ico_tran::
xcall push_gset5
mov R12,R18
mov R14,R16
ldd R10,y+10
ldd R11,y+11
.dbline -1
.dbline 236
; /* 传送32*32ICO点阵数据到LCD */
; /* x:0~15(字节为单位) y:0~64 */
; /* ico_p:指向图形数据的指针 */
; void ico_tran(unsigned char x,unsigned char y,const unsigned char *ico_p)
; {
.dbline 238
; unsigned char i,j;
; x+=4;
mov R24,R14
subi R24,252 ; addi 4
mov R14,R24
.dbline 239
; for(j=0;j<32;j++)
clr R20
xjmp L32
L29:
.dbline 240
; {
.dbline 241
; for(i=0;i<4;i++)
clr R22
xjmp L36
L33:
.dbline 242
.dbline 243
ldi R16,243
xcall _ocmj_write
.dbline 244
mov R16,R14
xcall _ocmj_write
.dbline 245
mov R16,R12
xcall _ocmj_write
.dbline 246
mov R30,R10
mov R31,R11
lpm
mov R16,R0
xcall _ocmj_write
.dbline 247
mov R24,R10
mov R25,R11
adiw R24,1
mov R10,R24
mov R11,R25
.dbline 248
inc R14
.dbline 249
L34:
.dbline 241
inc R22
L36:
.dbline 241
cpi R22,4
brlo L33
.dbline 250
mov R24,R14
subi R24,4
mov R14,R24
.dbline 251
inc R12
.dbline 252
L30:
.dbline 239
inc R20
L32:
.dbline 239
cpi R20,32
brlo L29
.dbline -2
.dbline 253
; {
; ocmj_write(0xf3);
; ocmj_write(x);
; ocmj_write(y);
; ocmj_write(*ico_p);
; ico_p++;
; x++;
; }
; x-=4;
; y++;
; }
; }
L28:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r ico_p 10 pc
.dbsym r y 12 c
.dbsym r x 14 c
.dbfunc s cls _cls fI
; j -> R20
; i -> R10
; width -> R12
; high -> R22
; y -> R14,R15
; x -> y+10
.even
_cls::
xcall push_arg4
xcall push_gset5
mov R14,R18
mov R15,R19
ldd R22,y+14
ldd R23,y+15
ldd R12,y+16
ldd R13,y+17
.dbline -1
.dbline 256
; /* 清除屏幕区域 */
; void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)
; {
.dbline 258
; unsigned char i,j;
; x+=2;
ldd R24,y+10
ldd R25,y+11
adiw R24,2
std y+10,R24
std y+11,R25
.dbline 259
; for(j=0;j<high;j++)
clr R20
xjmp L41
L38:
.dbline 260
; {
.dbline 261
; for(i=0;i<width;i++)
clr R10
xjmp L45
L42:
.dbline 262
.dbline 263
ldi R16,240
xcall _ocmj_write
.dbline 264
ldd R16,y+10
ldd R17,y+11
xcall _ocmj_write
.dbline 265
mov R16,R14
xcall _ocmj_write
.dbline 266
ldi R16,55
xcall _ocmj_write
.dbline 267
ldi R16,90
xcall _ocmj_write
.dbline 268
ldd R24,y+10
ldd R25,y+11
adiw R24,1
std y+10,R24
std y+11,R25
.dbline 269
L43:
.dbline 261
inc R10
L45:
.dbline 261
cp R10,R12
brlo L42
.dbline 270
mov R2,R12
clr R3
ldd R0,y+10
ldd R1,y+11
sub R0,R2
sbc R1,R3
std y+10,R0
std y+11,R1
.dbline 271
mov R24,R14
mov R25,R15
adiw R24,1
mov R14,R24
mov R15,R25
.dbline 272
L39:
.dbline 259
inc R20
L41:
.dbline 259
cp R20,R22
brlo L38
.dbline -2
.dbline 273
; {
; ocmj_write(0xf0);
; ocmj_write(x);
; ocmj_write(y);
; ocmj_write(55);
; ocmj_write(90);
; x++;
; }
; x-=width;
; y++;
; }
; }
L37:
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 10 c
.dbsym r width 12 c
.dbsym r high 22 c
.dbsym r y 14 i
.dbsym l x 10 i
.dbfunc s bmp_tran _bmp_tran fI
; j -> R20
; i -> R10
; bmp_p -> R12,R13
; width -> R14
; high -> R22
; y -> y+12
; x -> y+10
.even
_bmp_tran::
xcall push_arg4
xcall push_gset5
ldd R22,y+14
ldd R23,y+15
ldd R14,y+16
ldd R15,y+17
ldd R12,y+18
ldd R13,y+19
.dbline -1
.dbline 280
; /* 传送bmp点阵数据到LCD */
; /* x:0~15(字节为单位) y:0~64 */
; /* bmp_p:指向图形数据的指针 */
; /* high:位图高度(点阵行为单位) */
; /* width:位图宽度(以字节为单位)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -