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

📄 lcd12864.lst

📁 用proteus仿真AVR单片机12864LCD,实现波形的实时显示。
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0E13 2F60      MOV	R22,R16
    0E14 5C60      SUBI	R22,0xC0
    0E15 4F7F      SBCI	R23,0xFF
(0205)   if(y_add<4)
    0E16 3044      CPI	R20,4
    0E17 F408      BCC	0x0E19
(0206)   {
(0207)     CSC2_1; 
    0E18 9AA9      SBI	0x15,1
(0208)   }
(0209)   if(!(y_add<4))
    0E19 3044      CPI	R20,4
    0E1A F008      BCS	0x0E1C
(0210)   {
(0211)     CSC1_1;
    0E1B 9AA8      SBI	0x15,0
(0212)   } 
(0213)  
(0214)   lcd_write_code(row); 
    0E1C 2D0A      MOV	R16,R10
    0E1D DFC6      RCALL	_lcd_write_code
(0215)   lcd_write_code(column); 
    0E1E 2F06      MOV	R16,R22
    0E1F DFC4      RCALL	_lcd_write_code
(0216)   for(i=0;i<32;i++)
    0E20 2744      CLR	R20
    0E21 C00F      RJMP	0x0E31
(0217)   { 
(0218)     if(i==16) 
    0E22 3140      CPI	R20,0x10
    0E23 F429      BNE	0x0E29
(0219)     { 
(0220)       lcd_write_code(row+1); 
    0E24 2D0A      MOV	R16,R10
    0E25 5F0F      SUBI	R16,0xFF
    0E26 DFBD      RCALL	_lcd_write_code
(0221) 	  lcd_write_code(column); 
    0E27 2F06      MOV	R16,R22
    0E28 DFBB      RCALL	_lcd_write_code
(0222)     } 
(0223)     lcd_write_data(*po_to_flash++); 
    0E29 0116      MOVW	R2,R12
    0E2A 01C1      MOVW	R24,R2
    0E2B 9601      ADIW	R24,1
    0E2C 016C      MOVW	R12,R24
    0E2D 01F1      MOVW	R30,R2
    0E2E 9104      LPM	R16,0(Z)
    0E2F DF9E      RCALL	_lcd_write_data
    0E30 9543      INC	R20
    0E31 3240      CPI	R20,0x20
    0E32 F378      BCS	0x0E22
(0224)   } 
(0225)   CSC1_0;//使列扫描无效
    0E33 98A8      CBI	0x15,0
(0226)   CSC2_0; 
    0E34 98A9      CBI	0x15,1
(0227)   WDR();
    0E35 95A8      WDR
    0E36 940E1350  CALL	pop_gset4
    0E38 9508      RET
_dis_one_abc:
  column               --> R22
  row                  --> R10
  i                    --> R20
  po_to_flash          --> R12
  y_add                --> R20
  x_add                --> R22
    0E39 940E1358  CALL	push_gset4
    0E3B 2F42      MOV	R20,R18
    0E3C 2F60      MOV	R22,R16
    0E3D 84C8      LDD	R12,Y+8
    0E3E 84D9      LDD	R13,Y+9
(0228) } 
(0229) 
(0230) //**************************************************************
(0231) //写一个字母
(0232) 
(0233) void dis_one_abc(uchar x_add,uchar y_add,const uchar *po_to_flash) 
(0234) { 
(0235)   
(0236)   uchar i,row,column; 
(0237)   row=x_add*2+0xb8; 
    0E3F E082      LDI	R24,2
    0E40 9F86      MUL	R24,R22
    0E41 2D80      MOV	R24,R0
    0E42 5488      SUBI	R24,0x48
    0E43 2EA8      MOV	R10,R24
(0238)   column=(y_add<8?y_add:y_add-8)*8+0x40; 
    0E44 3048      CPI	R20,0x8
    0E45 F418      BCC	0x0E49
    0E46 2F64      MOV	R22,R20
    0E47 2777      CLR	R23
    0E48 C004      RJMP	0x0E4D
    0E49 2F64      MOV	R22,R20
    0E4A 2777      CLR	R23
    0E4B 5068      SUBI	R22,0x8
    0E4C 4070      SBCI	R23,0
    0E4D E008      LDI	R16,0x8
    0E4E E010      LDI	R17,0
    0E4F 019B      MOVW	R18,R22
    0E50 940E133A  CALL	empy16s
    0E52 2F60      MOV	R22,R16
    0E53 5C60      SUBI	R22,0xC0
    0E54 4F7F      SBCI	R23,0xFF
(0239)   if(y_add<8)
    0E55 3048      CPI	R20,0x8
    0E56 F408      BCC	0x0E58
(0240)   {
(0241)     CSC2_1; 
    0E57 9AA9      SBI	0x15,1
(0242)   }
(0243)   if(!(y_add<8))
    0E58 3048      CPI	R20,0x8
    0E59 F008      BCS	0x0E5B
(0244)   {
(0245)     CSC1_1;
    0E5A 9AA8      SBI	0x15,0
(0246)   }  
(0247)   lcd_write_code(row); 
    0E5B 2D0A      MOV	R16,R10
    0E5C DF87      RCALL	_lcd_write_code
(0248)   lcd_write_code(column); 
    0E5D 2F06      MOV	R16,R22
    0E5E DF85      RCALL	_lcd_write_code
(0249)   for(i=0;i<16;i++)
    0E5F 2744      CLR	R20
    0E60 C00F      RJMP	0x0E70
(0250)   { 
(0251)   	if(i==8)
    0E61 3048      CPI	R20,0x8
    0E62 F429      BNE	0x0E68
(0252) 	{ 
(0253) 	  lcd_write_code(row+1); 
    0E63 2D0A      MOV	R16,R10
    0E64 5F0F      SUBI	R16,0xFF
    0E65 DF7E      RCALL	_lcd_write_code
(0254) 	  lcd_write_code(column); 
    0E66 2F06      MOV	R16,R22
    0E67 DF7C      RCALL	_lcd_write_code
(0255) 	} 
(0256) 	lcd_write_data(*po_to_flash++); 
    0E68 0116      MOVW	R2,R12
    0E69 01C1      MOVW	R24,R2
    0E6A 9601      ADIW	R24,1
    0E6B 016C      MOVW	R12,R24
    0E6C 01F1      MOVW	R30,R2
    0E6D 9104      LPM	R16,0(Z)
    0E6E DF5F      RCALL	_lcd_write_data
    0E6F 9543      INC	R20
    0E70 3140      CPI	R20,0x10
    0E71 F378      BCS	0x0E61
(0257)   } 
(0258)   CSC1_0;
    0E72 98A8      CBI	0x15,0
(0259)   CSC2_0;
    0E73 98A9      CBI	0x15,1
(0260)   WDR(); 
    0E74 95A8      WDR
    0E75 940E1350  CALL	pop_gset4
    0E77 9508      RET
_dis_one_ban_zi:
  e                    --> R20
  w                    --> R22
  j                    --> R10
  i                    --> R12
  po_to_flash          --> R14
  k_add                --> Y+10
  y_add                --> R12
  x_add                --> R22
    0E78 940E1356  CALL	push_gset5
    0E7A 2EC2      MOV	R12,R18
    0E7B 2F60      MOV	R22,R16
    0E7C 84EC      LDD	R14,Y+12
    0E7D 84FD      LDD	R15,Y+13
(0261) } 
(0262) 
(0263)  //写数字K=0,显示前半个字 ******************************************
(0264) void dis_one_ban_zi(uchar x_add,uchar y_add,uchar k_add,const uchar *po_to_flash)
(0265) { 
(0266)   
(0267)   uchar i,j,w,e; 
(0268)   if(k_add==0){e=0;} 
    0E7E 840A      LDD	R0,Y+10
    0E7F 2000      TST	R0
    0E80 F409      BNE	0x0E82
    0E81 2744      CLR	R20
(0269)   if(k_add==1){e=8;} 
    0E82 858A      LDD	R24,Y+10
    0E83 3081      CPI	R24,1
    0E84 F409      BNE	0x0E86
    0E85 E048      LDI	R20,0x8
(0270)   j=x_add*2+0xb8; 
    0E86 E082      LDI	R24,2
    0E87 9F86      MUL	R24,R22
    0E88 2D80      MOV	R24,R0
    0E89 5488      SUBI	R24,0x48
    0E8A 2EA8      MOV	R10,R24
(0271)   w=(y_add<4?y_add:y_add-4)*16+0x40; //左右半屏判断 
    0E8B 2D8C      MOV	R24,R12
    0E8C 3084      CPI	R24,4
    0E8D F418      BCC	0x0E91
    0E8E 2F68      MOV	R22,R24
    0E8F 2777      CLR	R23
    0E90 C004      RJMP	0x0E95
    0E91 2D6C      MOV	R22,R12
    0E92 2777      CLR	R23
    0E93 5064      SUBI	R22,4
    0E94 4070      SBCI	R23,0
    0E95 E100      LDI	R16,0x10
    0E96 E010      LDI	R17,0
    0E97 019B      MOVW	R18,R22
    0E98 940E133A  CALL	empy16s
    0E9A 2F60      MOV	R22,R16
    0E9B 5C60      SUBI	R22,0xC0
    0E9C 4F7F      SBCI	R23,0xFF
(0272)   if(y_add<4)
    0E9D 2D8C      MOV	R24,R12
    0E9E 3084      CPI	R24,4
    0E9F F408      BCC	0x0EA1
(0273)   {
(0274)    	CSC2_1; 
    0EA0 9AA9      SBI	0x15,1
(0275)   }
(0276)   if(!(y_add<4))
    0EA1 2D8C      MOV	R24,R12
    0EA2 3084      CPI	R24,4
    0EA3 F008      BCS	0x0EA5
(0277)   {
(0278)    	CSC1_1;
    0EA4 9AA8      SBI	0x15,0
(0279)   }  
(0280)   lcd_write_code(j); 
    0EA5 2D0A      MOV	R16,R10
    0EA6 DF3D      RCALL	_lcd_write_code
(0281)   lcd_write_code(w+e); 
    0EA7 2F06      MOV	R16,R22
    0EA8 0F04      ADD	R16,R20
    0EA9 DF3A      RCALL	_lcd_write_code
(0282)   for(i=0;i<16;i++)//循环显示内容 
    0EAA 24CC      CLR	R12
    0EAB C011      RJMP	0x0EBD
(0283)   { 
(0284)   	if(i==8) 
    0EAC 2D8C      MOV	R24,R12
    0EAD 3088      CPI	R24,0x8
    0EAE F431      BNE	0x0EB5
(0285) 	{ 
(0286) 	  lcd_write_code(j+1); 
    0EAF 2D0A      MOV	R16,R10
    0EB0 5F0F      SUBI	R16,0xFF
    0EB1 DF32      RCALL	_lcd_write_code
(0287) 	  lcd_write_code(w+e); 
    0EB2 2F06      MOV	R16,R22
    0EB3 0F04      ADD	R16,R20
    0EB4 DF2F      RCALL	_lcd_write_code
(0288) 	} 
(0289) 	lcd_write_data(*po_to_flash++); 
    0EB5 0117      MOVW	R2,R14
    0EB6 01C1      MOVW	R24,R2
    0EB7 9601      ADIW	R24,1
    0EB8 017C      MOVW	R14,R24
    0EB9 01F1      MOVW	R30,R2
    0EBA 9104      LPM	R16,0(Z)
    0EBB DF12      RCALL	_lcd_write_data
    0EBC 94C3      INC	R12
    0EBD 2D8C      MOV	R24,R12
    0EBE 3180      CPI	R24,0x10
    0EBF F360      BCS	0x0EAC
(0290)   } 
(0291)   CSC1_0;
    0EC0 98A8      CBI	0x15,0
(0292)   CSC2_0;
    0EC1 98A9      CBI	0x15,1
(0293)   WDR(); 
    0EC2 95A8      WDR
    0EC3 940E1353  CALL	pop_gset5
    0EC5 9508      RET
_CLRLCD:
  n                    --> R20
  m                    --> R22
    0EC6 940E135C  CALL	push_gset2
    0EC8 9722      SBIW	R28,2
(0294) } 
(0295) //*****************************************************************
(0296) 
(0297) void CLRLCD(void) //清屏 
(0298) { 
(0299)   uchar n,m; 
(0300)   for(n=0;n<4;n++)
    0EC9 2744      CLR	R20
    0ECA C013      RJMP	0x0EDE
(0301)   { 
(0302)   	for(m=0;m<8;m++) 
    0ECB 2766      CLR	R22
    0ECC C00E      RJMP	0x0EDB
(0303)   	{
(0304) 	  p_to_flash=X26;
    0ECD E584      LDI	R24,0x54
    0ECE E090      LDI	R25,0
    0ECF 93900068  STS	p_to_flash+1,R25
    0ED1 93800067  STS	p_to_flash,R24
(0305) 	  dis_one_zi(n,m,p_to_flash);
    0ED3 011C      MOVW	R2,R24
    0ED4 8239      STD	Y+1,R3
    0ED5 8228      STD	Y+0,R2
    0ED6 2F26      MOV	R18,R22
    0ED7 2F04      MOV	R16,R20
    0ED8 DF21      RCALL	_dis_one_zi
(0306) 	  WDR();
    0ED9 95A8      WDR
    0EDA 9563      INC	R22
    0EDB 3068      CPI	R22,0x8
    0EDC F380      BCS	0x0ECD
    0EDD 9543      INC	R20
    0EDE 3044      CPI	R20,4
    0EDF F358      BCS	0x0ECB
    0EE0 9622      ADIW	R28,2
    0EE1 940E134A  CALL	pop_gset2
    0EE3 9508      RET
(0307) 	}
(0308)   } 
(0309) } 
(0310) //***********************************************************************
(0311) void lcd_init(void) //显示屏初始化 ,写入初始化命令字
(0312) {
(0313)    delay_ms(100); 
_lcd_init:
    0EE4 E604      LDI	R16,0x64
    0EE5 E010      LDI	R17,0
    0EE6 DEB8      RCALL	_delay_ms
(0314)   
(0315)    lcd_write_code(0x3f); 
    0EE7 E30F      LDI	R16,0x3F
    0EE8 DEFB      RCALL	_lcd_write_code
(0316)       
(0317)    lcd_write_code(0xc0);   
    0EE9 EC00      LDI	R16,0xC0
    0EEA DEF9      RCALL	_lcd_write_code
(0318)      
(0319)    lcd_write_code(0xb8);  
    0EEB EB08      LDI	R16,0xB8
    0EEC DEF7      RCALL	_lcd_write_code
(0320)      
(0321)    lcd_write_code(0x40);  
    0EED E400      LDI	R16,0x40
    0EEE DEF5      RCALL	_lcd_write_code
(0322)   
(0323)    CLRLCD();//清屏 
    0EEF DFD6      RCALL	_CLRLCD
    0EF0 9508      RET
_display_graphic:
  count                --> R12
  column               --> R20
  row                  --> R22
  i                    --> R12
  po_to_flash          --> R10
    0EF1 940E1358  CALL	push_gset4
    0EF3 0158      MOVW	R10,R16
(0324) } 
(0325) //**********************************************************************
(0326) //显示图形
(0327) void display_graphic(const uchar *po_to_flash)
(0328) {
(0329)   uchar i,row=0xb8,column=0x40,count=0; 
    0EF4 EB68      LDI	R22,0xB8
    0EF5 E440      LDI	R20,0x40
    0EF6 24CC      CLR	R12
(0330)     
(0331)   for(;row<0xc0;row++)
    0EF7 C028      RJMP	0x0F20
(0332)   {
(0333)     WDR();
    0EF8 95A8      WDR
(0334)     CSC2_1;CSC1_0;
    0EF9 9AA9      SBI	0x15,1
    0EFA 98A8      CBI	0x15,0
(0335) 	lcd_write_code(row);
    0EFB 2F06      MOV	R16,R22
    0EFC DEE7      RCALL	_lcd_write_code
(0336) 	lcd_write_code(column);
    0EFD 2F04      MOV	R16,R20
    0EFE DEE5      RCALL	_lcd_write_code
(0337) 	for(i=0;i<64;i++)
    0EFF 24CC      CLR	R12
    0F00 C008      RJMP	0x0F09
(0338) 	{	 
(0339) 	  lcd_write_data(*po_to_flash++);	  
    0F01 0115      MOVW	R2,R10
    0F02 01C1      MOVW	R24,R2
    0F03 9601      ADIW	R24,1
    0F04 015C      MOVW	R10,R24
    0F05 01F1      MOVW	R30,R2
    0F06 9104      LPM	R16,0(Z)
    0F07 DEC6      RCALL	_lcd_write_data
    0F08 94C3      INC	R12
    0F09 2D8C      MOV	R24,R12
    0F0A 3480      CPI	R24,0x40
    0F0B F3A8      BCS	0x0F01
(0340) 	}
(0341) 	CSC2_0;CSC1_1;//显示右半页
    0F0C 98A9      CBI	0x15,1
    0F0D 9AA8      SBI	0x15,0
(0342) 	lcd_write_code(row);
    0F0E 2F06      MOV	R16,R22
    0F0F DED4      RCALL	_lcd_write_code
(0343) 	lcd_write_code(column);
    0F10 2F04      MOV	R16,R20
    0F11 DED2      RCALL	_lcd_write_code
(0344) 	for(i=0;i<64;i++)
    0F12 24CC      CLR	R12
    0F13 C008      RJMP	0x0F1C
(0345) 	{	 
(0346) 	  lcd_write_data(*po_to_flash++);	  
    0F14 0115      MOVW	R2,R10
    0F15 01C1      MOVW	R24,R2
    0F16 9601      ADIW	R24,1
    0F17 015C      MOVW	R10,R24
    0F18 01F1      MOVW	R30,R2
    0F19 9104      LPM	R16,0(Z)
    0F1A DEB3      RCALL	_lcd_write_data
    0F1B 94C3      INC	R12
    0F1C 2D8C      MOV	R24,R12
    0F1D 3480      CPI	R24,0x40
    0F1E F3A8      BCS	0x0F14
    0F1F 9563      INC	R22
    0F20 3C60      CPI	R22,0xC0
    0F21 F408      BCC	0x0F23
    0F22 CFD5      RJMP	0x0EF8
(0347) 	}	
(0348) 	
(0349)   }
(0350)   WDR();
    0F23 95A8      WDR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -