📄 ks0108.lss
字号:
{
7f8: 1f 93 push r17
7fa: cf 93 push r28
unsigned char pages,i;
for(pages=0;pages<8;pages++)
7fc: 10 e0 ldi r17, 0x00 ; 0
{
set_page_L(pages); /* X 页地址 */
7fe: 81 2f mov r24, r17
800: 0e 94 cf 03 call 0x79e <set_page_L>
set_page_R(pages); /* X 页地址 */
804: 81 2f mov r24, r17
806: 0e 94 d6 03 call 0x7ac <set_page_R>
for(i=0;i<64;i++)
80a: c0 e0 ldi r28, 0x00 ; 0
{
set_col_addr_L(i);//Y
80c: 8c 2f mov r24, r28
80e: 0e 94 dd 03 call 0x7ba <set_col_addr_L>
set_col_addr_R(i);//Y
812: 8c 2f mov r24, r28
814: 0e 94 e4 03 call 0x7c8 <set_col_addr_R>
write_LCD(LEFT,DATA,0x0);
818: 40 e0 ldi r20, 0x00 ; 0
81a: 61 e0 ldi r22, 0x01 ; 1
81c: 84 2f mov r24, r20
81e: 0e 94 e2 02 call 0x5c4 <write_LCD>
write_LCD(RIGHT,DATA,0x0);
822: 40 e0 ldi r20, 0x00 ; 0
824: 61 e0 ldi r22, 0x01 ; 1
826: 86 2f mov r24, r22
828: 0e 94 e2 02 call 0x5c4 <write_LCD>
82c: cf 5f subi r28, 0xFF ; 255
82e: c0 34 cpi r28, 0x40 ; 64
830: 68 f3 brcs .-38 ; 0x80c <clr_lcd+0x14>
832: 1f 5f subi r17, 0xFF ; 255
834: 18 30 cpi r17, 0x08 ; 8
836: 18 f3 brcs .-58 ; 0x7fe <clr_lcd+0x6>
838: cf 91 pop r28
83a: 1f 91 pop r17
83c: 08 95 ret
0000083e <GetPage>:
}
}
}
//ASCII 字模宽度及高度
#define ASC_CHR_WIDTH 8
#define ASC_CHR_HEIGHT 12
typedef struct /* 汉字字模显示数据结构 */
{
char Index[1];
char Msk[16];
}typFNT_ASC16; //注意这与ICC的区别
typFNT_ASC16 const ASC_16[] PROGMEM =
{ /* 显示为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/*12*16 汉字字模显示数据结构 */
{
char Index[2];
char Msk[24];
} typFNT_GB16;
typFNT_GB16 const GB_16[] PROGMEM= { /* 宋体 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) /*得到当前页*/
{
return CurPage;
83e: 80 91 c6 00 lds r24, 0x00C6
}
842: 99 27 eor r25, r25
844: 08 95 ret
00000846 <GetCol>:
unsigned char GetCol(void) /*得到当前列*/
{
return CurCol;
846: 80 91 c9 00 lds r24, 0x00C9
}
84a: 99 27 eor r25, r25
84c: 08 95 ret
0000084e <SetPageCol>:
void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */
{
84e: cf 93 push r28
850: c6 2f mov r28, r22
CurPage = upage;
852: 80 93 c6 00 sts 0x00C6, r24
CurCol = ucol;
856: 60 93 c9 00 sts 0x00C9, r22
if(ucol<64)
85a: 60 34 cpi r22, 0x40 ; 64
85c: 30 f4 brcc .+12 ; 0x86a <SetPageCol+0x1c>
{
set_page_L(upage);
85e: 0e 94 cf 03 call 0x79e <set_page_L>
set_col_addr_L(ucol);
862: 8c 2f mov r24, r28
864: 0e 94 dd 03 call 0x7ba <set_col_addr_L>
868: 06 c0 rjmp .+12 ; 0x876 <SetPageCol+0x28>
}
else
{
set_page_R(upage);
86a: 0e 94 d6 03 call 0x7ac <set_page_R>
set_col_addr_R(ucol-64);
86e: 8c 2f mov r24, r28
870: 80 54 subi r24, 0x40 ; 64
872: 0e 94 e4 03 call 0x7c8 <set_col_addr_R>
876: cf 91 pop r28
878: 08 95 ret
0000087a <SetRowCol>:
}
}
/* 设置当前显示的页和列 */
void SetRowCol(unsigned char urow, unsigned char ucol)
{
unsigned char page;
CurRow = urow;
87a: 80 93 c7 00 sts 0x00C7, r24
CurCol = ucol;
87e: 60 93 c9 00 sts 0x00C9, r22
switch(urow)
882: 99 27 eor r25, r25
884: 83 30 cpi r24, 0x03 ; 3
886: 91 05 cpc r25, r1
888: 99 f0 breq .+38 ; 0x8b0 <SetRowCol+0x36>
88a: 84 30 cpi r24, 0x04 ; 4
88c: 91 05 cpc r25, r1
88e: 34 f4 brge .+12 ; 0x89c <SetRowCol+0x22>
890: 81 30 cpi r24, 0x01 ; 1
892: 91 05 cpc r25, r1
894: 49 f0 breq .+18 ; 0x8a8 <SetRowCol+0x2e>
896: 02 97 sbiw r24, 0x02 ; 2
898: 49 f0 breq .+18 ; 0x8ac <SetRowCol+0x32>
89a: 13 c0 rjmp .+38 ; 0x8c2 <SetRowCol+0x48>
89c: 84 30 cpi r24, 0x04 ; 4
89e: 91 05 cpc r25, r1
8a0: 49 f0 breq .+18 ; 0x8b4 <SetRowCol+0x3a>
8a2: 05 97 sbiw r24, 0x05 ; 5
8a4: 51 f0 breq .+20 ; 0x8ba <SetRowCol+0x40>
8a6: 0d c0 rjmp .+26 ; 0x8c2 <SetRowCol+0x48>
{
case 1:
page=0;
8a8: 20 e0 ldi r18, 0x00 ; 0
8aa: 08 c0 rjmp .+16 ; 0x8bc <SetRowCol+0x42>
CurOffset=1;
break;
case 2:
page=1;
8ac: 21 e0 ldi r18, 0x01 ; 1
8ae: 03 c0 rjmp .+6 ; 0x8b6 <SetRowCol+0x3c>
CurOffset=2;
break;
case 3:
page=3;
8b0: 23 e0 ldi r18, 0x03 ; 3
8b2: 04 c0 rjmp .+8 ; 0x8bc <SetRowCol+0x42>
CurOffset=1;
break;
case 4:
page=4;
8b4: 24 e0 ldi r18, 0x04 ; 4
CurOffset=2;
8b6: 82 e0 ldi r24, 0x02 ; 2
8b8: 02 c0 rjmp .+4 ; 0x8be <SetRowCol+0x44>
break;
case 5:
page=6;
8ba: 26 e0 ldi r18, 0x06 ; 6
CurOffset=1;
8bc: 81 e0 ldi r24, 0x01 ; 1
8be: 80 93 c8 00 sts 0x00C8, r24
break;
}
SetPageCol(page,ucol);
8c2: 82 2f mov r24, r18
8c4: 0e 94 27 04 call 0x84e <SetPageCol>
8c8: 08 95 ret
000008ca <disp_ch>:
}
void disp_ch(unsigned char c)
{
8ca: 7f 92 push r7
8cc: 8f 92 push r8
8ce: 9f 92 push r9
8d0: af 92 push r10
8d2: bf 92 push r11
8d4: cf 92 push r12
8d6: df 92 push r13
8d8: ef 92 push r14
8da: ff 92 push r15
8dc: 0f 93 push r16
8de: 1f 93 push r17
8e0: cf 93 push r28
8e2: c8 2f mov r28, r24
unsigned char k,j,uPage,uCol,ch_r,ch_w;
unsigned char width;
unsigned char len;
uPage = GetPage();
8e4: 0e 94 1f 04 call 0x83e <GetPage>
8e8: 98 2e mov r9, r24
uCol = GetCol();
8ea: 0e 94 23 04 call 0x846 <GetCol>
8ee: c8 2e mov r12, r24
len=sizeof(ASC_16)/sizeof(ASC_16[0]);
for(k=0;k<len;k++)
8f0: 77 24 eor r7, r7
8f2: e8 e2 ldi r30, 0x28 ; 40
8f4: f2 e0 ldi r31, 0x02 ; 2
{
if(c == ASC_16[k].Index[0]) break;
8f6: 80 81 ld r24, Z
8f8: 71 96 adiw r30, 0x11 ; 17
8fa: c8 17 cp r28, r24
8fc: 21 f0 breq .+8 ; 0x906 <disp_ch+0x3c>
8fe: 73 94 inc r7
900: 8e e1 ldi r24, 0x1E ; 30
902: 78 16 cp r7, r24
904: c0 f3 brcs .-16 ; 0x8f6 <disp_ch+0x2c>
}
if(k<len)
906: 8e e1 ldi r24, 0x1E ; 30
908: 78 16 cp r7, r24
90a: 08 f0 brcs .+2 ; 0x90e <disp_ch+0x44>
90c: 17 c1 rjmp .+558 ; 0xb3c <disp_ch+0x272>
{
if(c=='-'||c==':')
90e: cd 32 cpi r28, 0x2D ; 45
910: 11 f0 breq .+4 ; 0x916 <disp_ch+0x4c>
912: ca 33 cpi r28, 0x3A ; 58
914: 19 f4 brne .+6 ; 0x91c <disp_ch+0x52>
width=ASC_CHR_WIDTH-2;
916: e6 e0 ldi r30, 0x06 ; 6
918: 8e 2e mov r8, r30
91a: 07 c0 rjmp .+14 ; 0x92a <disp_ch+0x60>
else if(c=='|')
91c: cc 37 cpi r28, 0x7C ; 124
91e: 19 f4 brne .+6 ; 0x926 <disp_ch+0x5c>
width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
920: 74 e0 ldi r23, 0x04 ; 4
922: 87 2e mov r8, r23
924: 02 c0 rjmp .+4 ; 0x92a <disp_ch+0x60>
else
width=ASC_CHR_WIDTH;
926: 68 e0 ldi r22, 0x08 ; 8
928: 86 2e mov r8, r22
if(CurOffset==1) //下半部是写半个字节
92a: 80 91 c8 00 lds r24, 0x00C8
92e: 81 30 cpi r24, 0x01 ; 1
930: 09 f0 breq .+2 ; 0x934 <disp_ch+0x6a>
932: 7d c0 rjmp .+250 ; 0xa2e <disp_ch+0x164>
{
for(j=0;j<width;j++)
934: dd 24 eor r13, r13
936: d8 14 cp r13, r8
938: 68 f5 brcc .+90 ; 0x994 <disp_ch+0xca>
93a: 0c 2d mov r16, r12
93c: 11 27 eor r17, r17
93e: ee 24 eor r14, r14
940: ff 24 eor r15, r15
{
SetPageCol(uPage,uCol+j);
942: 8c 2d mov r24, r12
944: 8d 0d add r24, r13
946: 68 2f mov r22, r24
948: 89 2d mov r24, r9
94a: 0e 94 27 04 call 0x84e <SetPageCol>
ch_w=ASC_16[k].Msk[j];
94e: 87 2d mov r24, r7
950: 99 27 eor r25, r25
952: fc 01 movw r30, r24
954: 54 e0 ldi r21, 0x04 ; 4
956: ee 0f add r30, r30
958: ff 1f adc r31, r31
95a: 5a 95 dec r21
95c: e1 f7 brne .-8 ; 0x956 <disp_ch+0x8c>
95e: e8 0f add r30, r24
960: f9 1f adc r31, r25
962: ee 0d add r30, r14
964: ff 1d adc r31, r15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -