📄 ks0108.s
字号:
.byte 0,0
.byte 4,4
.byte 5,4
.byte 7,4
.byte 7,6
.byte 5,4
.byte 4,0
.byte 202,190
.byte 16,18
.byte 146,'R
.byte 18,242
.byte 18,18
.byte 'S,146
.byte 16,0
.byte 2,1
.byte 0,4
.byte 4,7
.byte 0,0
.byte 0,0
.byte 3,0
.byte 181,196
.byte 252,'D
.byte 'F,'E
.byte 252,16
.byte 44,199
.byte 4,4
.byte 252,0
.byte 7,2
.byte 2,2
.byte 7,0
.byte 0,4
.byte 4,4
.byte 3,0
.byte 181,218
.byte 4,234
.byte 171,174
.byte 170,252
.byte 170,171
.byte 174,186
.byte 130,0
.byte 4,4
.byte 2,1
.byte 0,7
.byte 0,2
.byte 2,2
.byte 1,0
.byte 210,187
.byte 32,32
.byte 32,32
.byte 32,32
.byte 32,32
.byte 32,48
.byte 32,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 208,208
.byte 'H,36
.byte 243,8
.byte 9,9
.byte 9,9
.byte 249,9
.byte 8,0
.byte 0,0
.byte 7,0
.byte 0,4
.byte 4,4
.byte 7,0
.byte 0,0
.byte 182,254
.byte 0,4
.byte 4,4
.byte 4,4
.byte 4,4
.byte 6,4
.byte 0,0
.byte 2,2
.byte 2,2
.byte 2,2
.byte 2,2
.byte 2,2
.byte 2,0
.byte 200,253
.byte 0,2
.byte 34,34
.byte 34,34
.byte 34,34
.byte 35,2
.byte 0,0
.byte 4,4
.byte 4,4
.byte 4,4
.byte 4,4
.byte 4,6
.byte 4,0
.byte 203,196
.byte 0,255
.byte 129,'A
.byte 63,1
.byte 1,255
.byte 129,129
.byte 255,0
.byte 0,7
.byte 2,2
.byte 2,2
.byte 2,2
.byte 2,2
.byte 7,0
.byte 206,229
.byte 0,17
.byte 17,145
.byte 127,17
.byte 17,17
.byte 241,1
.byte 0,0
.byte 4,4
.byte 4,7
.byte 4,4
.byte 4,4
.byte 7,4
.byte 4,0
.dbstruct 0 26 typFNT_GB16
.dbfield 0 Index A[2:2]c
.dbfield 2 Msk A[24:24]c
.dbend
.dbsym e GB_16 _GB_16 A[468:18]kS[typFNT_GB16]
.area text(rom, con, rel)
.dbfile E:\dongshanyiyu\12864\AVR_KS0108\ks0108.c
.dbfunc e GetPage _GetPage fc
.even
_GetPage::
.dbline -1
.dbline 310
; {
; set_col_addr_L(i);//Y
; set_col_addr_R(i);//Y
; write_LCD(LEFT,DATA,0x0);
; write_LCD(RIGHT,DATA,0x0);
; }
; }
; }
;
; //ASCII 字模宽度及高度
; #define ASC_CHR_WIDTH 8
; #define ASC_CHR_HEIGHT 12
;
; typedef struct typFNT_ASC16 /* 汉字字模显示数据结构 */
; {
; char Index[1];
; char Msk[16];
; };
; const struct typFNT_ASC16 ASC_16[] =
; { /* 显示为8*16 Curier 10 常规*/
; "1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
; "2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
; "3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
; "4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00,
; "5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
; "6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
; "7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,
; "8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
; "9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,
; "0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
; ".",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
; ",",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
; ":",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
; ";",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
; "-",0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; "_",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
; "A",0x00,0x00,0x80,0x64,0x1C,0x60,0x80,0x00,0x00,0x04,0x07,0x05,0x01,0x05,0x07,0x04,
; "B",0x00,0x04,0xFC,0x44,0x44,0x44,0x44,0xB8,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x03,
; "C",0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02,
; "D",0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,0x04,0x07,0x04,0x04,0x04,0x02,0x01,
; "E",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x06,
; "F",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x00,0x00,0x00,
; " ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; "=",0x00,0x00,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; "(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00,
; ")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00,
; "V",0x00,0x04,0x3C,0xC4,0x00,0xC4,0x3C,0x04,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x00,
; "m",0x00,0x20,0xE0,0x20,0xC0,0x20,0xC0,0x00,0x00,0x04,0x07,0x00,0x07,0x00,0x07,0x04,
; "H",0x00,0x04,0xFC,0x44,0x40,0x44,0xFC,0x04,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04,
; "*",0x90,0x90,0x60,0xFC,0x60,0x90,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
; };
;
; #define ASC_HZ_WIDTH 12
; //#define ASC_HZ_HEIGHT 12
;
; typedef struct typFNT_GB16 /*12*16 汉字字模显示数据结构 */
; {
; char Index[2];
; char Msk[24];
; };
; const struct typFNT_GB16 GB_16[] = { /* 宋体 9 显示为12*16 */
; "科",0x8A,0x6A,0xFE,0x29,0x49,0x80,0x92,0xA4,0x80,0xFF,0x40,0x00,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
; "技",0x44,0x44,0xFF,0x24,0x00,0x64,0xA4,0x3F,0xA4,0x64,0x04,0x00,0x04,0x04,0x07,0x00,0x04,0x04,0x02,0x01,0x02,0x04,0x04,0x00,
; "有",0x42,0x22,0x12,0xFA,0x4E,0x4B,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x00,0x00,0x00,0x07,0x01,0x01,0x01,0x05,0x07,0x00,0x00,0x00,
; "限",0xFF,0x81,0x99,0xE7,0x00,0xFF,0x25,0xE5,0x25,0xBF,0x40,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x02,0x04,0x00,
; "公",0x20,0x10,0x08,0x07,0xC0,0x30,0x83,0x0C,0x10,0x20,0x20,0x00,0x00,0x04,0x06,0x05,0x04,0x04,0x02,0x03,0x06,0x00,0x00,0x00,
; "司",0x08,0x09,0xE9,0x29,0x29,0x29,0xED,0x09,0x01,0xFF,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x07,0x00,0x00,
; "液",0x19,0xE2,0x14,0x42,0xF2,0x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00,
; "晶",0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00,
; "显",0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00,
; "示",0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00,
; "的",0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00,
; "第",0x04,0xEA,0xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00,
; "一",0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; "行",0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00,
; "二",0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
; "三",0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,
; "四",0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00,
; "五",0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00,
; };
;
; unsigned char GetPage(void) /*得到当前页*/
; {
.dbline 311
; return CurPage;
lds R16,_CurPage
.dbline -2
L43:
.dbline 0 ; func end
ret
.dbend
.dbfunc e GetCol _GetCol fc
.even
_GetCol::
.dbline -1
.dbline 315
; }
;
; unsigned char GetCol(void) /*得到当前列*/
; {
.dbline 316
; return CurCol;
lds R16,_CurCol
.dbline -2
L44:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SetPageCol _SetPageCol fV
; ucol -> R20
; upage -> R22
.even
_SetPageCol::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 320
; }
;
; void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */
; {
.dbline 321
; CurPage = upage;
sts _CurPage,R22
.dbline 322
; CurCol = ucol;
sts _CurCol,R20
.dbline 323
; if(ucol<64)
cpi R20,64
brsh L46
.dbline 324
; {
.dbline 325
; set_page_L(upage);
mov R16,R22
xcall _set_page_L
.dbline 326
; set_col_addr_L(ucol);
mov R16,R20
xcall _set_col_addr_L
.dbline 327
; }
xjmp L47
L46:
.dbline 329
.dbline 330
mov R16,R22
xcall _set_page_R
.dbline 331
mov R16,R20
subi R16,64
xcall _set_col_addr_R
.dbline 332
L47:
.dbline -2
L45:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ucol 20 c
.dbsym r upage 22 c
.dbend
.dbfunc e SetRowCol _SetRowCol fV
; page -> R20
; ucol -> R22
; urow -> R20
.even
_SetRowCol::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 337
; else
; {
; set_page_R(upage);
; set_col_addr_R(ucol-64);
; }
; }
;
; /* 设置当前显示的页和列 */
; void SetRowCol(unsigned char urow, unsigned char ucol)
; {
.dbline 339
; unsigned char page;
; CurRow = urow;
sts _CurRow,R20
.dbline 340
; CurCol = ucol;
sts _CurCol,R22
.dbline 342
;
; switch(urow)
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L52
cpi R20,2
ldi R30,0
cpc R21,R30
breq L53
cpi R20,3
ldi R30,0
cpc R21,R30
breq L54
cpi R20,4
ldi R30,0
cpc R21,R30
breq L55
cpi R20,5
ldi R30,0
cpc R21,R30
breq L56
xjmp L49
X0:
.dbline 343
; {
L52:
.dbline 345
; case 1:
; page=0;
clr R20
.dbline 346
; CurOffset=1;
ldi R24,1
sts _CurOffset,R24
.dbline 347
; break;
xjmp L50
L53:
.dbline 349
; case 2:
; page=1;
ldi R20,1
.dbline 350
; CurOffset=2;
ldi R24,2
sts _CurOffset,R24
.dbline 351
; break;
xjmp L50
L54:
.dbline 353
; case 3:
; page=3;
ldi R20,3
.dbline 354
; CurOffset=1;
ldi R24,1
sts _CurOffset,R24
.dbline 355
; break;
xjmp L50
L55:
.dbline 357
; case 4:
; page=4;
ldi R20,4
.dbline 358
; CurOffset=2;
ldi R24,2
sts _CurOffset,R24
.dbline 359
; break;
xjmp L50
L56:
.dbline 361
; case 5:
; page=6;
ldi R20,6
.dbline 362
; CurOffset=1;
ldi R24,1
sts _CurOffset,R24
.dbline 363
; break;
L49:
L50:
.dbline 365
; }
; SetPageCol(page,ucol);
mov R18,R22
mov R16,R20
xcall _SetPageCol
.dbline -2
L48:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r page 20 c
.dbsym r ucol 22 c
.dbsym r urow 20 c
.dbend
.dbfunc e disp_ch _disp_ch fV
; width -> R22
; len -> R22
; uPage -> y+2
; ch_r -> R10
; uCol -> y+1
; ch_w -> R14
; k -> R20
; j -> R12
; c -> R10
.even
_disp_ch::
xcall push_gset5
mov R10,R16
sbiw R28,3
.dbline -1
.dbline 369
; }
;
; void disp_ch(unsigned char c)
; {
.dbline 373
; unsigned char k,j,uPage,uCol,ch_r,ch_w;
; unsigned char width;
; unsigned char len;
; uPage = GetPage();
xcall _GetPage
std y+2,R16
.dbline 374
; uCol = GetCol();
xcall _GetCol
std y+1,R16
.dbline 375
; len=sizeof(ASC_16)/sizeof(ASC_16[0]);
ldi R22,30
.dbline 376
; for(k=0;k<len;k++)
clr R20
xjmp L61
L58:
.dbline 377
; {
.dbline 378
; if(c == ASC_16[k].Index[0] ) break;
ldi R24,17
mul R24,R20
movw R30,R0
ldi R24,<_ASC_16
ldi R25,>_ASC_16
add R30,R24
adc R31,R25
lpm R30,Z
cp R10,R30
brne L62
.dbline 378
xjmp L60
L62:
.dbline 379
L59:
.dbline 376
inc R20
L61:
.dbline 376
cp R20,R22
brlo L58
L60:
.dbline 380
; }
; if(k<len)
cp R20,R22
brlo X1
xjmp L64
X1:
.dbline 381
; {
.dbline 383
;
; if(c=='-'||c==':')
mov R24,R10
cpi R24,45
breq L68
cpi R24,58
brne L66
L68:
.dbline 384
; width=ASC_CHR_WIDTH-2;
ldi R22,6
xjmp L67
L66:
.dbline 385
; else if(c=='|')
mov R24,R10
cpi R24,124
brne L69
.dbline 386
; width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
ldi R22,4
xjmp L70
L69:
.dbline 388
; else
; width=ASC_CHR_WIDTH;
ldi R22,8
L70:
L67:
.dbline 390
;
; if(CurOffset==1) //下半部是写半个字节
lds R24,_CurOffset
cpi R24,1
breq X2
xjmp L71
X2:
.dbline 391
; {
.dbline 392
; for(j=0;j<width;j++)
clr R12
xjmp L76
L73:
.dbline 393
; {
.dbline 394
; SetPageCol(uPage,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
xcall _SetPageCol
.dbline 395
; ch_w=ASC_16[k].Msk[j];
ldi R24,17
mul R24,R20
movw R2,R0
ldi R24,<_ASC_16+1
ldi R25,>_ASC_16+1
add R2,R24
adc R3,R25
mov R30,R12
clr R31
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 396
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L78
.dbline 396
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L79
L78:
.dbline 397
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L79:
.dbline 398
L74:
.dbline 392
inc R12
L76:
.dbline 392
cp R12,R22
brlo L73
.dbline 399
; }
; SetPageCol(uPage+1,uCol);
ldd R18,y+1
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 401
;
; for(j=0;j<width;j++)
clr R12
xjmp L83
L80:
.dbline 402
; {
.dbline 403
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 404
; if(uCol+j<64) ch_r=read_LCD(LEFT);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L84
.dbline 404
clr R16
xcall _read_LCD
mov R10,R16
xjmp L85
L84:
.dbline 405
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R10,R16
L85:
.dbline 406
; ch_r&=0xf0;
mov R24,R10
andi R24,240
mov R10,R24
.dbline 407
; ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;
ldi R24,17
mul R24,R20
movw R2,R0
ldi R24,<_ASC_16+1
ldi R25,>_ASC_16+1
add R2,R24
adc R3,R25
mov R30,R12
clr R31
adiw R30,8
add R30,R2
adc R31,R3
lpm R30,Z
andi R30,15
mov R14,R30
.dbline 408
; ch_w|=ch_r;
or R14,R10
.dbline 409
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 410
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L87
.dbline 410
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L88
L87:
.dbline 411
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L88:
.dbline 412
L81:
.dbline 401
inc R12
L83:
.dbline 401
cp R12,R22
brsh X3
xjmp L80
X3:
.dbline 413
; }
; }
xjmp L72
L71:
.dbline 415
; else //上半部是写半个字节
; {
.dbline 416
; for(j=0;j<width;j++)
clr R12
xjmp L92
L89:
.dbline 417
; {
.dbline 418
; SetPageCol(uPage,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
xcall _SetPageCol
.dbline 419
; if(uCol+j<64) ch_r=read_LCD(LEFT);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L93
.dbline 419
clr R16
xcall _read_LCD
mov R10,R16
xjmp L94
L93:
.dbline 420
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R10,R16
L94:
.dbline 421
; ch_r&=0x0f;
mov R24,R10
andi R24,15
mov R10,R24
.dbline 422
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -