📄 lcd12864.lst
字号:
(0351) CSC2_0;CSC1_0;
0F24 98A9 CBI 0x15,1
0F25 98A8 CBI 0x15,0
0F26 940E1350 CALL pop_gset4
0F28 9508 RET
_clear_column:
page --> R20
i --> R22
column --> R10
0F29 940E135A CALL push_gset3
0F2B 2EA0 MOV R10,R16
(0352) }
(0353) //清一列子程序(在显示波形时用到)*******************************************************
(0354) void clear_column(uchar column)
(0355) {
(0356) uchar i;
(0357) uchar page=0xb8;
0F2C EB48 LDI R20,0xB8
(0358)
(0359) for(i=0;i<8;i++)
0F2D 2766 CLR R22
0F2E C009 RJMP 0x0F38
(0360) {
(0361) lcd_write_code(page++);
0F2F 2E24 MOV R2,R20
0F30 5F4F SUBI R20,0xFF
0F31 2D02 MOV R16,R2
0F32 DEB1 RCALL _lcd_write_code
(0362) lcd_write_code(column);
0F33 2D0A MOV R16,R10
0F34 DEAF RCALL _lcd_write_code
(0363) lcd_write_data(0x00);
0F35 2700 CLR R16
0F36 DE97 RCALL _lcd_write_data
0F37 9563 INC R22
0F38 3068 CPI R22,0x8
0F39 F3A8 BCS 0x0F2F
0F3A 940E134D CALL pop_gset3
0F3C 9508 RET
_wave_display:
cha --> Y+1
flag --> Y+5
cha_page --> R12
cha_dot --> R10
org_dot --> R20
page0 --> R22
page1 --> Y+4
d --> Y+0
page --> Y+3
column --> Y+2
i --> R14
0F3D 940E1356 CALL push_gset5
0F3F 9726 SBIW R28,6
(0364) }
(0365) }
(0366)
(0367)
(0368) //显示波形******************************************************
(0369)
(0370) void wave_display(void)
(0371) {
(0372) uchar d[2]={'0','0'};
0F40 E784 LDI R24,0x74
0F41 E19A LDI R25,0x1A
0F42 01FE MOVW R30,R28
0F43 E002 LDI R16,2
0F44 E010 LDI R17,0
0F45 93FA ST R31,-Y
0F46 93EA ST R30,-Y
0F47 939A ST R25,-Y
0F48 938A ST R24,-Y
0F49 940E13AA CALL asgncblk
(0373) uchar i,flag=0,cha_page,cha_dot,cha;
0F4B 2400 CLR R0
0F4C 820D STD Y+5,R0
(0374) uchar org_dot,page0,page1;
(0375) uchar page,column=0x40;
0F4D E480 LDI R24,0x40
0F4E 838A STD Y+2,R24
(0376) CSC2_1;CSC1_0;
0F4F 9AA9 SBI 0x15,1
0F50 98A8 CBI 0x15,0
0F51 C110 RJMP 0x1062
(0377) while(1)
(0378) {
(0379) WDR();
0F52 95A8 WDR
(0380) if(hanzi_flag==1) break;
0F53 91800060 LDS R24,hanzi_flag
0F55 3081 CPI R24,1
0F56 F409 BNE 0x0F58
0F57 C10B RJMP 0x1063
(0381) d[1]=d[0];
0F58 8028 LDD R2,Y+0
0F59 8229 STD Y+1,R2
(0382) page1=d[1]/8;
0F5A 9426 LSR R2
0F5B 9426 LSR R2
0F5C 9426 LSR R2
0F5D 822C STD Y+4,R2
(0383) page=0xb8+(7-page1);
0F5E E087 LDI R24,7
0F5F 2C02 MOV R0,R2
0F60 1982 SUB R24,R2
0F61 5488 SUBI R24,0x48
0F62 838B STD Y+3,R24
(0384) org_dot=d[1]%8;//显示上一次坐标中最上端的余值
0F63 E018 LDI R17,0x8
0F64 8109 LDD R16,Y+1
0F65 940E1322 CALL mod8u
0F67 2F40 MOV R20,R16
(0385) d[0]=(uchar)adc_value;
0F68 90200065 LDS R2,adc_value
0F6A 90300066 LDS R3,adc_value+1
0F6C 8228 STD Y+0,R2
(0386) page0=d[0]/8;//本次的坐标值中,占用整页数;
0F6D 2D62 MOV R22,R2
0F6E 9566 LSR R22
0F6F 9566 LSR R22
0F70 9566 LSR R22
(0387) cha_dot=d[0]%8;
0F71 E018 LDI R17,0x8
0F72 2D02 MOV R16,R2
0F73 940E1322 CALL mod8u
0F75 2EA0 MOV R10,R16
(0388)
(0389) if(flag%2==0)
0F76 E012 LDI R17,2
0F77 810D LDD R16,Y+5
0F78 940E1322 CALL mod8u
0F7A 2300 TST R16
0F7B F419 BNE 0x0F7F
(0390) {CSC2_1;CSC1_0;}
0F7C 9AA9 SBI 0x15,1
0F7D 98A8 CBI 0x15,0
0F7E C002 RJMP 0x0F81
(0391) else{CSC2_0;CSC1_1;}
0F7F 98A9 CBI 0x15,1
0F80 9AA8 SBI 0x15,0
(0392) clear_column(column);
0F81 810A LDD R16,Y+2
0F82 DFA6 RCALL _clear_column
(0393) if(page0>page1)//本次占的页数比上一次的多的情况下;
0F83 800C LDD R0,Y+4
0F84 1606 CP R0,R22
0F85 F008 BCS 0x0F87
0F86 C038 RJMP 0x0FBF
(0394) {
(0395) lcd_write_code(page);
0F87 810B LDD R16,Y+3
0F88 DE5B RCALL _lcd_write_code
(0396) lcd_write_code(column);
0F89 810A LDD R16,Y+2
0F8A DE59 RCALL _lcd_write_code
(0397) if(org_dot!=7) //如果最上页是满显示的话,就跳过;
0F8B 3047 CPI R20,7
0F8C F049 BEQ 0x0F96
(0398) {lcd_write_data(0xff>>(org_dot+1));}
0F8D 2F24 MOV R18,R20
0F8E 2733 CLR R19
0F8F 5F2F SUBI R18,0xFF
0F90 4F3F SBCI R19,0xFF
0F91 EF0F LDI R16,0xFF
0F92 E010 LDI R17,0
0F93 940E131B CALL asr16
0F95 DE38 RCALL _lcd_write_data
(0399)
(0400) cha_page=page0-page1;
0F96 2EC6 MOV R12,R22
0F97 800C LDD R0,Y+4
0F98 18C0 SUB R12,R0
(0401) page--;
0F99 800B LDD R0,Y+3
0F9A 940A DEC R0
0F9B 820B STD Y+3,R0
(0402) for(i=(cha_page-1);i>0;i--)
0F9C 2D8C MOV R24,R12
0F9D 5081 SUBI R24,1
0F9E 2EE8 MOV R14,R24
0F9F C00B RJMP 0x0FAB
(0403) {
(0404) lcd_write_code(page--);
0FA0 802B LDD R2,Y+3
0FA1 2D82 MOV R24,R2
0FA2 5081 SUBI R24,1
0FA3 838B STD Y+3,R24
0FA4 2D02 MOV R16,R2
0FA5 DE3E RCALL _lcd_write_code
(0405) lcd_write_code(column);
0FA6 810A LDD R16,Y+2
0FA7 DE3C RCALL _lcd_write_code
(0406) lcd_write_data(0xff);
0FA8 EF0F LDI R16,0xFF
0FA9 DE24 RCALL _lcd_write_data
0FAA 94EA DEC R14
0FAB 2422 CLR R2
0FAC 142E CP R2,R14
0FAD F390 BCS 0x0FA0
(0407) }
(0408)
(0409) lcd_write_code(page);//显示本次坐标中最上页的余值;
0FAE 810B LDD R16,Y+3
0FAF DE34 RCALL _lcd_write_code
(0410) lcd_write_code(column);
0FB0 810A LDD R16,Y+2
0FB1 DE32 RCALL _lcd_write_code
(0411) {lcd_write_data(0xff<<(7-cha_dot));}
0FB2 2C2A MOV R2,R10
0FB3 2433 CLR R3
0FB4 E027 LDI R18,7
0FB5 E030 LDI R19,0
0FB6 1922 SUB R18,R2
0FB7 0933 SBC R19,R3
0FB8 EF0F LDI R16,0xFF
0FB9 E010 LDI R17,0
0FBA 940E13A3 CALL lsl16
0FBC DE11 RCALL _lcd_write_data
(0412) CSC2_0;CSC1_0;
0FBD 98A9 CBI 0x15,1
0FBE 98A8 CBI 0x15,0
(0413) }
(0414)
(0415) if(page0<page1)//本次占的页数比上一次的少的情况下;
0FBF 800C LDD R0,Y+4
0FC0 1560 CP R22,R0
0FC1 F008 BCS 0x0FC3
0FC2 C038 RJMP 0x0FFB
(0416) {
(0417)
(0418) lcd_write_code(page);//先显示上一次坐标中最上页的余值;
0FC3 810B LDD R16,Y+3
0FC4 DE1F RCALL _lcd_write_code
(0419) lcd_write_code(column);
0FC5 810A LDD R16,Y+2
0FC6 DE1D RCALL _lcd_write_code
(0420) lcd_write_data(0xff<<(7-org_dot));
0FC7 2E24 MOV R2,R20
0FC8 2433 CLR R3
0FC9 E027 LDI R18,7
0FCA E030 LDI R19,0
0FCB 1922 SUB R18,R2
0FCC 0933 SBC R19,R3
0FCD EF0F LDI R16,0xFF
0FCE E010 LDI R17,0
0FCF 940E13A3 CALL lsl16
0FD1 DDFC RCALL _lcd_write_data
(0421) cha_page=page1-page0;
0FD2 80CC LDD R12,Y+4
0FD3 1AC6 SUB R12,R22
(0422) page++;
0FD4 800B LDD R0,Y+3
0FD5 9403 INC R0
0FD6 820B STD Y+3,R0
(0423) for(i=(cha_page-1);i>0;i--)//显示所差的页数
0FD7 2D8C MOV R24,R12
0FD8 5081 SUBI R24,1
0FD9 2EE8 MOV R14,R24
0FDA C00B RJMP 0x0FE6
(0424) {
(0425) lcd_write_code(page++);
0FDB 802B LDD R2,Y+3
0FDC 2D82 MOV R24,R2
0FDD 5F8F SUBI R24,0xFF
0FDE 838B STD Y+3,R24
0FDF 2D02 MOV R16,R2
0FE0 DE03 RCALL _lcd_write_code
(0426) lcd_write_code(column);
0FE1 810A LDD R16,Y+2
0FE2 DE01 RCALL _lcd_write_code
(0427) lcd_write_data(0xff);
0FE3 EF0F LDI R16,0xFF
0FE4 DDE9 RCALL _lcd_write_data
0FE5 94EA DEC R14
0FE6 2422 CLR R2
0FE7 142E CP R2,R14
0FE8 F390 BCS 0x0FDB
(0428) }
(0429) lcd_write_code(page);
0FE9 810B LDD R16,Y+3
0FEA DDF9 RCALL _lcd_write_code
(0430) lcd_write_code(column);
0FEB 810A LDD R16,Y+2
0FEC DDF7 RCALL _lcd_write_code
(0431) if(cha_dot!=7)
0FED 2D8A MOV R24,R10
0FEE 3087 CPI R24,7
0FEF F049 BEQ 0x0FF9
(0432) {lcd_write_data(0xff>>(cha_dot+1));}
0FF0 2F28 MOV R18,R24
0FF1 2733 CLR R19
0FF2 5F2F SUBI R18,0xFF
0FF3 4F3F SBCI R19,0xFF
0FF4 EF0F LDI R16,0xFF
0FF5 E010 LDI R17,0
0FF6 940E131B CALL asr16
0FF8 DDD5 RCALL _lcd_write_data
(0433) CSC2_0;CSC1_0;
0FF9 98A9 CBI 0x15,1
0FFA 98A8 CBI 0x15,0
(0434) }
(0435) if(page0==page1)
0FFB 800C LDD R0,Y+4
0FFC 1560 CP R22,R0
0FFD F009 BEQ 0x0FFF
0FFE C057 RJMP 0x1056
(0436) {
(0437)
(0438) lcd_write_code(page);
0FFF 810B LDD R16,Y+3
1000 DDE3 RCALL _lcd_write_code
(0439) lcd_write_code(column);
1001 810A LDD R16,Y+2
1002 DDE1 RCALL _lcd_write_code
(0440) if(d[0]>d[1])//本次坐标比上一次大
1003 8029 LDD R2,Y+1
1004 8038 LDD R3,Y+0
1005 1423 CP R2,R3
1006 F4C0 BCC 0x101F
(0441) {lcd_write_data((0xff<<(7-cha_dot))&(0xff>>(org_dot+1)));}
1007 2C2A MOV R2,R10
1008 2433 CLR R3
1009 E027 LDI R18,7
100A E030 LDI R19,0
100B 1922 SUB R18,R2
100C 0933 SBC R19,R3
100D EF0F LDI R16,0xFF
100E E010 LDI R17,0
100F 940E13A3 CALL lsl16
1011 0118 MOVW R2,R16
1012 2F24 MOV R18,R20
1013 2733 CLR R19
1014 5F2F SUBI R18,0xFF
1015 4F3F SBCI R19,0xFF
1016 EF0F LDI R16,0xFF
1017 E010 LDI R17,0
1018 940E131B CALL asr16
101A 2220 AND R2,R16
101B 2231 AND R3,R17
101C 2D02 MOV R16,R2
101D DDB0 RCALL _lcd_write_data
101E C035 RJMP 0x1054
(0442) else if(d[0]<d[1])//本次坐标比上一次小
101F 8029 LDD R2,Y+1
1020 8038 LDD R3,Y+0
1021 1432 CP R3,R2
1022 F4C0 BCC 0x103B
(0443) {lcd_write_data((0xff<<(7-org_dot))&(0xff>>(cha_dot+1)));}
1023 2E24 MOV R2,R20
1024 2433 CLR R3
1025 E027 LDI R18,7
1026 E030 LDI R19,0
1027 1922 SUB R18,R2
1028 0933 SBC R19,R3
1029 EF0F LDI R16,0xFF
102A E010 LDI R17,0
102B 940E13A3 CALL lsl16
102D 0118 MOVW R2,R16
102E 2D2A MOV R18,R10
102F 2733 CLR R19
1030 5F2F SUBI R18,0xFF
1031 4F3F SBCI R19,0xFF
1032 EF0F LDI R16,0xFF
1033 E010 LDI R17,0
1034 940E131B CALL asr16
1036 2220 AND R2,R16
1037 2231 AND R3,R17
1038 2D02 MOV R16,R2
1039 DD94 RCALL _lcd_write_data
103A C019 RJMP 0x1054
(0444) else if(d[0]==d[1])//如果相等的话,就显示和上次相等;
103B 8029 LDD R2,Y+1
103C 8038 LDD R3,Y+0
103D 1432 CP R3,R2
103E F4A9 BNE 0x1054
(0445) {
(0446) lcd_write_data((0xff<<(7-org_dot))&(0xff>>org_dot));
103F 2E24 MOV R2,R20
1040 2433 CLR R3
1041 E027 LDI R18,7
1042 E030 LDI R19,0
1043 1922 SUB R18,R2
1044 0933 SBC R19,R3
1045 EF0F LDI R16,0xFF
1046 E010 LDI R17,0
1047 940E13A3 CALL lsl16
1049 0118 MOVW R2,R16
104A 2F24 MOV R18,R20
104B 2733 CLR R19
104C EF0F LDI R16,0xFF
104D E010 LDI R17,0
104E 940E131B CALL asr16
1050 2220 AND R2,R16
1051 2231 AND R3,R17
1052 2D02 MOV R16,R2
1053 DD7A RCALL _lcd_write_data
(0447)
(0448) }
(0449) CSC2_0;CSC1_0;
1054 98A9 CBI 0x15,1
1055 98A8 CBI 0x15,0
(0450)
(0451) }
(0452) column++;
1056 800A LDD R0,Y+2
1057 9403 INC R0
1058 820A STD Y+2,R0
(0453) if(column==0x80)
1059 2D80 MOV R24,R0
105A 3880 CPI R24,0x80
105B F429 BNE 0x1061
(0454) {column=0x40;
105C E480 LDI R24,0x40
105D 838A STD Y+2,R24
(0455) flag++;
105E 800D LDD R0,Y+5
105F 9403 INC R0
1060 820D STD Y+5,R0
(0456) }
(0457) WDR();
1061 95A8 WDR
1062 CEEF RJMP 0x0F52
1063 9626 ADIW R28,6
1064 940E1353 CALL pop_gset5
1066 9508 RET
_scroll:
start --> R22
i --> R10
po_to_flash --> R20
1067 940E135A CALL push_gset3
1069 01A8 MOVW R20,R16
(0458) }
(0459)
(0460) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -