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

📄 016.lst

📁 转于ICCAVR.COM ,转于ICCAVR.COM ,
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    034C E5CF      LDI	R28,0x5F
    034D E0D4      LDI	R29,4
    034E BFCD      OUT	0x3D,R28
    034F BFDE      OUT	0x3E,R29
    0350 51C0      SUBI	R28,0x10
    0351 40D0      SBCI	R29,0
    0352 EA0A      LDI	R16,0xAA
    0353 8308      STD	Y+0,R16
    0354 2400      CLR	R0
    0355 E7E3      LDI	R30,0x73
    0356 E0F0      LDI	R31,0
    0357 E010      LDI	R17,0
    0358 37E3      CPI	R30,0x73
    0359 07F1      CPC	R31,R17
    035A F011      BEQ	0x035D
    035B 9201      ST	R0,Z+
    035C CFFB      RJMP	0x0358
    035D 8300      STD	Z+0,R16
    035E E8E4      LDI	R30,0x84
    035F E0F6      LDI	R31,6
    0360 E6A0      LDI	R26,0x60
    0361 E0B0      LDI	R27,0
    0362 E016      LDI	R17,6
    0363 39E7      CPI	R30,0x97
    0364 07F1      CPC	R31,R17
    0365 F021      BEQ	0x036A
    0366 95C8      LPM
    0367 9631      ADIW	R30,1
    0368 920D      ST	R0,X+
    0369 CFF9      RJMP	0x0363
    036A 940E036D  CALL	_main
_exit:
    036C CFFF      RJMP	_exit
_main:
    036D 9722      SBIW	R28,2
