📄 megalcd.s
字号:
; {
.dbline 189
; adc1=temp;
sts _adc1+1,R17
sts _adc1,R16
.dbline 190
; ADMUX=1;
ldi R24,1
out 0x7,R24
.dbline 191
; break;
xjmp L3
L6:
.dbline 194
; }
; case 1:
; {
.dbline 195
; adc2=temp;
sts _adc2+1,R17
sts _adc2,R16
.dbline 196
; ADMUX=0;
clr R2
out 0x7,R2
.dbline 197
; break;
xjmp L3
L2:
.dbline 200
; }
; default :
; {
.dbline 201
; ADMUX=0;
clr R2
out 0x7,R2
.dbline 202
; }
.dbline 203
; }
L3:
.dbline 204
; ADCSRA|=(1<<ADSC);//0x40
sbi 0x6,6
.dbline -2
.dbline 205
; }
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
.dbend
.dbfunc e adctoasc _adctoasc fpc
; char_p -> R10,R11
; i -> R12
; temp -> R14,R15
; adc -> R10,R11
.even
_adctoasc::
xcall push_gset5
movw R10,R16
.dbline -1
.dbline 209
; /* AD结果转换成电压 */
; #define vref 473
; unsigned char * adctoasc(unsigned int adc)
; {
.dbline 213
; unsigned int temp;
; unsigned char i;
; unsigned char *char_p;
; temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
movw R2,R10
clr R4
clr R5
ldi R20,217
ldi R21,1
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
ldi R24,10
ldi R25,0
st -y,R24
xcall lsr32
movw R14,R16
.dbline 214
; for(i=0;i<3;i++)
clr R12
xjmp L11
L8:
.dbline 215
.dbline 216
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
movw R16,R14
xcall mod16u
movw R24,R16
adiw R24,48
std z+0,R24
.dbline 217
ldi R18,10
ldi R19,0
movw R16,R14
xcall div16u
movw R14,R16
.dbline 218
L9:
.dbline 214
inc R12
L11:
.dbline 214
mov R24,R12
cpi R24,3
brlo L8
.dbline 219
; {
; adcval[3-i]=temp%10+0x30;
; temp=temp/10;
; }
; adcval[0]=adcval[1];
lds R2,_adcval+1
sts _adcval,R2
.dbline 220
; adcval[1]='.';
ldi R24,46
sts _adcval+1,R24
.dbline 221
; adcval[4]='V';
ldi R24,86
sts _adcval+4,R24
.dbline 222
; adcval[5]=0;
clr R2
sts _adcval+5,R2
.dbline 223
; char_p=adcval;
ldi R24,<_adcval
ldi R25,>_adcval
movw R10,R24
.dbline 224
; return char_p;
mov R16,R24
mov R17,R25
.dbline -2
L7:
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
.dbend
.dbfunc e ocmj_init _ocmj_init fV
.even
_ocmj_init::
.dbline -1
.dbline 228
; }
; /* OCMJ4X8LCD初始化 */
; void ocmj_init(void)
; {
.dbline 229
; MCUCR=0;
clr R2
out 0x35,R2
.dbline 230
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline 231
; PORTA=0xff;
out 0x1b,R24
.dbline 232
; DDRE=0x80;
ldi R24,128
out 0x2,R24
.dbline 233
; PORTE=0xff;
ldi R24,255
out 0x3,R24
.dbline 234
; PORTC=0xff;
out 0x15,R24
.dbline 235
; DDRD=0x00;
out 0x11,R2
.dbline 236
; PORTD=0xff;
out 0x12,R24
.dbline 237
; clr_reset;//LCD复位
cbi 0x15,3
.dbline 238
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 239
; set_reset;
sbi 0x15,3
.dbline 240
; clr_answer;
cbi 0x03,7
.dbline 241
; delay_ms(10);
ldi R16,10
ldi R17,0
.dbline -2
.dbline 242
; }
L16:
.dbline 0 ; func end
xjmp _delay_ms
.dbend
.dbfunc e ocmj_write _ocmj_write fV
; data -> R16
.even
_ocmj_write::
.dbline -1
.dbline 245
; /* 写数据到LCD */
; void ocmj_write(unsigned char data)
; {
L18:
.dbline 247
L19:
.dbline 246
; while(ask!=0)
sbic 0x1,6
rjmp L18
.dbline 248
; ;
; data_port=data;
out 0x1b,R16
.dbline 249
; wait;
nop
nop
.dbline 250
; set_answer;
sbi 0x03,7
.dbline 251
; wait;
nop
nop
L21:
.dbline 253
L22:
.dbline 252
; while(ask==0)
sbis 0x1,6
rjmp L21
.dbline 254
; ;
; clr_answer;
cbi 0x03,7
.dbline -2
.dbline 255
; }
L17:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e ico_tran _ico_tran fV
; j -> R20
; i -> R14
; ico_p -> R10,R11
; y -> R12
; x -> R22
.even
_ico_tran::
xcall push_gset5
mov R12,R18
mov R22,R16
ldd R10,y+10
ldd R11,y+11
.dbline -1
.dbline 260
; /* 传送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 262
; unsigned char i,j;
; x+=4;
subi R22,252 ; addi 4
.dbline 263
; for(j=0;j<32;j++)
clr R20
xjmp L28
L25:
.dbline 264
; {
.dbline 265
; for(i=0;i<4;i++)
clr R14
xjmp L32
L29:
.dbline 266
.dbline 267
ldi R16,243
xcall _ocmj_write
.dbline 268
mov R16,R22
xcall _ocmj_write
.dbline 269
mov R16,R12
xcall _ocmj_write
.dbline 270
movw R30,R10
lpm R16,Z
xcall _ocmj_write
.dbline 271
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 272
inc R22
.dbline 273
L30:
.dbline 265
inc R14
L32:
.dbline 265
mov R24,R14
cpi R24,4
brlo L29
.dbline 274
subi R22,4
.dbline 275
inc R12
.dbline 276
L26:
.dbline 263
inc R20
L28:
.dbline 263
cpi R20,32
brlo L25
.dbline -2
.dbline 277
; {
; ocmj_write(0xf3);
; ocmj_write(x);
; ocmj_write(y);
; ocmj_write(*ico_p);
; ico_p++;
; x++;
; }
; x-=4;
; y++;
; }
; }
L24:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 14 c
.dbsym r ico_p 10 pc
.dbsym r y 12 c
.dbsym r x 22 c
.dbend
.dbfunc e cls _cls fV
; j -> R20
; i -> R14
; width -> R22
; high -> R10
; y -> R12,R13
; x -> y+10
.even
_cls::
xcall push_arg4
xcall push_gset5
movw R12,R18
ldd R10,y+14
ldd R22,y+16
.dbline -1
.dbline 280
; /* 清除屏幕区域 */
; void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)
; {
.dbline 282
; 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 283
; for(j=0;j<high;j++)
clr R20
xjmp L37
L34:
.dbline 284
; {
.dbline 285
; for(i=0;i<width;i++)
clr R14
xjmp L41
L38:
.dbline 286
.dbline 287
ldi R16,240
xcall _ocmj_write
.dbline 288
ldd R16,y+10
ldd R17,y+11
xcall _ocmj_write
.dbline 289
mov R16,R12
xcall _ocmj_write
.dbline 290
ldi R16,55
xcall _ocmj_write
.dbline 291
ldi R16,90
xcall _ocmj_write
.dbline 292
ldd R24,y+10
ldd R25,y+11
adiw R24,1
std y+10,R24
std y+11,R25
.dbline 293
L39:
.dbline 285
inc R14
L41:
.dbline 285
cp R14,R22
brlo L38
.dbline 294
mov R2,R22
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 295
movw R24,R12
adiw R24,1
movw R12,R24
.dbline 296
L35:
.dbline 283
inc R20
L37:
.dbline 283
cp R20,R10
brlo L34
.dbline -2
.dbline 297
; {
; ocmj_write(0xf0);
; ocmj_write(x);
; ocmj_write(y);
; ocmj_write(55);
; ocmj_write(90);
; x++;
; }
; x-=width;
; y++;
; }
; }
L33:
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 14 c
.dbsym r width 22 c
.dbsym r high 10 c
.dbsym r y 12 i
.dbsym l x 10 i
.dbend
.dbfunc e bmp_tran _bmp_tran fV
; j -> R20
; i -> R14
; bmp_p -> R22,R23
; width -> R10
; high -> R12
; y -> y+12
; x -> y+10
.even
_bmp_tran::
xcall push_arg4
xcall push_gset5
ldd R12,y+14
ldd R10,y+16
ldd R22,y+18
ldd R23,y+19
.dbline -1
.dbline 304
; /* 传送bmp点阵数据到LCD */
; /* x:0~15(字节为单位) y:0~64 */
; /* bmp_p:指向图形数据的指针 */
; /* high:位图高度(点阵行为单位) */
; /* width:位图宽度(以字节为单位)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -