test_lcd.lss
来自「在WinAVR下的ST7565圖形點陣的驅動程序」· LSS 代码 · 共 1,839 行 · 第 1/5 页
LSS
1,839 行
dptr = &ASCII[(XH_Dig-0x20)*16];
LCD_SetPageAddress(adrPage);
LCD_SetColumnAddress(adrColumn);
for(i=0; i< 8; i++)
a2a: c8 30 cpi r28, 0x08 ; 8
a2c: d1 05 cpc r29, r1
a2e: a9 f7 brne .-22 ; 0xa1a <LCD_DisplayASCII+0x38>
a30: e8 01 movw r28, r16
a32: 28 96 adiw r28, 0x08 ; 8
{
LCD_WriteData(pgm_read_byte(dptr));
dptr = dptr + 1;
}
LCD_SetPageAddress(adrPage+1);
a34: 8f 2d mov r24, r15
a36: 8f 5f subi r24, 0xFF ; 255
a38: 0e 94 52 04 call 0x8a4 ; 0x8a4 <LCD_SetPageAddress>
LCD_SetColumnAddress(adrColumn);
a3c: 8e 2d mov r24, r14
a3e: 0e 94 45 04 call 0x88a ; 0x88a <LCD_SetColumnAddress>
for(i=0; i< 8; i++)
a42: 00 5f subi r16, 0xF0 ; 240
a44: 1f 4f sbci r17, 0xFF ; 255
{
LCD_WriteData(pgm_read_byte(dptr));
a46: fe 01 movw r30, r28
a48: 84 91 lpm r24, Z+
a4a: 0e 94 b2 04 call 0x964 ; 0x964 <LCD_WriteData>
dptr = dptr + 1;
a4e: 21 96 adiw r28, 0x01 ; 1
dptr = dptr + 1;
}
LCD_SetPageAddress(adrPage+1);
LCD_SetColumnAddress(adrColumn);
for(i=0; i< 8; i++)
a50: c0 17 cp r28, r16
a52: d1 07 cpc r29, r17
a54: c1 f7 brne .-16 ; 0xa46 <LCD_DisplayASCII+0x64>
{
LCD_WriteData(pgm_read_byte(dptr));
dptr = dptr + 1;
}
}
a56: df 91 pop r29
a58: cf 91 pop r28
a5a: 1f 91 pop r17
a5c: 0f 91 pop r16
a5e: ff 90 pop r15
a60: ef 90 pop r14
a62: 08 95 ret
00000a64 <LCD_DisplayHZ>:
//-----------------------------------------------------------------------------
// LCD : Display Chinese.
// Size: 16x16
//-----------------------------------------------------------------------------
uint8 LCD_DisplayHZ(char* XH_HZ, uint8 adrPage, uint8 adrColumn)
{
a64: cf 92 push r12
a66: df 92 push r13
a68: ef 92 push r14
a6a: ff 92 push r15
a6c: 0f 93 push r16
a6e: 1f 93 push r17
a70: cf 93 push r28
a72: df 93 push r29
a74: fc 01 movw r30, r24
a76: d6 2e mov r13, r22
a78: c4 2e mov r12, r20
uint8 *dptr; // dptr_adderss for HZ code.
uint8 i, j;
char charH, charL;
charH = *XH_HZ++;
a7a: 60 81 ld r22, Z
charL = *XH_HZ;
a7c: 51 81 ldd r21, Z+1 ; 0x01
a7e: 20 e0 ldi r18, 0x00 ; 0
a80: 30 e0 ldi r19, 0x00 ; 0
a82: 42 2f mov r20, r18
for(j=0; j<sizeof(HZ_Table)/sizeof(HZ_t); j++)
{
dptr = &HZ_Table[j].Hz_Data[0];
if(charH == pgm_read_byte(dptr) && charL == pgm_read_byte(dptr+1))
a84: c9 01 movw r24, r18
a86: fc 01 movw r30, r24
a88: 15 e0 ldi r17, 0x05 ; 5
a8a: ee 0f add r30, r30
a8c: ff 1f adc r31, r31
a8e: 1a 95 dec r17
a90: e1 f7 brne .-8 ; 0xa8a <LCD_DisplayHZ+0x26>
a92: 88 0f add r24, r24
a94: 99 1f adc r25, r25
a96: e8 0f add r30, r24
a98: f9 1f adc r31, r25
a9a: e4 58 subi r30, 0x84 ; 132
a9c: f9 4f sbci r31, 0xF9 ; 249
a9e: e4 91 lpm r30, Z+
aa0: 6e 17 cp r22, r30
aa2: 81 f4 brne .+32 ; 0xac4 <LCD_DisplayHZ+0x60>
aa4: c9 01 movw r24, r18
aa6: fc 01 movw r30, r24
aa8: a5 e0 ldi r26, 0x05 ; 5
aaa: ee 0f add r30, r30
aac: ff 1f adc r31, r31
aae: aa 95 dec r26
ab0: e1 f7 brne .-8 ; 0xaaa <LCD_DisplayHZ+0x46>
ab2: 88 0f add r24, r24
ab4: 99 1f adc r25, r25
ab6: e8 0f add r30, r24
ab8: f9 1f adc r31, r25
aba: e3 58 subi r30, 0x83 ; 131
abc: f9 4f sbci r31, 0xF9 ; 249
abe: e4 91 lpm r30, Z+
ac0: 5e 17 cp r21, r30
ac2: 51 f0 breq .+20 ; 0xad8 <LCD_DisplayHZ+0x74>
break;
ac4: 4f 5f subi r20, 0xFF ; 255
ac6: 2f 5f subi r18, 0xFF ; 255
ac8: 3f 4f sbci r19, 0xFF ; 255
char charH, charL;
charH = *XH_HZ++;
charL = *XH_HZ;
for(j=0; j<sizeof(HZ_Table)/sizeof(HZ_t); j++)
aca: 29 30 cpi r18, 0x09 ; 9
acc: 31 05 cpc r19, r1
ace: c9 f6 brne .-78 ; 0xa82 <LCD_DisplayHZ+0x1e>
{
dptr = &HZ_Table[j].Hz_Data[0];
if(charH == pgm_read_byte(dptr) && charL == pgm_read_byte(dptr+1))
break;
}
if(j<sizeof(HZ_Table)/sizeof(HZ_t))
ad0: 49 30 cpi r20, 0x09 ; 9
ad2: 10 f0 brcs .+4 ; 0xad8 <LCD_DisplayHZ+0x74>
ad4: 80 e0 ldi r24, 0x00 ; 0
ad6: 3f c0 rjmp .+126 ; 0xb56 <LCD_DisplayHZ+0xf2>
dptr = HZ_Table[j].Table;
ad8: e4 2e mov r14, r20
ada: ff 24 eor r15, r15
adc: 87 01 movw r16, r14
ade: 44 e0 ldi r20, 0x04 ; 4
ae0: 00 0f add r16, r16
ae2: 11 1f adc r17, r17
ae4: 4a 95 dec r20
ae6: e1 f7 brne .-8 ; 0xae0 <LCD_DisplayHZ+0x7c>
ae8: 0e 0d add r16, r14
aea: 1f 1d adc r17, r15
aec: 00 0f add r16, r16
aee: 11 1f adc r17, r17
af0: 02 58 subi r16, 0x82 ; 130
af2: 19 4f sbci r17, 0xF9 ; 249
else
return FALSE;
LCD_SetPageAddress(adrPage);
af4: 8d 2d mov r24, r13
af6: 0e 94 52 04 call 0x8a4 ; 0x8a4 <LCD_SetPageAddress>
LCD_SetColumnAddress(adrColumn);
afa: 8c 2d mov r24, r12
afc: 0e 94 45 04 call 0x88a ; 0x88a <LCD_SetColumnAddress>
b00: c0 e0 ldi r28, 0x00 ; 0
b02: d0 e0 ldi r29, 0x00 ; 0
for(i=0; i< 16; i++)
{
LCD_WriteData(pgm_read_byte(dptr));
b04: f8 01 movw r30, r16
b06: ec 0f add r30, r28
b08: fd 1f adc r31, r29
b0a: e4 91 lpm r30, Z+
b0c: 8e 2f mov r24, r30
b0e: 0e 94 b2 04 call 0x964 ; 0x964 <LCD_WriteData>
b12: 21 96 adiw r28, 0x01 ; 1
else
return FALSE;
LCD_SetPageAddress(adrPage);
LCD_SetColumnAddress(adrColumn);
for(i=0; i< 16; i++)
b14: c0 31 cpi r28, 0x10 ; 16
b16: d1 05 cpc r29, r1
b18: a9 f7 brne .-22 ; 0xb04 <LCD_DisplayHZ+0xa0>
b1a: e7 01 movw r28, r14
b1c: 25 e0 ldi r18, 0x05 ; 5
b1e: cc 0f add r28, r28
b20: dd 1f adc r29, r29
b22: 2a 95 dec r18
b24: e1 f7 brne .-8 ; 0xb1e <LCD_DisplayHZ+0xba>
b26: ee 0c add r14, r14
b28: ff 1c adc r15, r15
b2a: ce 0d add r28, r14
b2c: df 1d adc r29, r15
b2e: c2 57 subi r28, 0x72 ; 114
b30: d9 4f sbci r29, 0xF9 ; 249
{
LCD_WriteData(pgm_read_byte(dptr));
dptr ++;
}
LCD_SetPageAddress(adrPage+1);
b32: 8d 2d mov r24, r13
b34: 8f 5f subi r24, 0xFF ; 255
b36: 0e 94 52 04 call 0x8a4 ; 0x8a4 <LCD_SetPageAddress>
LCD_SetColumnAddress(adrColumn);
b3a: 8c 2d mov r24, r12
b3c: 0e 94 45 04 call 0x88a ; 0x88a <LCD_SetColumnAddress>
for(i=0; i< 16; i++)
b40: 00 5e subi r16, 0xE0 ; 224
b42: 1f 4f sbci r17, 0xFF ; 255
{
LCD_WriteData(pgm_read_byte(dptr));
b44: fe 01 movw r30, r28
b46: 84 91 lpm r24, Z+
b48: 0e 94 b2 04 call 0x964 ; 0x964 <LCD_WriteData>
dptr ++;
b4c: 21 96 adiw r28, 0x01 ; 1
dptr ++;
}
LCD_SetPageAddress(adrPage+1);
LCD_SetColumnAddress(adrColumn);
for(i=0; i< 16; i++)
b4e: c0 17 cp r28, r16
b50: d1 07 cpc r29, r17
b52: c1 f7 brne .-16 ; 0xb44 <LCD_DisplayHZ+0xe0>
b54: 81 e0 ldi r24, 0x01 ; 1
LCD_WriteData(pgm_read_byte(dptr));
dptr ++;
}
return TRUE;
}
b56: df 91 pop r29
b58: cf 91 pop r28
b5a: 1f 91 pop r17
b5c: 0f 91 pop r16
b5e: ff 90 pop r15
b60: ef 90 pop r14
b62: df 90 pop r13
b64: cf 90 pop r12
b66: 08 95 ret
00000b68 <LCD_DisplayString>:
//-----------------------------------------------------------------------------
// LCD : lcd Display String.
// ASCII(8*16) 及汉字(16*16) 显示函数
//-----------------------------------------------------------------------------
uint8 LCD_DisplayString(char *String, uint8 adrPage, uint8 adrColumn)
{
b68: af 92 push r10
b6a: bf 92 push r11
b6c: df 92 push r13
b6e: ef 92 push r14
b70: ff 92 push r15
b72: 0f 93 push r16
b74: 1f 93 push r17
b76: df 93 push r29
b78: cf 93 push r28
b7a: 00 d0 rcall .+0 ; 0xb7c <LCD_DisplayString+0x14>
b7c: cd b7 in r28, 0x3d ; 61
b7e: de b7 in r29, 0x3e ; 62
b80: 7c 01 movw r14, r24
char cData[2];
uint8 uLen,uPage,uCol;
uLen = strlen(String);
b82: fc 01 movw r30, r24
b84: 01 90 ld r0, Z+
b86: 00 20 and r0, r0
b88: e9 f7 brne .-6 ; 0xb84 <LCD_DisplayString+0x1c>
b8a: 31 97 sbiw r30, 0x01 ; 1
b8c: de 2e mov r13, r30
b8e: d8 1a sub r13, r24
b90: 06 2f mov r16, r22
b92: 14 2f mov r17, r20
uLen --;
}
else
{
cData[1] = *String++;
LCD_DisplayHZ(cData, uPage, uCol);
b94: 5e 01 movw r10, r28
b96: 08 94 sec
b98: a1 1c adc r10, r1
b9a: b1 1c adc r11, r1
b9c: 1f c0 rjmp .+62 ; 0xbdc <LCD_DisplayString+0x74>
uPage = adrPage;
uCol = adrColumn;
while(uLen)
{
cData[0] = *String++;
b9e: f7 01 movw r30, r14
ba0: 81 91 ld r24, Z+
ba2: 7f 01 movw r14, r30
ba4: 89 83 std Y+1, r24 ; 0x01
if(cData[0] <= 0x80)
ba6: 81 38 cpi r24, 0x81 ; 129
ba8: 38 f4 brcc .+14 ; 0xbb8 <LCD_DisplayString+0x50>
{
LCD_DisplayASCII(cData[0], uPage, uCol);
baa: 41 2f mov r20, r17
bac: 60 2f mov r22, r16
bae: 0e 94 f1 04 call 0x9e2 ; 0x9e2 <LCD_DisplayASCII>
uCol += 8;
bb2: 18 5f subi r17, 0xF8 ; 248
uLen --;
bb4: da 94 dec r13
bb6: 0b c0 rjmp .+22 ; 0xbce <LCD_DisplayString+0x66>
}
else
{
cData[1] = *String++;
bb8: 81 91 ld r24, Z+
bba: 7f 01 movw r14, r30
bbc: 8a 83 std Y+2, r24 ; 0x02
LCD_DisplayHZ(cData, uPage, uCol);
bbe: 41 2f mov r20, r17
bc0: 60 2f mov r22, r16
bc2: c5 01 movw r24, r10
bc4: 0e 94 32 05 call 0xa64 ; 0xa64 <LCD_DisplayHZ>
uCol += 16;
bc8: 10 5f subi r17, 0xF0 ; 240
uLen -= 2;
bca: fe ef ldi r31, 0xFE ; 254
bcc: df 0e add r13, r31
}
if(uCol >= MAX_COLUMN)
bce: 17 ff sbrs r17, 7
bd0: 05 c0 rjmp .+10 ; 0xbdc <LCD_DisplayString+0x74>
{
uCol = 0;
uPage += 2;
bd2: 0e 5f subi r16, 0xFE ; 254
if(uPage >= MAX_PAGE)
bd4: 08 30 cpi r16, 0x08 ; 8
bd6: 08 f0 brcs .+2 ; 0xbda <LCD_DisplayString+0x72>
bd8: 00 e0 ldi r16, 0x00 ; 0
bda: 10 e0 ldi r17, 0x00 ; 0
uLen = strlen(String);
uPage = adrPage;
uCol = adrColumn;
while(uLen)
bdc: dd 20 and r13, r13
bde: f9 f6 brne .-66 ; 0xb9e <LCD_DisplayString+0x36>
uPage = 0;
}
}
return uLen;
}
be0: 80 e0 ldi r24, 0x00 ; 0
be2: 0f 90 pop r0
be4: 0f 90 pop r0
be6: cf 91 pop r28
be8: df 91 pop r29
bea: 1f 91 pop r17
bec: 0f 91 pop r16
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?