FILE: E:\ICCAVR\project\AVRMEG~2\icc\016-LCD12864\main.c
(0001) /*
(0002) 实验十五:
(0003) 	LCD1602显示实验。
(0004) 	1、LCD1602显示实验。显示欢及网址信息。
(0005) 	2、内部1 M晶振,程序采用单任务方式,软件延时。
(0006) 	3、进行此实验请插上JP1、JP2的所有8个短路块,PC7短路块。
(0007) 
(0008) 	AVR  mega16学习板
(0009) 	www.iccavr.com
(0010) 	23:03 2007-4-13
(0011) */
(0012) 
(0013) #include <iom16v.h>
(0014) #include "font.h"
(0015) #include "lcd12864.h"
(0016) 
(0017) void main(void) {
(0018) 
(0019) 	PORTA = 0xFF;				/*打开上拉*/
    036E EF8F      LDI	R24,0xFF
    036F BB8B      OUT	0x1B,R24
(0020) 	DDRA = 0x00;				/*方向输入*/
    0370 2422      CLR	R2
    0371 BA2A      OUT	0x1A,R2
(0021) 	PORTB = 0xFF;				/*电平设置*/
    0372 BB88      OUT	0x18,R24
(0022) 	DDRB = 0xFF;				/*方向输出*/
    0373 BB87      OUT	0x17,R24
(0023) 	PORTC = 0x7F;
    0374 E78F      LDI	R24,0x7F
    0375 BB85      OUT	0x15,R24
(0024) 	DDRC = 0x80;
    0376 E880      LDI	R24,0x80
    0377 BB84      OUT	0x14,R24
(0025) 	PORTD = 0xFF;
    0378 EF8F      LDI	R24,0xFF
    0379 BB82      OUT	0x12,R24
(0026) 	DDRD = 0x00;
    037A BA21      OUT	0x11,R2
(0027) 
(0028) 	disp_init();
    037B 940E0550  CALL	_disp_init
(0029) 	disp_clear(0, 128, 0);
    037D 2422      CLR	R2
    037E 8228      STD	Y+0,R2
    037F E820      LDI	R18,0x80
    0380 2700      CLR	R16
    0381 940E0414  CALL	_disp_clear
(0030) 	disp_clear(0, 128, 2);
    0383 E082      LDI	R24,2
    0384 8388      STD	Y+0,R24
    0385 E820      LDI	R18,0x80
    0386 2700      CLR	R16
    0387 940E0414  CALL	_disp_clear
(0031) 	disp_clear(0, 128, 4);
    0389 E084      LDI	R24,4
    038A 8388      STD	Y+0,R24
    038B E820      LDI	R18,0x80
    038C 2700      CLR	R16
    038D 940E0414  CALL	_disp_clear
(0032) 	disp_clear(0, 128, 6);
    038F E086      LDI	R24,6
    0390 8388      STD	Y+0,R24
    0391 E820      LDI	R18,0x80
    0392 2700      CLR	R16
    0393 940E0414  CALL	_disp_clear
(0033) 	
(0034) 	disp_char_str(28, 2, "AVR");
    0395 E68F      LDI	R24,0x6F
    0396 E090      LDI	R25,0
    0397 8399      STD	Y+1,R25
    0398 8388      STD	Y+0,R24
    0399 E022      LDI	R18,2
    039A E10C      LDI	R16,0x1C
    039B 940E0535  CALL	_disp_char_str
(0035) 	disp_word(52, 2, CBFAA);
    039D E081      LDI	R24,1
    039E 8388      STD	Y+0,R24
    039F E022      LDI	R18,2
    03A0 E304      LDI	R16,0x34
    03A1 940E04CC  CALL	_disp_word
(0036) 	disp_word(68, 2, CB7A2);
    03A3 E082      LDI	R24,2
    03A4 8388      STD	Y+0,R24
    03A5 E022      LDI	R18,2
    03A6 E404      LDI	R16,0x44
    03A7 940E04CC  CALL	_disp_word
(0037) 	disp_word(84, 2, CCDF8);
    03A9 E083      LDI	R24,3
    03AA 8388      STD	Y+0,R24
    03AB E022      LDI	R18,2
    03AC E504      LDI	R16,0x54
    03AD 940E04CC  CALL	_disp_word
(0038) 	disp_char_str(8, 5, "www.iccavr.com");
    03AF E680      LDI	R24,0x60
    03B0 E090      LDI	R25,0
    03B1 8399      STD	Y+1,R25
    03B2 8388      STD	Y+0,R24
    03B3 E025      LDI	R18,5
    03B4 E008      LDI	R16,0x8
    03B5 940E0535  CALL	_disp_char_str
(0039) 
(0040) 	while (1);
    03B7 CFFF      RJMP	0x03B7
    03B8 9622      ADIW	R28,2
    03B9 9508      RET
FILE: E:\ICCAVR\project\AVRMEG~2\icc\016-LCD12864\lcd12864.c
(0001) /*
(0002) 	LCD1602液晶屏驱动模块
(0003) 	1、可直接嵌入到项目中使用
(0004) 	2、晶振频率:1M
(0005) 	3、如晶振提高低层驱动延时要作相应修改
(0006) 
(0007) 	AVR_AFA
(0008) 	www.iccavr.com
(0009) */
(0010) 
(0011) #include <iom16v.h>
(0012) #include "font.h"
(0013) 
(0014) #define RS_CLR	PORTD &= ~(1 << PD3)/*命令或数据选择*/
(0015) #define RS_SET	PORTD |= (1 << PD3)/*RS = 1命令,RS = 0数据*/
(0016) 
(0017) #define RW_CLR	PORTD &= ~(1 << PD4)/*读取或写入选择*/
(0018) #define RW_SET	PORTD |= (1 << PD4)/*RW = 1读,RW = 0写*/
(0019) 
(0020) #define EN_CLR	PORTD &= ~(1 << PD6)/*读写使能信号*/
(0021) #define EN_SET	PORTD |= (1 << PD6)/*下降沿有效*/
(0022) 
(0023) #define RST_CLR	PORTD &= ~(1 << PD7)/*芯片复位脚*/
(0024) #define RST_SET	PORTD |= (1 << PD7)/*高电平复位*/
(0025) 
(0026) #define CSA_CLR	PORTC &= ~(1 << PC6)/*左半屏片选*/
(0027) #define CSA_SET	PORTC |= (1 << PC6)/*高电平选中*/
(0028) 
(0029) #define CSB_CLR	PORTC &= ~(1 << PC7)/*右半屏片选*/
(0030) #define CSB_SET	PORTC |= (1 << PC7)/*高电平选中*/
(0031) 
(0032) /*延时函数*/
(0033) void delay_us(unsigned int n) {
(0034) 
(0035) 	if (n == 0) {
_delay_us:
  n                    --> R16
    03BA 3000      CPI	R16,0
    03BB 0701      CPC	R16,R17
    03BC F409      BNE	0x03BE
(0036) 		return ;
    03BD C006      RJMP	0x03C4
(0037) 		}
(0038) 	while (--n);
    03BE 01C8      MOVW	R24,R16
    03BF 9701      SBIW	R24,1
    03C0 018C      MOVW	R16,R24
    03C1 3000      CPI	R16,0
    03C2 0701      CPC	R16,R17
    03C3 F7D1      BNE	0x03BE
    03C4 9508      RET
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    03C5 940E0574  CALL	push_gset2
(0039) }
(0040) 
(0041) /*延时函数*/
(0042) void delay_ms(unsigned char i) {
(0043) 
(0044) 	unsigned char a, b;
(0045) 	for (a = 1; a < i; a++) {
    03C7 E041      LDI	R20,1
    03C8 C006      RJMP	0x03CF
(0046) 		for (b = 1; b; b++) {
    03C9 E061      LDI	R22,1
    03CA C001      RJMP	0x03CC
    03CB 9563      INC	R22
    03CC 2366      TST	R22
    03CD F7E9      BNE	0x03CB
    03CE 9543      INC	R20
    03CF 1740      CP	R20,R16
    03D0 F3C0      BCS	0x03C9
    03D1 940E0565  CALL	pop_gset2
    03D3 9508      RET
_LCD0_write_com:
  com                  --> R20
    03D4 940E0576  CALL	push_gset1
    03D6 2F40      MOV	R20,R16
(0047) 			;
(0048) 			}
(0049) 		}
(0050) }
(0051) 
(0052) /*显示屏命令写入函数前半屏*/
(0053) void LCD0_write_com(unsigned char com) {
(0054) 	
(0055) 	RS_CLR;
    03D7 9893      CBI	0x12,3
(0056) 	RW_CLR;
    03D8 9894      CBI	0x12,4
(0057) 	CSA_SET;
    03D9 9AAE      SBI	0x15,6
(0058) 	CSB_CLR;
    03DA 98AF      CBI	0x15,7
(0059) 	EN_SET;
    03DB 9A96      SBI	0x12,6
(0060) 	PORTB = com;
    03DC BB48      OUT	0x18,R20
(0061) 	delay_us(1);
    03DD E001      LDI	R16,1
    03DE E010      LDI	R17,0
    03DF DFDA      RCALL	_delay_us
(0062) 	EN_CLR;
    03E0 9896      CBI	0x12,6
    03E1 940E0579  CALL	pop_gset1
    03E3 9508      RET
_LCD1_write_com:
  com                  --> R20
    03E4 940E0576  CALL	push_gset1
    03E6 2F40      MOV	R20,R16
(0063) }
(0064) 
(0065) /*显示屏命令写入函数后半屏*/
(0066) void LCD1_write_com(unsigned char com) {
(0067) 	
(0068) 	RS_CLR;
    03E7 9893      CBI	0x12,3
(0069) 	RW_CLR;
    03E8 9894      CBI	0x12,4
(0070) 	CSA_CLR;
    03E9 98AE      CBI	0x15,6
(0071) 	CSB_SET;
    03EA 9AAF      SBI	0x15,7
(0072) 	EN_SET;
    03EB 9A96      SBI	0x12,6
(0073) 	PORTB = com;
    03EC BB48      OUT	0x18,R20
(0074) 	delay_us(1);
    03ED E001      LDI	R16,1
    03EE E010      LDI	R17,0
    03EF DFCA      RCALL	_delay_us
(0075) 	EN_CLR;
    03F0 9896      CBI	0x12,6
    03F1 940E0579  CALL	pop_gset1
    03F3 9508      RET
_LCD0_write_data:
  data                 --> R20
    03F4 940E0576  CALL	push_gset1
    03F6 2F40      MOV	R20,R16
(0076) }
(0077) 
(0078) /*显示屏命令写入函数*/
(0079) void LCD0_write_data(unsigned char data) {
(0080) 
(0081) 	RS_SET;
    03F7 9A93      SBI	0x12,3
(0082) 	RW_CLR;
    03F8 9894      CBI	0x12,4
(0083) 	CSA_SET;
    03F9 9AAE      SBI	0x15,6
(0084) 	CSB_CLR;
    03FA 98AF      CBI	0x15,7
(0085) 	EN_SET;
    03FB 9A96      SBI	0x12,6
(0086) 	PORTB = data;
    03FC BB48      OUT	0x18,R20
(0087) 	delay_us(1);
    03FD E001      LDI	R16,1
    03FE E010      LDI	R17,0
    03FF DFBA      RCALL	_delay_us
(0088) 	EN_CLR;
    0400 9896      CBI	0x12,6
    0401 940E0579  CALL	pop_gset1
    0403 9508      RET
_LCD1_write_data:
  data                 --> R20
    0404 940E0576  CALL	push_gset1
    0406 2F40      MOV	R20,R16
(0089) }
(0090) 
(0091) /*显示屏命令写入函数*/
(0092) void LCD1_write_data(unsigned char data) {
(0093) 
(0094) 	RS_SET;
    0407 9A93      SBI	0x12,3
(0095) 	RW_CLR;
    0408 9894      CBI	0x12,4
(0096) 	CSA_CLR;
    0409 98AE      CBI	0x15,6
(0097) 	CSB_SET;
    040A 9AAF      SBI	0x15,7
(0098) 	EN_SET;
    040B 9A96      SBI	0x12,6
(0099) 	PORTB = data;
    040C BB48      OUT	0x18,R20
(0100) 	delay_us(1);
    040D E001      LDI	R16,1
    040E E010      LDI	R17,0
    040F DFAA      RCALL	_delay_us
(0101) 	EN_CLR;
    0410 9896      CBI	0x12,6
    0411 940E0579  CALL	pop_gset1
    0413 9508      RET
_disp_clear:
  x                    --> R20
  y                    --> R10
  x1                   --> R22
  x0                   --> R12
    0414 940E0570  CALL	push_gset4
    0416 2F62      MOV	R22,R18
    0417 2EC0      MOV	R12,R16
    0418 84A8      LDD	R10,Y+8
(0102) }
(0103) 
(0104) /*显示屏清空显示*/
(0105) void disp_clear(unsigned char x0, unsigned char x1, unsigned char y) {
(0106) 
(0107) 	unsigned char x;
(0108) 	
(0109) 	/*清除高位*/	
(0110) 	x = x0;
    0419 2D4C      MOV	R20,R12
(0111) 	if (x < 63) {			/*地址在左半屏范围内*/
    041A 334F      CPI	R20,0x3F
    041B F470      BCC	0x042A
(0112) 		LCD0_write_com(y | 0xB8);
    041C 2D0A      MOV	R16,R10
    041D 6B08      ORI	R16,0xB8
    041E DFB5      RCALL	_LCD0_write_com
(0113) 		LCD0_write_com(x | 0x40);
    041F 2F04      MOV	R16,R20
    0420 6400      ORI	R16,0x40
    0421 DFB2      RCALL	_LCD0_write_com
(0114) 		}
    0422 C007      RJMP	0x042A
(0115) 	while (x < x1) {
(0116) 		LCD0_write_data(0x00);
    0423 2700      CLR	R16
    0424 DFCF      RCALL	_LCD0_write_data
(0117) 		x ++;
    0425 9543      INC	R20
(0118) 		if (x > 63) {		/*判断地址是否越界*/
    0426 E38F      LDI	R24,0x3F
    0427 1784      CP	R24,R20
    0428 F408      BCC	0x042A
(0119) 			break;
    0429 C002      RJMP	0x042C
    042A 1746      CP	R20,R22
    042B F3B8      BCS	0x0423
(0120) 			}
(0121) 		}
(0122) 	if (x < x1) {			/*地址进入左半屏范围*/
    042C 1746      CP	R20,R22
    042D F450      BCC	0x0438
(0123) 		LCD1_write_com(y | 0xB8);
    042E 2D0A      MOV	R16,R10
    042F 6B08      ORI	R16,0xB8
    0430 DFB3      RCALL	_LCD1_write_com
(0124) 		LCD1_write_com(x | 0x40);
    0431 2F04      MOV	R16,R20
    0432 6400      ORI	R16,0x40
    0433 DFB0      RCALL	_LCD1_write_com
(0125) 		}
    0434 C003      RJMP	0x0438
(0126) 	while (x < x1) {
(0127) 		LCD1_write_data(0x00);
    0435 2700      CLR	R16
    0436 DFCD      RCALL	_LCD1_write_data
(0128) 		x ++;
    0437 9543      INC	R20
    0438 1746      CP	R20,R22
    0439 F3D8      BCS	0x0435
(0129) 		}
(0130) 
(0131) 	/*清除低位*/
(0132) 	x = x0;
    043A 2D4C      MOV	R20,R12
(0133) 	if (x < 63) {			/*地址在左半屏范围内*/
    043B 334F      CPI	R20,0x3F
    043C F478      BCC	0x044C
(0134) 		LCD0_write_com((y+1) | 0xB8);
    043D 2D0A      MOV	R16,R10
    043E 5F0F      SUBI	R16,0xFF
    043F 6B08      ORI	R16,0xB8
    0440 DF93      RCALL	_LCD0_write_com
(0135) 		LCD0_write_com(x | 0x40);
    0441 2F04      MOV	R16,R20
    0442 6400      ORI	R16,0x40
    0443 DF90      RCALL	_LCD0_write_com
(0136) 		}
    0444 C007      RJMP	0x044C
(0137) 	while (x < x1) {
(0138) 		LCD0_write_data(0x00);
    0445 2700      CLR	R16
    0446 DFAD      RCALL	_LCD0_write_data
(0139) 		x ++;
    0447 9543      INC	R20
(0140) 		if (x > 63) {		/*判断地址是否越界*/
    0448 E38F      LDI	R24,0x3F
    0449 1784      CP	R24,R20
    044A F408      BCC	0x044C
(0141) 			break;
    044B C002      RJMP	0x044E
    044C 1746      CP	R20,R22
    044D F3B8      BCS	0x0445
(0142) 			}
(0143) 		}
(0144) 	if (x < x1) {			/*地址进入左半屏范围*/
    044E 1746      CP	R20,R22
    044F F458      BCC	0x045B
(0145) 		LCD1_write_com((y+1) | 0xB8);
    0450 2D0A      MOV	R16,R10
    0451 5F0F      SUBI	R16,0xFF
    0452 6B08      ORI	R16,0xB8
    0453 DF90      RCALL	_LCD1_write_com
(0146) 		LCD1_write_com(x | 0x40);
    0454 2F04      MOV	R16,R20
    0455 6400      ORI	R16,0x40
    0456 DF8D      RCALL	_LCD1_write_com
(0147) 		}
    0457 C003      RJMP	0x045B
(0148) 	while (x < x1) {
(0149) 		LCD1_write_data(0x00);
    0458 2700      CLR	R16
    0459 DFAA      RCALL	_LCD1_write_data
(0150) 		x ++;
    045A 9543      INC	R20
    045B 1746      CP	R20,R22
    045C F3D8      BCS	0x0458
    045D 940E056B  CALL	pop_gset4
    045F 9508      RET
_disp_char:
  q                    --> R20
  i                    --> R22
  ascii                --> Y+8
  y                    --> R12
  x                    --> R10

⌨️ 快捷键说明

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