⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864.lst

📁 用proteus仿真AVR单片机12864LCD,实现波形的实时显示。
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -