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

📄 lcd12864_st7920.lst

📁 12864的实例程序 根据自己需要选择自己需要的部分
💻 LST
📖 第 1 页 / 共 5 页
字号:
    030A 8445      LDD	R4,Z+13
    030B 8456      LDD	R5,Z+14
    030C 1542      CP	R20,R2
    030D 0553      CPC	R21,R3
    030E 0564      CPC	R22,R4
    030F 0575      CPC	R23,R5
    0310 F418      BCC	0x0314
(0169) 		effectLen=2;
    0311 E082      LDI	R24,2
    0312 2EC8      MOV	R12,R24
    0313 C002      RJMP	0x0316
(0170) 	else
(0171) 		effectLen=1;
    0314 24CC      CLR	R12
    0315 94C3      INC	R12
(0172) 	speaData(dat,effectLen);
    0316 82C8      STD	Y+0,R12
    0317 01FE      MOVW	R30,R28
    0318 8503      LDD	R16,Z+11
    0319 8514      LDD	R17,Z+12
    031A 8525      LDD	R18,Z+13
    031B 8536      LDD	R19,Z+14
    031C DD3D      RCALL	_speaData
(0173) 
(0174) 	lcd_set_xy(x,y);
    031D 2D2E      MOV	R18,R14
    031E 2D0A      MOV	R16,R10
    031F DF10      RCALL	_lcd_set_xy
(0175) 	delay50us(40); 
    0320 E208      LDI	R16,0x28
    0321 E010      LDI	R17,0
    0322 DEBE      RCALL	_delay50us
(0176) 	if(length>effectLen)
    0323 840F      LDD	R0,Y+15
    0324 14C0      CP	R12,R0
    0325 F478      BCC	0x0335
(0177) 	{
(0178) 		for(i=length-effectLen-1;i>=0;i--)
    0326 2D80      MOV	R24,R0
    0327 198C      SUB	R24,R12
    0328 5081      SUBI	R24,1
    0329 2EA8      MOV	R10,R24
    032A C007      RJMP	0x0332
(0179) 		{
(0180) 			lcd_wrDat(' '&0xF0,(' '&0x0F)<<4);
    032B 2722      CLR	R18
    032C E200      LDI	R16,0x20
    032D DEF5      RCALL	_lcd_wrDat
(0181) 			delay50us(40); 
    032E E208      LDI	R16,0x28
    032F E010      LDI	R17,0
    0330 DEB0      RCALL	_delay50us
    0331 94AA      DEC	R10
    0332 2D8A      MOV	R24,R10
    0333 3080      CPI	R24,0
    0334 F7B4      BGE	0x032B
(0182) 		}
(0183) 	}
(0184) 	for(i=effectLen-1;i>=0;i--)
    0335 2D8C      MOV	R24,R12
    0336 5081      SUBI	R24,1
    0337 2EA8      MOV	R10,R24
    0338 C01E      RJMP	0x0357
(0185) 	{
(0186) 		lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );
    0339 E78D      LDI	R24,0x7D
    033A E090      LDI	R25,0
    033B 2DEA      MOV	R30,R10
    033C 27FF      CLR	R31
    033D FDE7      SBRC	R30,7
    033E 95F0      COM	R31
    033F 0FE8      ADD	R30,R24
    0340 1FF9      ADC	R31,R25
    0341 8180      LDD	R24,Z+0
    0342 2799      CLR	R25
    0343 96C0      ADIW	R24,0x30
    0344 2F28      MOV	R18,R24
    0345 702F      ANDI	R18,0xF
    0346 7030      ANDI	R19,0
    0347 0F22      LSL	R18
    0348 1F33      ROL	R19
    0349 0F22      LSL	R18
    034A 1F33      ROL	R19
    034B 0F22      LSL	R18
    034C 1F33      ROL	R19
    034D 0F22      LSL	R18
    034E 1F33      ROL	R19
    034F 2F08      MOV	R16,R24
    0350 7F00      ANDI	R16,0xF0
    0351 7010      ANDI	R17,0
    0352 DED0      RCALL	_lcd_wrDat
(0187) 		delay50us(40);
    0353 E208      LDI	R16,0x28
    0354 E010      LDI	R17,0
    0355 DE8B      RCALL	_delay50us
    0356 94AA      DEC	R10
    0357 2D8A      MOV	R24,R10
    0358 3080      CPI	R24,0
    0359 F6FC      BGE	0x0339
    035A 9621      ADIW	R28,1
    035B 940E0483  CALL	pop_gset5
    035D 9508      RET
_lcd_puts:
  str                  --> R20
  y                    --> R10
  x                    --> R22
    035E 940E048A  CALL	push_gset3
    0360 2EA2      MOV	R10,R18
    0361 2F60      MOV	R22,R16
    0362 814E      LDD	R20,Y+6
    0363 815F      LDD	R21,Y+7
(0188) 	}
(0189) }
(0190) 
(0191) void lcd_puts(uint8 x,uint8 y,uint8 *str)
(0192) { 
(0193) 	lcd_set_xy(x,y);
    0364 2D2A      MOV	R18,R10
    0365 2F06      MOV	R16,R22
    0366 DEC9      RCALL	_lcd_set_xy
(0194) 	delay50us(20);   
    0367 E104      LDI	R16,0x14
    0368 E010      LDI	R17,0
    0369 DE77      RCALL	_delay50us
    036A C00F      RJMP	0x037A
(0195) 	while(*str)
(0196) 	{
(0197) 		lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);
    036B 01FA      MOVW	R30,R20
    036C 8020      LDD	R2,Z+0
    036D 2433      CLR	R3
    036E 2D22      MOV	R18,R2
    036F 702F      ANDI	R18,0xF
    0370 702F      ANDI	R18,0xF
    0371 9522      SWAP	R18
    0372 2D02      MOV	R16,R2
    0373 7F00      ANDI	R16,0xF0
    0374 DEAE      RCALL	_lcd_wrDat
(0198) 		str++;
    0375 5F4F      SUBI	R20,0xFF
    0376 4F5F      SBCI	R21,0xFF
(0199) 		delay50us(20);
    0377 E104      LDI	R16,0x14
    0378 E010      LDI	R17,0
    0379 DE67      RCALL	_delay50us
    037A 01FA      MOVW	R30,R20
    037B 8020      LDD	R2,Z+0
    037C 2022      TST	R2
    037D F769      BNE	0x036B
    037E 940E047D  CALL	pop_gset3
    0380 9508      RET
_lcd_puts_:
  dlyMs                --> R20
  str                  --> R22
  y                    --> R12
  x                    --> R10
    0381 940E0488  CALL	push_gset4
    0383 2EC2      MOV	R12,R18
    0384 2EA0      MOV	R10,R16
    0385 8568      LDD	R22,Y+8
    0386 8579      LDD	R23,Y+9
    0387 854A      LDD	R20,Y+10
(0200) 	} 
(0201) }
(0202) 
(0203) void lcd_puts_(uint8 x,uint8 y,uint8 *str,uint8 dlyMs)
(0204) { 
(0205) 	lcd_set_xy(x,y);
    0388 2D2C      MOV	R18,R12
    0389 2D0A      MOV	R16,R10
    038A DEA5      RCALL	_lcd_set_xy
(0206) 	delay50us(20);   
    038B E104      LDI	R16,0x14
    038C E010      LDI	R17,0
    038D DE53      RCALL	_delay50us
    038E C00F      RJMP	0x039E
(0207) 	while(*str)
(0208) 	{
(0209) 		lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);
    038F 01FB      MOVW	R30,R22
    0390 8020      LDD	R2,Z+0
    0391 2433      CLR	R3
    0392 2D22      MOV	R18,R2
    0393 702F      ANDI	R18,0xF
    0394 702F      ANDI	R18,0xF
    0395 9522      SWAP	R18
    0396 2D02      MOV	R16,R2
    0397 7F00      ANDI	R16,0xF0
    0398 DE8A      RCALL	_lcd_wrDat
(0210) 		str++;
    0399 5F6F      SUBI	R22,0xFF
    039A 4F7F      SBCI	R23,0xFF
(0211) 		delay50ms(dlyMs);
    039B 2F04      MOV	R16,R20
    039C 2711      CLR	R17
    039D DE55      RCALL	_delay50ms
    039E 01FB      MOVW	R30,R22
    039F 8020      LDD	R2,Z+0
    03A0 2022      TST	R2
    03A1 F769      BNE	0x038F
    03A2 940E0480  CALL	pop_gset4
    03A4 9508      RET
(0212) 	} 
(0213) }
(0214) 
(0215) void lcd_clr()
(0216) {
(0217) 	lcd_wrCmd(0x00,0x10);	//显示右移
_lcd_clr:
    03A5 E120      LDI	R18,0x10
    03A6 2700      CLR	R16
    03A7 DE6E      RCALL	_lcd_wrCmd
(0218) 	delay50us(200);
    03A8 EC08      LDI	R16,0xC8
    03A9 E010      LDI	R17,0
    03AA DE36      RCALL	_delay50us
    03AB 9508      RET
(0219) }
(0220) 
(0221) void lcd_init(void)
(0222) {
(0223) 	SPI_init();	
_lcd_init:
    03AC DE5C      RCALL	_SPI_init
(0224) 	//OUT_LCD_CS;		//若LCD_CS
(0225) 	//SET_LCD_CS;		
(0226) 	delay50ms(1);
    03AD E001      LDI	R16,1
    03AE E010      LDI	R17,0
    03AF DE43      RCALL	_delay50ms
(0227) 	lcd_wrCmd(0x30,0x30);	//使用8位控制界面,使用基本指令集
    03B0 E320      LDI	R18,0x30
    03B1 E300      LDI	R16,0x30
    03B2 DE63      RCALL	_lcd_wrCmd
(0228) 	//lcd_wrCmd(0x00,0xF0);	//整体显示ON
(0229) 	lcd_wrCmd(0x00,0xC0);	//整体显示ON
    03B3 EC20      LDI	R18,0xC0
    03B4 2700      CLR	R16
    03B5 DE60      RCALL	_lcd_wrCmd
(0230) 	lcd_wrCmd(0x00,0x10);	//清屏
    03B6 E120      LDI	R18,0x10
    03B7 2700      CLR	R16
    03B8 DE5D      RCALL	_lcd_wrCmd
(0231) 	//lcd_wrCmd(0x10,0x00);	//光标
(0232) 	lcd_wrCmd(0x00,0x60);
    03B9 E620      LDI	R18,0x60
    03BA 2700      CLR	R16
    03BB DE5A      RCALL	_lcd_wrCmd
(0233) 	//lcd_wrCmd(0x00,0x70);	//显示右移
(0234) 	delay50ms(1);		//不可省去!!!
    03BC E001      LDI	R16,1
    03BD E010      LDI	R17,0
    03BE DE34      RCALL	_delay50ms
    03BF 9508      RET
_main:
    03C0 9722      SBIW	R28,2
FILE: E:\微雪电子CD1\产品资料\开发板实验板\SMK系列\SMK1632\实验教程\外围模块相关实验\LCD128~1\LCD12864_ST7920\LCD12864_ST7920.C
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                            
(0004) 目    的:   建立操作LCD12864_ST7920液晶的示例程序
(0005) 
(0006) 目标系统:   基于任何AVR单片机
(0007) 		                                                                
(0008) 应用软件:   ICCAVR
(0009) 		                                                                
(0010) 版    本:   Version 1.0                                                          
(0011) 		                                                                
(0012) 圆版时间:   2005-06-25
(0013) 	
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 	
(0018) 	深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 实验内容:
(0027) 初始化、读写Lcd12864_ST7920。
(0028) ----------------------------------------------------------------------
(0029) 硬件连接:
(0030) LCD12864_ST7920			ATmega16
(0031) 1.GND		--------	GND
(0032) 2.VCC		--------	VCC
(0033) 3.V0		--------	V0
(0034) 4.RS(CS)	--------	VCC
(0035) 5.R/W(SID)	--------	MOSI/PB5
(0036) 6.E(SCLK)	--------	SCK/PB7
(0037) 7.D0		--------	NC
(0038) 8.D1		--------	NC
(0039) 9.D2		--------	NC
(0040) 10.D3		--------	NC
(0041) 11.D4		--------	NC
(0042) 12.D5		--------	NC
(0043) 13.D6		--------	NC
(0044) 14.D7		--------	NC
(0045) 15.PSB		--------	GND
(0046) 16.NC		--------	NC
(0047) 17.RST		--------	NC
(0048) 18.NC		--------	NC
(0049) 19.LED+		--------	VCC
(0050) 20.LED-		--------	GND
(0051) 
(0052) 操作步骤:
(0053) (1)编译烧写该程序到ATmega16,断开电源
(0054) (2)若使用ISP接口烧写程序,请断开ISP烧写器
(0055) (由于本示例程序使用的是ATmega16的SPI接口,刚好是ISP烧写器的烧写口)
(0056) (3)将LCD12864_ST7920插入主板的Lcd12864插槽
(0057) (4)使用连接线将LCD12864_ST7920的以下引针接口连接到MCU:
(0058) (由于SMK1632已经做好了大部分的硬件连接,您只需连接以下数据端口)
(0059) LCD12864_ST7920			ATmega16
(0060) 4.RS(CS)	--------	VCC
(0061) 5.R/W(SID)	--------	MOSI/PB5
(0062) 6.E(SCLK)	--------	SCK/PB7
(0063) 15.PSB		--------	GND
(0064) (5)上电,如果操作正确,这时您可以看到显示的内容了
(0065) 
(0066) ----------------------------------------------------------------------
(0067) 注意事项:
(0068) (1)若有加载库函数,请将光盘根目录下的“库函数”下的“ICC_H”文件夹拷到D盘 
(0069) (2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
(0070) ----------------------------------------------------------------------
(0071) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0072) 
(0073) #include <iom16v.h>
(0074) 
(0075) #include "D:\ICC_H\LCD12864_ST7920.H"
(0076) 
(0077) /*--------------------------------------------------------------------
(0078) 函数名称:
(0079) 函数功能:
(0080) 注意事项:
(0081) 提示说明:
(0082) 输    入:
(0083) 返    回:
(0084) --------------------------------------------------------------------*/
(0085) void main()
(0086) {             
(0087) 	SEI();
    03C1 9478      BSET	7
(0088) 	lcd_init();
    03C2 DFE9      RCALL	_lcd_init
(0089) 	lcd_puts(1,1,"  WaveShare.net");
    03C3 E68D      LDI	R24,0x6D
    03C4 E090      LDI	R25,0
    03C5 8399      STD	Y+1,R25
    03C6 8388      STD	Y+0,R24
    03C7 E021      LDI	R18,1
    03C8 E001      LDI	R16,1
    03C9 DF94      RCALL	_lcd_puts
(0090) 	lcd_puts(3,1,"    微雪电子");
    03CA E680      LDI	R24,0x60
    03CB E090      LDI	R25,0
    03CC 8399      STD	Y+1,R25
    03CD 8388      STD	Y+0,R24
    03CE E021      LDI	R18,1
    03CF E003      LDI	R16,3
    03D0 DF8D      RCALL	_lcd_puts
(0091) 	while(1);
FILE: <library>
    03D1 CFFF      RJMP	0x03D1
    03D2 9622      ADIW	R28,2
    03D3 9508      RET
push_arg4:
    03D4 933A      ST	R19,-Y
    03D5 932A      ST	R18,-Y
push_arg2:
    03D6 931A      ST	R17,-Y
    03D7 930A      ST	R16,-Y
    03D8 9508      RET
div32u:
    03D9 94E8      BCLR	6
    03DA C001      RJMP	0x03DC
mod32u:
    03DB 9468      BSET	6
    03DC D02F      RCALL	long_div_prolog
    03DD 24CC      CLR	R12
    03DE C008      RJMP	0x03E7
div32s:
    03DF 94E8      BCLR	6
    03E0 C001      RJMP	0x03E2
mod32s:
    03E1 9468      BSET	6
    03E2 D029      RCALL	

⌨️ 快捷键说明

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