📄 12864_serial.lss
字号:
a5c: cf 93 push r28
a5e: df 93 push r29
a60: 18 2f mov r17, r24
a62: 06 2f mov r16, r22
a64: ea 01 movw r28, r20
WriteCommand(0x30); //8BitMCU,基本指令集合
a66: 80 e3 ldi r24, 0x30 ; 48
a68: 0e 94 b5 04 call 0x96a <WriteCommand>
switch(row)
a6c: 81 2f mov r24, r17
a6e: 99 27 eor r25, r25
a70: 81 30 cpi r24, 0x01 ; 1
a72: 91 05 cpc r25, r1
a74: 79 f0 breq .+30 ; 0xa94 <PutStr+0x3c>
a76: 82 30 cpi r24, 0x02 ; 2
a78: 91 05 cpc r25, r1
a7a: 1c f4 brge .+6 ; 0xa82 <PutStr+0x2a>
a7c: 89 2b or r24, r25
a7e: 39 f0 breq .+14 ; 0xa8e <PutStr+0x36>
a80: 13 c0 rjmp .+38 ; 0xaa8 <PutStr+0x50>
a82: 82 30 cpi r24, 0x02 ; 2
a84: 91 05 cpc r25, r1
a86: 49 f0 breq .+18 ; 0xa9a <PutStr+0x42>
a88: 03 97 sbiw r24, 0x03 ; 3
a8a: 51 f0 breq .+20 ; 0xaa0 <PutStr+0x48>
a8c: 0d c0 rjmp .+26 ; 0xaa8 <PutStr+0x50>
{
case 0:
WriteCommand(0x80+col);
a8e: 80 2f mov r24, r16
a90: 80 58 subi r24, 0x80 ; 128
a92: 08 c0 rjmp .+16 ; 0xaa4 <PutStr+0x4c>
break;
case 1:
WriteCommand(0x90+col);
a94: 80 2f mov r24, r16
a96: 80 57 subi r24, 0x70 ; 112
a98: 05 c0 rjmp .+10 ; 0xaa4 <PutStr+0x4c>
break;
case 2:
WriteCommand(0x88+col);
a9a: 80 2f mov r24, r16
a9c: 88 57 subi r24, 0x78 ; 120
a9e: 02 c0 rjmp .+4 ; 0xaa4 <PutStr+0x4c>
break;
case 3:
WriteCommand(0x98+col);
aa0: 80 2f mov r24, r16
aa2: 88 56 subi r24, 0x68 ; 104
aa4: 0e 94 b5 04 call 0x96a <WriteCommand>
break;
default:
break;
}
while(*puts != '\0') //判断字符串是否显示完毕
{
WriteData(*puts);
puts++;
aa8: 88 81 ld r24, Y
aaa: 88 23 and r24, r24
aac: 31 f0 breq .+12 ; 0xaba <PutStr+0x62>
aae: 89 91 ld r24, Y+
ab0: 0e 94 cf 04 call 0x99e <WriteData>
ab4: 88 81 ld r24, Y
ab6: 88 23 and r24, r24
ab8: d1 f7 brne .-12 ; 0xaae <PutStr+0x56>
aba: df 91 pop r29
abc: cf 91 pop r28
abe: 1f 91 pop r17
ac0: 0f 91 pop r16
ac2: 08 95 ret
00000ac4 <PutBMP>:
}
}
void PutBMP(const unsigned char *puts)
{
ac4: ff 92 push r15
ac6: 0f 93 push r16
ac8: 1f 93 push r17
aca: cf 93 push r28
acc: df 93 push r29
ace: ec 01 movw r28, r24
uchar n,i,j;
unsigned char RamVar; //定义无符号变量(Ram变量)
for(n=0;n<2;n++) //分两屏显示
ad0: ff 24 eor r15, r15
for(i=0;i<32;i++) //每屏32行
ad2: 00 e0 ldi r16, 0x00 ; 0
for(j=0;j<8;j++) //每行8个X地址坐标
ad4: 10 e0 ldi r17, 0x00 ; 0
{
WriteCommand(0x80+i); //写Y坐标
ad6: 80 2f mov r24, r16
ad8: 80 58 subi r24, 0x80 ; 128
ada: 0e 94 b5 04 call 0x96a <WriteCommand>
WriteCommand(0x80+j+n*8); //写X坐标。上半屏(n=0)地址为0x80-0x87,下半屏(n=1)地址为0x88-0x8f
ade: 8f 2d mov r24, r15
ae0: 88 0f add r24, r24
ae2: 88 0f add r24, r24
ae4: 88 0f add r24, r24
ae6: 81 0f add r24, r17
ae8: 80 58 subi r24, 0x80 ; 128
aea: 0e 94 b5 04 call 0x96a <WriteCommand>
RamVar = pgm_read_byte( &(*puts));
aee: fe 01 movw r30, r28
af0: 84 91 lpm r24, Z
//也可RamVar = pgm_read_byte(puts);
WriteData(RamVar); //每个地址写两字节
af2: 0e 94 cf 04 call 0x99e <WriteData>
RamVar = pgm_read_byte( &(*(puts+1)));
af6: 21 96 adiw r28, 0x01 ; 1
af8: fe 01 movw r30, r28
afa: 84 91 lpm r24, Z
//也可RamVar = pgm_read_byte(puts+1);
WriteData(RamVar);
afc: 0e 94 cf 04 call 0x99e <WriteData>
puts+=2;
b00: 21 96 adiw r28, 0x01 ; 1
b02: 1f 5f subi r17, 0xFF ; 255
b04: 18 30 cpi r17, 0x08 ; 8
b06: 38 f3 brcs .-50 ; 0xad6 <PutBMP+0x12>
b08: 0f 5f subi r16, 0xFF ; 255
b0a: 00 32 cpi r16, 0x20 ; 32
b0c: 18 f3 brcs .-58 ; 0xad4 <PutBMP+0x10>
b0e: f3 94 inc r15
b10: f1 e0 ldi r31, 0x01 ; 1
b12: ff 15 cp r31, r15
b14: f0 f6 brcc .-68 ; 0xad2 <PutBMP+0xe>
}
WriteCommand(0x36); //打开绘图
b16: 86 e3 ldi r24, 0x36 ; 54
b18: 0e 94 b5 04 call 0x96a <WriteCommand>
b1c: df 91 pop r29
b1e: cf 91 pop r28
b20: 1f 91 pop r17
b22: 0f 91 pop r16
b24: ff 90 pop r15
b26: 08 95 ret
00000b28 <Put16_16BMP1>:
}
/***********************************************/
/*******PutBMP1显示16*16点阵*******************/
/*****X0---3**************Y0--7***************************/
/***********将16*16点阵显示在第X行第Y列**********************/
void Put16_16BMP1(const uchar *puts1,uchar x,uchar y)
{
b28: cf 92 push r12
b2a: df 92 push r13
b2c: ef 92 push r14
b2e: ff 92 push r15
b30: 0f 93 push r16
b32: cf 93 push r28
b34: df 93 push r29
b36: ec 01 movw r28, r24
b38: 06 2f mov r16, r22
b3a: f4 2e mov r15, r20
uchar i,j;
unsigned char RamVar; //定义无符号变量(Ram变量)
//Row 行==0
if(x==0){x=0x80;y=x+y;}
b3c: 66 23 and r22, r22
b3e: 11 f4 brne .+4 ; 0xb44 <Put16_16BMP1+0x1c>
b40: 00 e8 ldi r16, 0x80 ; 128
b42: 03 c0 rjmp .+6 ; 0xb4a <Put16_16BMP1+0x22>
if(x==1){x=0x90;y=x+y;}
b44: 61 30 cpi r22, 0x01 ; 1
b46: 19 f4 brne .+6 ; 0xb4e <Put16_16BMP1+0x26>
b48: 00 e9 ldi r16, 0x90 ; 144
b4a: f0 0e add r15, r16
b4c: 0b c0 rjmp .+22 ; 0xb64 <Put16_16BMP1+0x3c>
if(x==2){x=0x80;y=x+y+8;}
b4e: 62 30 cpi r22, 0x02 ; 2
b50: 21 f4 brne .+8 ; 0xb5a <Put16_16BMP1+0x32>
b52: 00 e8 ldi r16, 0x80 ; 128
b54: 88 e8 ldi r24, 0x88 ; 136
b56: f8 0e add r15, r24
b58: 05 c0 rjmp .+10 ; 0xb64 <Put16_16BMP1+0x3c>
if(x==3){x=0x90;y=x+y+8;}
b5a: 63 30 cpi r22, 0x03 ; 3
b5c: 19 f4 brne .+6 ; 0xb64 <Put16_16BMP1+0x3c>
b5e: 00 e9 ldi r16, 0x90 ; 144
b60: e8 e9 ldi r30, 0x98 ; 152
b62: fe 0e add r15, r30
WriteCommand(0x34); //8Bit扩充指令集,即使是36H也要写两次
b64: 84 e3 ldi r24, 0x34 ; 52
b66: 0e 94 b5 04 call 0x96a <WriteCommand>
WriteCommand(0x36); //绘图ON,基本指令集里面36H不能开绘图
b6a: 86 e3 ldi r24, 0x36 ; 54
b6c: 0e 94 b5 04 call 0x96a <WriteCommand>
for(i=0;i<16;i++) //12864实际为256x32
b70: ee 24 eor r14, r14
{
WriteCommand(x|i); //行位置
b72: 80 2f mov r24, r16
b74: 8e 29 or r24, r14
b76: 0e 94 b5 04 call 0x96a <WriteCommand>
WriteCommand(y); //列位置
b7a: 8f 2d mov r24, r15
b7c: 0e 94 b5 04 call 0x96a <WriteCommand>
b80: 6e 01 movw r12, r28
for(j=0;j<2;j++) //256/8=32 byte
{ //列位置每行自动增加
RamVar = pgm_read_byte( &(*puts1));////////////
b82: fe 01 movw r30, r28
b84: 84 91 lpm r24, Z
//也可RamVar = pgm_read_byte(puts1);
WriteData(RamVar);
b86: 0e 94 cf 04 call 0x99e <WriteData>
puts1++;
b8a: 21 96 adiw r28, 0x01 ; 1
b8c: fe 01 movw r30, r28
b8e: 84 91 lpm r24, Z
b90: 0e 94 cf 04 call 0x99e <WriteData>
b94: e6 01 movw r28, r12
b96: 22 96 adiw r28, 0x02 ; 2
b98: e3 94 inc r14
b9a: ff e0 ldi r31, 0x0F ; 15
b9c: fe 15 cp r31, r14
b9e: 48 f7 brcc .-46 ; 0xb72 <Put16_16BMP1+0x4a>
ba0: df 91 pop r29
ba2: cf 91 pop r28
ba4: 0f 91 pop r16
ba6: ff 90 pop r15
ba8: ef 90 pop r14
baa: df 90 pop r13
bac: cf 90 pop r12
bae: 08 95 ret
00000bb0 <main>:
}
}
}
int main(void)
{
bb0: cf e5 ldi r28, 0x5F ; 95
bb2: d4 e0 ldi r29, 0x04 ; 4
bb4: de bf out 0x3e, r29 ; 62
bb6: cd bf out 0x3d, r28 ; 61
LcmInit();
bb8: 0e 94 ea 04 call 0x9d4 <LcmInit>
LcmClearTXT();
bbc: 0e 94 ff 04 call 0x9fe <LcmClearTXT>
LcmClearBMP();
bc0: 0e 94 0f 05 call 0xa1e <LcmClearBMP>
while(1)
{
PutStr(0,0,"Welcome To HRBUST!");
bc4: 4a e7 ldi r20, 0x7A ; 122
bc6: 50 e0 ldi r21, 0x00 ; 0
bc8: 60 e0 ldi r22, 0x00 ; 0
bca: 86 2f mov r24, r22
bcc: 0e 94 2c 05 call 0xa58 <PutStr>
delay(2000);
bd0: 80 ed ldi r24, 0xD0 ; 208
bd2: 97 e0 ldi r25, 0x07 ; 7
bd4: 0e 94 67 04 call 0x8ce <delay>
LcmClearTXT();
bd8: 0e 94 ff 04 call 0x9fe <LcmClearTXT>
LcmClearBMP();
bdc: 0e 94 0f 05 call 0xa1e <LcmClearBMP>
PutStr(0,0,"欢迎来到哈尔滨理工大学!");
be0: 4d e8 ldi r20, 0x8D ; 141
be2: 50 e0 ldi r21, 0x00 ; 0
be4: 60 e0 ldi r22, 0x00 ; 0
be6: 86 2f mov r24, r22
be8: 0e 94 2c 05 call 0xa58 <PutStr>
delay(3000);
bec: 88 eb ldi r24, 0xB8 ; 184
bee: 9b e0 ldi r25, 0x0B ; 11
bf0: 0e 94 67 04 call 0x8ce <delay>
LcmClearTXT();
bf4: 0e 94 ff 04 call 0x9fe <LcmClearTXT>
LcmClearBMP();
bf8: 0e 94 0f 05 call 0xa1e <LcmClearBMP>
PutBMP(bmp0);
bfc: 84 e9 ldi r24, 0x94 ; 148
bfe: 94 e0 ldi r25, 0x04 ; 4
c00: 0e 94 62 05 call 0xac4 <PutBMP>
delay(2000);
c04: 80 ed ldi r24, 0xD0 ; 208
c06: 97 e0 ldi r25, 0x07 ; 7
c08: 0e 94 67 04 call 0x8ce <delay>
LcmClearTXT();
c0c: 0e 94 ff 04 call 0x9fe <LcmClearTXT>
LcmClearBMP();
c10: 0e 94 0f 05 call 0xa1e <LcmClearBMP>
PutBMP(bmp1);
c14: 84 e9 ldi r24, 0x94 ; 148
c16: 90 e0 ldi r25, 0x00 ; 0
c18: 0e 94 62 05 call 0xac4 <PutBMP>
delay(2000);
c1c: 80 ed ldi r24, 0xD0 ; 208
c1e: 97 e0 ldi r25, 0x07 ; 7
c20: 0e 94 67 04 call 0x8ce <delay>
LcmClearTXT();
c24: 0e 94 ff 04 call 0x9fe <LcmClearTXT>
LcmClearBMP();
c28: 0e 94 0f 05 call 0xa1e <LcmClearBMP>
PutStr(1,2,str1);
c2c: 41 e7 ldi r20, 0x71 ; 113
c2e: 50 e0 ldi r21, 0x00 ; 0
c30: 62 e0 ldi r22, 0x02 ; 2
c32: 81 e0 ldi r24, 0x01 ; 1
c34: 0e 94 2c 05 call 0xa58 <PutStr>
PutStr(3,0,str2);
c38: 40 e6 ldi r20, 0x60 ; 96
c3a: 50 e0 ldi r21, 0x00 ; 0
c3c: 60 e0 ldi r22, 0x00 ; 0
c3e: 83 e0 ldi r24, 0x03 ; 3
c40: 0e 94 2c 05 call 0xa58 <PutStr>
Put16_16BMP1(BMP0,0,0);
c44: 40 e0 ldi r20, 0x00 ; 0
c46: 64 2f mov r22, r20
c48: 84 e7 ldi r24, 0x74 ; 116
c4a: 90 e0 ldi r25, 0x00 ; 0
c4c: 0e 94 94 05 call 0xb28 <Put16_16BMP1>
Put16_16BMP1(BMP1,0,7);
c50: 47 e0 ldi r20, 0x07 ; 7
c52: 60 e0 ldi r22, 0x00 ; 0
c54: 84 e5 ldi r24, 0x54 ; 84
c56: 90 e0 ldi r25, 0x00 ; 0
c58: 0e 94 94 05 call 0xb28 <Put16_16BMP1>
delay(2000);
c5c: 80 ed ldi r24, 0xD0 ; 208
c5e: 97 e0 ldi r25, 0x07 ; 7
c60: 0e 94 67 04 call 0x8ce <delay>
c64: ab cf rjmp .-170 ; 0xbbc <main+0xc>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -