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

📄 014.lst

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LST
📖 第 1 页 / 共 2 页
字号:
    014F 6840      ORI	R20,0x80
(0101) 			}
    0150 C001      RJMP	0x0152
(0102) 		else {
(0103) 			temp &= 0x7F;
    0151 774F      ANDI	R20,0x7F
(0104) 			}
(0105) 		SCK_SET;
    0152 9AAA      SBI	0x15,2
(0106) 		SCK_CLR;
    0153 98AA      CBI	0x15,2
    0154 9563      INC	R22
    0155 3068      CPI	R22,0x8
    0156 F3A8      BCS	0x014C
(0107) 		}
(0108) 	
(0109) 	RST_CLR;					/*停止DS1302总线*/
    0157 98AC      CBI	0x15,4
(0110) 	return temp;
    0158 2F04      MOV	R16,R20
    0159 940E0231  CALL	pop_gset2
    015B 9508      RET
(0111) }
(0112) 
(0113) /*向DS302写入时钟数据*/
(0114) void ds1302_write_time(void) {
(0115) 
(0116) 	ds1302_write_byte(ds1302_control_add,0x00);			//关闭写保护 
_ds1302_write_time:
    015C 2722      CLR	R18
    015D E80E      LDI	R16,0x8E
    015E DFB4      RCALL	_ds1302_write_byte
(0117) 	ds1302_write_byte(ds1302_sec_add,0x80);				//暂停 
    015F E820      LDI	R18,0x80
    0160 E800      LDI	R16,0x80
    0161 DFB1      RCALL	_ds1302_write_byte
(0118) 	//ds1302_write_byte(ds1302_charger_add,0xa9);			//涓流充电 
(0119) 	ds1302_write_byte(ds1302_year_add,time_buf[1]);		//年 
    0162 91200061  LDS	R18,time_buf+1
    0164 E80C      LDI	R16,0x8C
    0165 DFAD      RCALL	_ds1302_write_byte
(0120) 	ds1302_write_byte(ds1302_month_add,time_buf[2]);	//月 
    0166 91200062  LDS	R18,time_buf+2
    0168 E808      LDI	R16,0x88
    0169 DFA9      RCALL	_ds1302_write_byte
(0121) 	ds1302_write_byte(ds1302_date_add,time_buf[3]);		//日 
    016A 91200063  LDS	R18,time_buf+3
    016C E806      LDI	R16,0x86
    016D DFA5      RCALL	_ds1302_write_byte
(0122) 	ds1302_write_byte(ds1302_day_add,time_buf[7]);		//周 
    016E 91200067  LDS	R18,0x67
    0170 E80A      LDI	R16,0x8A
    0171 DFA1      RCALL	_ds1302_write_byte
(0123) 	ds1302_write_byte(ds1302_hr_add,time_buf[4]);		//时 
    0172 91200064  LDS	R18,0x64
    0174 E804      LDI	R16,0x84
    0175 DF9D      RCALL	_ds1302_write_byte
(0124) 	ds1302_write_byte(ds1302_min_add,time_buf[5]);		//分
    0176 91200065  LDS	R18,0x65
    0178 E802      LDI	R16,0x82
    0179 DF99      RCALL	_ds1302_write_byte
(0125) 	ds1302_write_byte(ds1302_sec_add,time_buf[6]);		//秒
    017A 91200066  LDS	R18,0x66
    017C E800      LDI	R16,0x80
    017D DF95      RCALL	_ds1302_write_byte
(0126) 	ds1302_write_byte(ds1302_day_add,time_buf[7]);		//周 
    017E 91200067  LDS	R18,0x67
    0180 E80A      LDI	R16,0x8A
    0181 DF91      RCALL	_ds1302_write_byte
(0127) 	ds1302_write_byte(ds1302_control_add,0x80);			//打开写保护 
    0182 E820      LDI	R18,0x80
    0183 E80E      LDI	R16,0x8E
    0184 DF8E      RCALL	_ds1302_write_byte
    0185 9508      RET
(0128) }
(0129) 
(0130) /*从DS302读出时钟数据*/
(0131) void ds1302_read_time(void)  { 
(0132) 
(0133) 	time_buf[1]=ds1302_read_byte(ds1302_year_add);		//年 
_ds1302_read_time:
    0186 E80C      LDI	R16,0x8C
    0187 DFAF      RCALL	_ds1302_read_byte
    0188 93000061  STS	time_buf+1,R16
(0134) 	time_buf[2]=ds1302_read_byte(ds1302_month_add);		//月 
    018A E808      LDI	R16,0x88
    018B DFAB      RCALL	_ds1302_read_byte
    018C 93000062  STS	time_buf+2,R16
(0135) 	time_buf[3]=ds1302_read_byte(ds1302_date_add);		//日 
    018E E806      LDI	R16,0x86
    018F DFA7      RCALL	_ds1302_read_byte
    0190 93000063  STS	time_buf+3,R16
(0136) 	time_buf[4]=ds1302_read_byte(ds1302_hr_add);		//时 
    0192 E804      LDI	R16,0x84
    0193 DFA3      RCALL	_ds1302_read_byte
    0194 93000064  STS	0x64,R16
(0137) 	time_buf[5]=ds1302_read_byte(ds1302_min_add);		//分 
    0196 E802      LDI	R16,0x82
    0197 DF9F      RCALL	_ds1302_read_byte
    0198 93000065  STS	0x65,R16
(0138) 	time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//秒 
    019A E800      LDI	R16,0x80
    019B DF9B      RCALL	_ds1302_read_byte
    019C 2F80      MOV	R24,R16
    019D 778F      ANDI	R24,0x7F
    019E 93800066  STS	0x66,R24
(0139) 	time_buf[7]=ds1302_read_byte(ds1302_day_add);		//周 
    01A0 E80A      LDI	R16,0x8A
    01A1 DF95      RCALL	_ds1302_read_byte
    01A2 93000067  STS	0x67,R16
    01A4 9508      RET
(0140) }
(0141) 
(0142) /*DS302初始化函数*/
(0143) void ds1302_init(void) {
(0144) 	
(0145) 	RST_CLR;			/*RST脚置低*/
_ds1302_init:
    01A5 98AC      CBI	0x15,4
(0146) 	SCK_CLR;			/*SCK脚置低*/
    01A6 98AA      CBI	0x15,2
(0147) 	RST_OUT;			/*RST脚设置为输出*/
    01A7 9AA4      SBI	0x14,4
(0148) 	SCK_OUT;			/*SCK脚设置为输出*/
    01A8 9AA2      SBI	0x14,2
    01A9 9508      RET
FILE: E:\ICCAVR\project\AVRMEG~2\icc\014-DS1302-LCD1602\lcd1602.c
(0001) /*
(0002) 	LCD1602液晶屏驱动模块
(0003) 	1、可直接嵌入到项目中使用
(0004) 	2、晶振频率:1M
(0005) 	3、如晶振提高低层驱动延时要作相应修改
(0006) 
(0007) 	AVR_AFA
(0008) 	www.iccavr.com
(0009) 	程序编写过程中参照了peak的4线显示程序
(0010) 	peak:AVR论坛技术版版主
(0011) */
(0012) 
(0013) #include <iom16v.h>
(0014) 
(0015) #define RS_CLR	PORTD &= ~(1 << PD3)
(0016) #define RS_SET	PORTD |= (1 << PD3)
(0017) 
(0018) #define RW_CLR	PORTD &= ~(1 << PD4)
(0019) #define RW_SET	PORTD |= (1 << PD4)
(0020) 
(0021) #define EN_CLR	PORTD &= ~(1 << PD6)
(0022) #define EN_SET	PORTD |= (1 << PD6)
(0023) 
(0024) /*延时函数*/
(0025) void delay_us(unsigned int n) {
(0026) 
(0027) 	if (n == 0) {
_delay_us:
  n                    --> R16
    01AA 3000      CPI	R16,0
    01AB 0701      CPC	R16,R17
    01AC F409      BNE	0x01AE
(0028) 		return ;
    01AD C006      RJMP	0x01B4
(0029) 		}
(0030) 	while (--n);
    01AE 01C8      MOVW	R24,R16
    01AF 9701      SBIW	R24,1
    01B0 018C      MOVW	R16,R24
    01B1 3000      CPI	R16,0
    01B2 0701      CPC	R16,R17
    01B3 F7D1      BNE	0x01AE
    01B4 9508      RET
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    01B5 940E023D  CALL	push_gset2
(0031) }
(0032) 
(0033) /*延时函数*/
(0034) void delay_ms(unsigned char i) {
(0035) 
(0036) 	unsigned char a, b;
(0037) 	for (a = 1; a < i; a++) {
    01B7 E041      LDI	R20,1
    01B8 C006      RJMP	0x01BF
(0038) 		for (b = 1; b; b++) {
    01B9 E061      LDI	R22,1
    01BA C001      RJMP	0x01BC
    01BB 9563      INC	R22
    01BC 2366      TST	R22
    01BD F7E9      BNE	0x01BB
    01BE 9543      INC	R20
    01BF 1740      CP	R20,R16
    01C0 F3C0      BCS	0x01B9
    01C1 940E0231  CALL	pop_gset2
    01C3 9508      RET
_LCD_write_com:
  com                  --> R20
    01C4 940E023F  CALL	push_gset1
    01C6 2F40      MOV	R20,R16
(0039) 			;
(0040) 			}
(0041) 		}
(0042) }
(0043) 
(0044) /*显示屏命令写入函数*/
(0045) void LCD_write_com(unsigned char com) {
(0046) 	
(0047) 	RS_CLR;
    01C7 9893      CBI	0x12,3
(0048) 	RW_CLR;
    01C8 9894      CBI	0x12,4
(0049) 	EN_SET;
    01C9 9A96      SBI	0x12,6
(0050) 	PORTB = com;
    01CA BB48      OUT	0x18,R20
(0051) 	delay_us(5);
    01CB E005      LDI	R16,5
    01CC E010      LDI	R17,0
    01CD DFDC      RCALL	_delay_us
(0052) 	EN_CLR;
    01CE 9896      CBI	0x12,6
    01CF 940E0242  CALL	pop_gset1
    01D1 9508      RET
_LCD_write_data:
  data                 --> R20
    01D2 940E023F  CALL	push_gset1
    01D4 2F40      MOV	R20,R16
(0053) }
(0054) 
(0055) /*显示屏命令写入函数*/
(0056) void LCD_write_data(unsigned char data) {
(0057) 
(0058) 	RS_SET;
    01D5 9A93      SBI	0x12,3
(0059) 	RW_CLR;
    01D6 9894      CBI	0x12,4
(0060) 	EN_SET;
    01D7 9A96      SBI	0x12,6
(0061) 	PORTB = data;
    01D8 BB48      OUT	0x18,R20
(0062) 	delay_us(5);
    01D9 E005      LDI	R16,5
    01DA E010      LDI	R17,0
    01DB DFCE      RCALL	_delay_us
(0063) 	EN_CLR;
    01DC 9896      CBI	0x12,6
    01DD 940E0242  CALL	pop_gset1
    01DF 9508      RET
(0064) }
(0065) 
(0066) /*显示屏清空显示*/
(0067) void LCD_clear(void) {
(0068) 
(0069) 	LCD_write_com(0x01);
_LCD_clear:
    01E0 E001      LDI	R16,1
    01E1 DFE2      RCALL	_LCD_write_com
(0070) 	delay_ms(5);
    01E2 E005      LDI	R16,5
    01E3 DFD1      RCALL	_delay_ms
    01E4 9508      RET
_LCD_write_str:
  s                    --> R20
  y                    --> R10
  x                    --> R22
    01E5 940E023B  CALL	push_gset3
    01E7 2EA2      MOV	R10,R18
    01E8 2F60      MOV	R22,R16
    01E9 814E      LDD	R20,Y+6
    01EA 815F      LDD	R21,Y+7
(0071) }
(0072) 
(0073) /*显示屏字符串写入函数*/
(0074) void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) {
(0075) 	
(0076)     if (y == 0) {
    01EB 20AA      TST	R10
    01EC F421      BNE	0x01F1
(0077)     	LCD_write_com(0x80 + x);
    01ED 2F06      MOV	R16,R22
    01EE 5800      SUBI	R16,0x80
    01EF DFD4      RCALL	_LCD_write_com
(0078)     	}
    01F0 C009      RJMP	0x01FA
(0079)     else {
(0080)     	LCD_write_com(0xC0 + x);
    01F1 2F06      MOV	R16,R22
    01F2 5400      SUBI	R16,0x40
    01F3 DFD0      RCALL	_LCD_write_com
(0081)     	}
    01F4 C005      RJMP	0x01FA
(0082)     
(0083)     while (*s) {
(0084)     	LCD_write_data( *s);
    01F5 01FA      MOVW	R30,R20
    01F6 8100      LDD	R16,Z+0
    01F7 DFDA      RCALL	_LCD_write_data
(0085)     	s ++;
    01F8 5F4F      SUBI	R20,0xFF
    01F9 4F5F      SBCI	R21,0xFF
    01FA 01FA      MOVW	R30,R20
    01FB 8020      LDD	R2,Z+0
    01FC 2022      TST	R2
    01FD F7B9      BNE	0x01F5
    01FE 940E0234  CALL	pop_gset3
    0200 9508      RET
_LCD_write_char:
  data                 --> Y+4
  y                    --> R22
  x                    --> R20
    0201 940E023D  CALL	push_gset2
    0203 2F62      MOV	R22,R18
    0204 2F40      MOV	R20,R16
(0086)     	}
(0087) }
(0088) 
(0089) /*显示屏单字符写入函数*/
(0090) void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) {
(0091) 	
(0092)     if (y == 0) {
    0205 2366      TST	R22
    0206 F421      BNE	0x020B
(0093)     	LCD_write_com(0x80 + x);
    0207 2F04      MOV	R16,R20
    0208 5800      SUBI	R16,0x80
    0209 DFBA      RCALL	_LCD_write_com
(0094)     	}
    020A C003      RJMP	0x020E
(0095)     else {
(0096)     	LCD_write_com(0xC0 + x);
    020B 2F04      MOV	R16,R20
    020C 5400      SUBI	R16,0x40
    020D DFB6      RCALL	_LCD_write_com
(0097)     	}
(0098)     
(0099)     LCD_write_data( data);  
    020E 810C      LDD	R16,Y+4
    020F DFC2      RCALL	_LCD_write_data
    0210 940E0231  CALL	pop_gset2
    0212 9508      RET
(0100) }
(0101) 
(0102) /*显示屏初始化函数*/
(0103) void LCD_init(void) {
(0104) 	
(0105) 	DDRB = 0xFF;						/*I/O口方向设置*/
_LCD_init:
    0213 EF8F      LDI	R24,0xFF
    0214 BB87      OUT	0x17,R24
(0106) 	DDRD |= (1 << PD3) | (1 << PD4) | (1 << PD6);
    0215 B381      IN	R24,0x11
    0216 6588      ORI	R24,0x58
    0217 BB81      OUT	0x11,R24
(0107) 	LCD_write_com(0x38);				/*显示模式设置*/
    0218 E308      LDI	R16,0x38
    0219 DFAA      RCALL	_LCD_write_com
(0108) 	delay_ms(5);
    021A E005      LDI	R16,5
    021B DF99      RCALL	_delay_ms
(0109) 	LCD_write_com(0x38);
    021C E308      LDI	R16,0x38
    021D DFA6      RCALL	_LCD_write_com
(0110) 	delay_ms(5);
    021E E005      LDI	R16,5
    021F DF95      RCALL	_delay_ms
(0111) 	LCD_write_com(0x38);
    0220 E308      LDI	R16,0x38
    0221 DFA2      RCALL	_LCD_write_com
(0112) 	delay_ms(5);
    0222 E005      LDI	R16,5
    0223 DF91      RCALL	_delay_ms
(0113) 	LCD_write_com(0x38);
    0224 E308      LDI	R16,0x38
    0225 DF9E      RCALL	_LCD_write_com
(0114) 	
(0115) 	LCD_write_com(0x08);				/*显示关闭*/
    0226 E008      LDI	R16,0x8
    0227 DF9C      RCALL	_LCD_write_com
(0116) 	LCD_write_com(0x01);				/*显示清屏*/
    0228 E001      LDI	R16,1
    0229 DF9A      RCALL	_LCD_write_com
(0117) 	LCD_write_com(0x06);				/*显示光标移动设置*/
    022A E006      LDI	R16,6
    022B DF98      RCALL	_LCD_write_com
(0118) 	delay_ms(5);
    022C E005      LDI	R16,5
    022D DF87      RCALL	_delay_ms
(0119) 	LCD_write_com(0x0C);				/*显示开及光标设置*/
FILE: <library>
    022E E00C      LDI	R16,0xC
    022F DF94      RCALL	_LCD_write_com
    0230 9508      RET
pop_gset2:
    0231 E0E2      LDI	R30,2
    0232 940C0243  JMP	pop
pop_gset3:
    0234 E0E4      LDI	R30,4
    0235 940C0243  JMP	pop
push_gset5:
    0237 92FA      ST	R15,-Y
    0238 92EA      ST	R14,-Y
push_gset4:
    0239 92DA      ST	R13,-Y
    023A 92CA      ST	R12,-Y
push_gset3:
    023B 92BA      ST	R11,-Y
    023C 92AA      ST	R10,-Y
push_gset2:
    023D 937A      ST	R23,-Y
    023E 936A      ST	R22,-Y
push_gset1:
    023F 935A      ST	R21,-Y
    0240 934A      ST	R20,-Y
    0241 9508      RET
pop_gset1:
    0242 E0E1      LDI	R30,1
pop:
    0243 9149      LD	R20,Y+
    0244 9159      LD	R21,Y+
    0245 FDE0      SBRC	R30,0
    0246 9508      RET
    0247 9169      LD	R22,Y+
    0248 9179      LD	R23,Y+
    0249 FDE1      SBRC	R30,1
    024A 9508      RET
    024B 90A9      LD	R10,Y+
    024C 90B9      LD	R11,Y+
    024D FDE2      SBRC	R30,2
    024E 9508      RET
    024F 90C9      LD	R12,Y+
    0250 90D9      LD	R13,Y+
    0251 FDE3      SBRC	R30,3
    0252 9508      RET
    0253 90E9      LD	R14,Y+
    0254 90F9      LD	R15,Y+
    0255 9508      RET

⌨️ 快捷键说明

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