📄 t6963.s
字号:
.dbline 193
; {
.dbline 194
; return 1;
ldi R16,1
xjmp L51
L52:
.dbline 196
; }
; WR_DAT(uData);
mov R16,R20
xcall _WR_DAT
.dbline 197
; return(0); // 返回0 成功
clr R16
.dbline -2
L51:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r uData 20 c
.dbend
.dbfunc e fnPR2 _fnPR2 fc
; temp -> R20
.even
_fnPR2::
xcall push_gset1
.dbline -1
.dbline 203
; }
; /************************/
; /* 读数据*/
; /************************/
; unsigned char fnPR2(void)
; {
.dbline 205
; unsigned char temp;
; if(fnSTA01() == 0)
xcall _fnSTA01
tst R16
brne L55
.dbline 206
; {
.dbline 207
; return 1; // 获取状态如果状态错
ldi R16,1
xjmp L54
L55:
.dbline 209
; }
; temp=RD_DAT();
xcall _RD_DAT
mov R20,R16
.dbline 210
; return(temp); // 返回数据
.dbline -2
L54:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.dbfunc e fnSetPos _fnSetPos fV
; iPos -> R10,R11
; ucol -> R20
; urow -> R22
.even
_fnSetPos::
xcall push_gset3
mov R20,R18
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 216
; }
; /************************/
; /* 设置当前地址*/
; /************************/
; void fnSetPos(unsigned char urow, unsigned char ucol)
; {
.dbline 218
; unsigned int iPos;
; iPos = (unsigned int)urow * 30 + ucol;
ldi R24,30
mul R24,R22
movw R10,R0
mov R2,R20
clr R3
add R10,R2
adc R11,R3
.dbline 219
; fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
movw R2,R10
mov R2,R3
clr R3
std y+0,R2
mov R18,R10
andi R19,0
ldi R16,36
xcall _fnPR1
.dbline 220
; gCurRow = urow;
sts _gCurRow,R22
.dbline 221
; gCurCol = ucol;
sts _gCurCol,R20
.dbline -2
.dbline 222
; }
L57:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r iPos 10 i
.dbsym r ucol 20 c
.dbsym r urow 22 c
.dbend
.dbfunc e cursor _cursor fV
; uCol -> R22
; uRow -> R20
.even
_cursor::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 227
; /**********************/
; /* 设置当前显示行列*/
; /**********************/
; void cursor(unsigned char uRow, unsigned char uCol)
; {
.dbline 228
; fnSetPos(uRow * 16, uCol);
mov R18,R22
ldi R24,16
mul R24,R20
mov R16,R0
xcall _fnSetPos
.dbline -2
.dbline 229
; }
L58:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r uCol 22 c
.dbsym r uRow 20 c
.dbend
.dbfunc e cls _cls fV
; i -> R20,R21
.even
_cls::
xcall push_gset1
sbiw R28,1
.dbline -1
.dbline 234
; /*********************/
; /* 清屏*/
; /*********************/
; void cls(void)
; {
.dbline 236
; unsigned int i;
; fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _fnPR1
.dbline 237
; fnPR12(LC_AUT_WR); // 自动写
ldi R16,176
xcall _fnPR12
.dbline 238
; for(i=0;i<240*128/8;i++) // 清一屏
clr R20
clr R21
xjmp L63
L60:
.dbline 239
.dbline 240
xcall _fnSTA3
.dbline 241
clr R16
xcall _fnPR13
.dbline 242
L61:
.dbline 238
subi R20,255 ; offset = 1
sbci R21,255
L63:
.dbline 238
cpi R20,0
ldi R30,15
cpc R21,R30
brlo L60
.dbline 243
; {
; fnSTA3();
; fnPR13(0x0); // 写数据实际使用时请将0x55 改成0x0
; }
; fnPR12(LC_AUT_OVR); // 自动写结束
ldi R16,178
xcall _fnPR12
.dbline 244
; fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _fnPR1
.dbline 245
; gCurRow = 0; // 置地址指针存储变量
clr R2
sts _gCurRow,R2
.dbline 246
; gCurCol = 0;
sts _gCurCol,R2
.dbline -2
.dbline 247
; }
L59:
adiw R28,1
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.dbfunc e fnLCMInit _fnLCMInit fc
.even
_fnLCMInit::
sbiw R28,1
.dbline -1
.dbline 252
; /************************/
; /* LCM 初始化*/
; /************************/
; char fnLCMInit(void)
; {
.dbline 253
; if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,64
xcall _fnPR1
tst R16
breq L65
.dbline 254
; {
.dbline 255
; return (0xff);
ldi R16,255
xjmp L64
L65:
.dbline 257
; }
; fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,65
xcall _fnPR1
.dbline 258
; fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,66
xcall _fnPR1
.dbline 259
; fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,67
xcall _fnPR1
.dbline 260
; fnPR12(LC_CUR_SHP | 0x01); // 光标形状
ldi R16,161
xcall _fnPR12
.dbline 261
; fnPR12(LC_MOD_OR); // 显示方式设置
ldi R16,128
xcall _fnPR12
.dbline 262
; fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
ldi R16,152
xcall _fnPR12
.dbline 263
; return(0);
clr R16
.dbline -2
L64:
adiw R28,1
.dbline 0 ; func end
ret
.dbend
.dbfunc e dprintf _dprintf fc
; cData -> y+3
; uLen -> y+2
; i -> y+1
; c2 -> R22
; uRow -> y+0
; uCol -> R14
; c1 -> R20
; k -> R10,R11
; j -> R12
; ptr -> y+14
; y -> R22
; x -> R20
.even
_dprintf::
xcall push_gset5
mov R22,R18
mov R20,R16
sbiw R28,4
.dbline -1
.dbline 269
; }
; /********************************************************/
; /* ASCII(8*16) 及 汉字(16*16) 显示函数 */
; /********************************************************/
; unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
; {
.dbline 273
; unsigned char c1,c2,cData;
; unsigned char i,j,uLen,uRow,uCol;
; unsigned int k;
; uLen=0;
clr R0
std y+2,R0
.dbline 274
; i=0;
std y+1,R0
.dbline 275
; uRow = y;
std y+0,R22
.dbline 276
; uCol = x;
mov R14,R20
.dbline 277
; fnSetPos(uRow*16,uCol); //起点定位
mov R18,R14
ldi R24,16
mov R0,R22
mul R24,R0
mov R16,R0
xcall _fnSetPos
xjmp L69
L68:
.dbline 279
.dbline 280
ldd R0,y+2
inc R0
std y+2,R0
.dbline 281
L69:
.dbline 278
; while (ptr[uLen]!=0) //探测字串长度
ldd R30,y+2
clr R31
ldd R0,y+14
ldd R1,y+15
add R30,R0
adc R31,R1
ldd R2,z+0
tst R2
brne L68
xjmp L72
L71:
.dbline 283
; {
; uLen++;
; }
; while(i<uLen)
; {
.dbline 284
; c1 = ptr[i];
ldd R30,y+1
clr R31
ldd R0,y+14
ldd R1,y+15
add R30,R0
adc R31,R1
ldd R20,z+0
.dbline 285
; c2 = ptr[i+1];
ldd R30,y+1
clr R31
add R30,R0
adc R31,R1
ldd R22,z+1
.dbline 287
; //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
; uRow = fnGetRow();
xcall _fnGetRow
std y+0,R16
.dbline 288
; uCol = fnGetCol();
xcall _fnGetCol
mov R14,R16
.dbline 289
; if(c1 <=128) // ASCII
ldi R24,128
cp R24,R20
brlo L74
.dbline 290
; {
.dbline 291
; for(j=0;j<16;j++) //写16行
clr R12
xjmp L79
L76:
.dbline 292
; {
.dbline 293
; fnPR12(LC_AUT_WR); // 写数据(命令)
ldi R16,176
xcall _fnPR12
.dbline 294
; if (c1 >= 0x20)
cpi R20,32
brlo L80
.dbline 295
; {
.dbline 296
; fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
ldi R24,16
mul R24,R20
movw R30,R0
subi R30,0
sbci R31,2
mov R2,R12
clr R3
add R30,R2
adc R31,R3
ldi R24,<_ASC_MSK
ldi R25,>_ASC_MSK
add R30,R24
adc R31,R25
lpm R16,Z
xcall _fnPR13
.dbline 297
; }
xjmp L81
L80:
.dbline 299
; else
; {
.dbline 300
; fnPR13(cData);
ldd R16,y+3
xcall _fnPR13
.dbline 301
; }
L81:
.dbline 302
ldi R16,178
xcall _fnPR12
.dbline 303
mov R18,R14
ldd R16,y+0
add R16,R12
subi R16,255 ; addi 1
xcall _fnSetPos
.dbline 304
L77:
.dbline 291
inc R12
L79:
.dbline 291
mov R24,R12
cpi R24,16
brlo L76
.dbline 305
; fnPR12(LC_AUT_OVR); //写数据结束
; fnSetPos(uRow+j+1,uCol);
; }
; if(c1 != BS) // 非退格
cpi R20,8
brne X0
xjmp L75
X0:
.dbline 306
; {
.dbline 307
; uCol++; // 列数加1
inc R14
.dbline 308
; }
.dbline 310
;
; }
xjmp L75
L74:
.dbline 312
; else // 中文
; {
.dbline 313
; for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) // 查找定位
clr R12
xjmp L87
L84:
.dbline 314
; {
.dbline 315
; if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
ldi R24,34
mul R24,R12
movw R2,R0
ldi R24,<_GB_16
ldi R25,>_GB_16
movw R30,R2
add R30,R24
adc R31,R25
lpm R30,Z
cp R20,R30
brne L88
ldi R24,<_GB_16+1
ldi R25,>_GB_16+1
movw R30,R2
add R30,R24
adc R31,R25
lpm R30,Z
cp R22,R30
brne L88
.dbline 316
; {
.dbline 317
; break;
xjmp L86
L88:
.dbline 320
L85:
.dbline 313
inc R12
L87:
.dbline 313
mov R24,R12
cpi R24,4
brlo L84
L86:
.dbline 321
; }
;
; }
; for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
clr R10
clr R11
xjmp L94
L91:
.dbline 322
; {
.dbline 323
; fnSetPos(uRow+k,uCol);
mov R18,R14
ldd R16,y+0
clr R17
add R16,R10
adc R17,R11
xcall _fnSetPos
.dbline 324
; fnPR12(LC_AUT_WR); // 写数据
ldi R16,176
xcall _fnPR12
.dbline 325
; if(j < sizeof(GB_16)/sizeof(GB_16[0]))
mov R24,R12
cpi R24,4
brsh L96
.dbline 326
; {
.dbline 327
; fnPR13(GB_16[j].Msk[k*2]);
ldi R24,34
mul R24,R12
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
add R30,R2
adc R31,R3
lpm R16,Z
xcall _fnPR13
.dbline 328
; fnPR13(GB_16[j].Msk[k*2+1]);
ldi R24,34
mul R24,R12
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
adiw R30,1
add R30,R2
adc R31,R3
lpm R16,Z
xcall _fnPR13
.dbline 329
; }
xjmp L97
L96:
.dbline 331
; else // 未找到该字
; {
.dbline 332
; if(k < sizeof(GB_16[0].Msk)/4)
movw R24,R10
cpi R24,8
ldi R30,0
cpc R25,R30
brsh L100
.dbline 333
; {
.dbline 334
; fnPR13(0x00);
clr R16
xcall _fnPR13
.dbline 335
; fnPR13(0x00);
clr R16
xcall _fnPR13
.dbline 336
; }
xjmp L101
L100:
.dbline 338
; else
; {
.dbline 339
; fnPR13(0xff);
ldi R16,255
xcall _fnPR13
.dbline 340
; fnPR13(0xff);
ldi R16,255
xcall _fnPR13
.dbline 341
; }
L101:
.dbline 342
; }
L97:
.dbline 343
ldi R16,178
xcall _fnPR12
.dbline 344
L92:
.dbline 321
movw R24,R10
adiw R24,1
movw R10,R24
L94:
.dbline 321
movw R24,R10
cpi R24,16
ldi R30,0
cpc R25,R30
brsh X1
xjmp L91
X1:
.dbline 345
; fnPR12(LC_AUT_OVR);
; }
; uCol += 2;
mov R24,R14
subi R24,254 ; addi 2
mov R14,R24
.dbline 346
; i++;
ldd R0,y+1
inc R0
std y+1,R0
.dbline 347
L75:
.dbline 347
; };
.dbline 348
; if(uCol >= 30) // 光标后移
mov R24,R14
cpi R24,30
brlo L103
.dbline 349
; {
.dbline 350
; uRow += 16;
ldd R24,y+0
subi R24,240 ; addi 16
std y+0,R24
.dbline 351
; if(uRow < 0x80)
cpi R24,128
brsh L105
.dbline 352
; {
.dbline 353
; uCol -= 30;
mov R24,R14
subi R24,30
mov R14,R24
.dbline 354
; }
xjmp L106
L105:
.dbline 356
; else
; {
.dbline 357
; uRow = 0;
clr R0
std y+0,R0
.dbline 358
; uCol = 0;
clr R14
.dbline 359
; }
L106:
.dbline 360
; }
L103:
.dbline 361
mov R18,R14
ldd R16,y+0
xcall _fnSetPos
.dbline 362
ldd R0,y+1
inc R0
std y+1,R0
.dbline 363
L72:
.dbline 282
ldd R0,y+1
ldd R16,y+2
cp R0,R16
brsh X2
xjmp L71
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -