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

📄 1820.lst

📁 基于ATMEGA16的温度传感器原代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0043 E5CF      LDI	R28,0x5F
    0044 E0D4      LDI	R29,4
    0045 BFCD      OUT	0x3D,R28
    0046 BFDE      OUT	0x3E,R29
    0047 51C0      SUBI	R28,0x10
    0048 40D0      SBCI	R29,0
    0049 EA0A      LDI	R16,0xAA
    004A 8308      STD	Y+0,R16
    004B 2400      CLR	R0
    004C E6EE      LDI	R30,0x6E
    004D E0F0      LDI	R31,0
    004E E010      LDI	R17,0
    004F 37E2      CPI	R30,0x72
    0050 07F1      CPC	R31,R17
    0051 F011      BEQ	0x0054
    0052 9201      ST	R0,Z+
    0053 CFFB      RJMP	0x004F
    0054 8300      STD	Z+0,R16
    0055 E7E8      LDI	R30,0x78
    0056 E0F0      LDI	R31,0
    0057 E6A0      LDI	R26,0x60
    0058 E0B0      LDI	R27,0
    0059 E010      LDI	R17,0
    005A 38E6      CPI	R30,0x86
    005B 07F1      CPC	R31,R17
    005C F021      BEQ	0x0061
    005D 95C8      LPM
    005E 9631      ADIW	R30,1
    005F 920D      ST	R0,X+
    0060 CFF9      RJMP	0x005A
    0061 940E038E  CALL	_main
_exit:
    0063 CFFF      RJMP	_exit
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\delay.h
(0001) //#define 	F_CPU 		12000000
(0002) #define 	F_CPU 		11059200
(0003) //#define 	F_CPU 			8000000
(0004) //#define 	F_CPU 			7372800
(0005) //#define 	F_CPU 			4000000
(0006) /*************************************************************************
(0007) 通用延时头文件:
(0008) 			   delay_nus(n)延时n微秒
(0009) 			   delay_nms(n)延时n毫秒
(0010) *************************************************************************/
(0011) #if F_CPU == 12000000
(0012) 	void delay_nus(unsigned int time)
(0013) 	{
(0014) 	 	while (time!=0)
(0015) 		{
(0016) 		 	NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
(0017) 			time--;
(0018) 		}
(0019) 	}
(0020) 	void delay_nms(unsigned int time)
(0021) 	{
(0022)  	 	unsigned int i;
(0023) 		while (time!=0)
(0024) 		{
(0025) 		 	for(i=0;i<1740;i++);
(0026) 			time--;
(0027) 		}
(0028) 	}
(0029) #endif
(0030) 
(0031) #if F_CPU == 11059200
(0032) 	void delay_nus(unsigned int time)
(0033) 	{
_delay_nus:
  time                 --> R16
    0064 C009      RJMP	0x006E
(0034) 	 	while (time!=0)
(0035) 		{
(0036) 		 	NOP();NOP();NOP();NOP();NOP();NOP();NOP();
    0065 0000      NOP
    0066 0000      NOP
    0067 0000      NOP
    0068 0000      NOP
    0069 0000      NOP
    006A 0000      NOP
    006B 0000      NOP
(0037) 			time--;
    006C 5001      SUBI	R16,1
    006D 4010      SBCI	R17,0
    006E 3000      CPI	R16,0
    006F 0701      CPC	R16,R17
    0070 F7A1      BNE	0x0065
    0071 9508      RET
_delay_nms:
  i                    --> R20
  time                 --> R16
    0072 940E0454  CALL	push_gset1
(0038) 		}
(0039) 	}
(0040) 	void delay_nms(unsigned int time)
(0041) 	{
    0074 C00B      RJMP	0x0080
(0042)  	 	unsigned int i;
(0043) 		while (time!=0)
(0044) 		{
(0045) 		 	for(i=0;i<1580;i++);	
    0075 2744      CLR	R20
    0076 2755      CLR	R21
    0077 C002      RJMP	0x007A
    0078 5F4F      SUBI	R20,0xFF
    0079 4F5F      SBCI	R21,0xFF
    007A 324C      CPI	R20,0x2C
    007B E0E6      LDI	R30,6
    007C 075E      CPC	R21,R30
    007D F3D0      BCS	0x0078
(0046) 			time--;
    007E 5001      SUBI	R16,1
    007F 4010      SBCI	R17,0
    0080 3000      CPI	R16,0
    0081 0701      CPC	R16,R17
    0082 F791      BNE	0x0075
    0083 940E0457  CALL	pop_gset1
    0085 9508      RET
_Scan_Key:
  i                    --> R20
    0086 940E0454  CALL	push_gset1
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\AVR_XQV12.h
(0001) 
(0002) #define		TRUE			0xff					//真
(0003) #define		FALSE			0x00					//假
(0004) #define		null			0x00					//空
(0005) #define 	Open_LED		PORTA|=0x10				//使能LED
(0006) #define 	Close_LED		PORTA&=~0x10			//关闭LED
(0007) #define		LED				PORTB					//LED端口
(0008) #define		SMG				PORTB					//数码管端口
(0009) #define 	Open_SMG_DATA	PORTA|=0x08				//使能数码管数据
(0010) #define 	Close_SMG_DATA	PORTA&=~0x08			//关闭数码管数据
(0011) #define 	Open_SMG_BIT	PORTA|=0x04				//使能数码管位选择
(0012) #define 	Close_SMG_BIT	PORTA&=~0x04			//关闭数码管位选择
(0013) #define		KEY0			(PIND&0x04)				//INT0
(0014) #define		KEY1			(PIND&0x08)				//INT1
(0015) #define 	SetSclk			(PORTC|=0x80)			//LCD12864 CLK
(0016) #define 	ClrSclk			(PORTC&=~0x80)
(0017) #define 	SetRs			(PORTD|=0x40) 			//LCD12864 CS
(0018) #define 	ClrRs			(PORTD&=~0x40)
(0019) #define 	SetSid			(PORTC|=0x40) 			//LCD12864 DATA
(0020) #define 	ClrSid			(PORTC&=~0x40)
(0021) #define 	D0 				0x80		  			//18B20 DATA
(0022) #define 	port 			PORTD
(0023) #define 	ddrt 			DDRD
(0024) #define 	pin 			PIND
(0025) #define 	Set_CS5615 		(PORTD|=0x80)			//片选5615
(0026) #define 	Clr_CS5615 		(PORTD&=~0x80)			//释放
(0027) #define 	Period 			0x6bfe					//PWM脉冲周期20ms
(0028) #define 	rd_device_add 	0xa3					//定义器件读地址
(0029) #define 	wr_device_add 	0xa2					//定义器件写地址
(0030) #define 	START 		   	0x08					//起始信号
(0031) #define 	MT_SLA_ACK 	   	0x18
(0032) #define 	MT_DATA_ACK    	0x28
(0033) #define 	RE_START 	   	0x10
(0034) #define 	MR_SLA_ACK 	   	0x40
(0035) #define 	MR_DATA_NOACK  	0x58
(0036) #define 	START 			0x08
(0037) #define 	MT_SLA_ACK 		0x18
(0038) #define 	MT_DATA_ACK 	0x28
(0039) #define 	RE_START 		0x10
(0040) #define 	MR_SLA_ACK 		0x40
(0041) #define 	MR_DATA_NOACK 	0x58
(0042) #define 	MR_DATA_ACK 	0x50
(0043) 
(0044) #if AD==TRUE					//条件编译指令
(0045) unsigned char Adc_Mux=0;
(0046) unsigned int Adc0_Rel=0;
(0047) unsigned int Adc1_Rel=0;
(0048) unsigned int Adc0_Catch=0;
(0049) unsigned int Adc1_Catch=0;
(0050) unsigned int Adc0_Conver[20];
(0051) unsigned int Adc1_Conver[20];
(0052) unsigned char Adc0_F;
(0053) unsigned char Adc1_F;
(0054) #endif	 	  		 		 	//条件编译结束
(0055) unsigned char Key_Number;			   	   	//全局变量:按键标志
(0056) unsigned int temprter;
(0057) #pragma data:code 
(0058) const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0059) 		                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
(0060) 				   							//数码管译码数组
(0061) #pragma data:data
(0062) /*******************************************************/
(0063) /******   函数名称: Scan_Key()                    ******/
(0064) /******   功    能: 键盘扫描                      ******/
(0065) /******   参    数: 无                            ******/
(0066) /******   返回值  : 按键的键值,无按键时返回null  ******/
(0067) /*******************************************************/
(0068) unsigned char Scan_Key(void)
(0069) {
(0070)  	unsigned char i;
(0071) 	PORTC=0x00;
    0088 2422      CLR	R2
    0089 BA25      OUT	0x15,R2
(0072) 	DDRC =0xf0;	  						//设置端口高4位输出,低四位输入
    008A EF80      LDI	R24,0xF0
    008B BB84      OUT	0x14,R24
(0073) 	PORTC=0x0f;							//低四位内部上拉
    008C E08F      LDI	R24,0xF
    008D BB85      OUT	0x15,R24
(0074) 	delay_nus(1);						//短暂延时
    008E E001      LDI	R16,1
    008F E010      LDI	R17,0
    0090 DFD3      RCALL	_delay_nus
(0075) 	i=PINC&0x0f;						//读取端口电平
    0091 B343      IN	R20,0x13
    0092 704F      ANDI	R20,0xF
(0076) 	if(i!=0x0f)							//判断是否有键按下
    0093 304F      CPI	R20,0xF
    0094 F0B1      BEQ	0x00AB
(0077) 	{
(0078) 	 	PORTC=0x00;
    0095 2422      CLR	R2
    0096 BA25      OUT	0x15,R2
(0079) 		DDRC =0x0f;						//设置端口低4位输出,高四位输入
    0097 E08F      LDI	R24,0xF
    0098 BB84      OUT	0x14,R24
(0080) 		PORTC=0xf0;						//高四位内部上拉
    0099 EF80      LDI	R24,0xF0
    009A BB85      OUT	0x15,R24
(0081) 		delay_nus(10);					//短暂延时,去抖
    009B E00A      LDI	R16,0xA
    009C E010      LDI	R17,0
    009D DFC6      RCALL	_delay_nus
(0082) 		if((PINC&0xf0)!=0xf0)			//再次判断是否有键按下
    009E B383      IN	R24,0x13
    009F 7F80      ANDI	R24,0xF0
    00A0 3F80      CPI	R24,0xF0
    00A1 F049      BEQ	0x00AB
(0083) 		{
(0084) 		 	i+=(PINC&0xf0);				//读取端口电平
    00A2 B383      IN	R24,0x13
    00A3 7F80      ANDI	R24,0xF0
    00A4 0F48      ADD	R20,R24
(0085) 			while((PINC&0xf0)!=0xf0);	//等待按键释放
    00A5 B383      IN	R24,0x13
    00A6 7F80      ANDI	R24,0xF0
    00A7 3F80      CPI	R24,0xF0
    00A8 F7E1      BNE	0x00A5
(0086) 			return i;					//返回键值
    00A9 2F04      MOV	R16,R20
    00AA C001      RJMP	0x00AC
(0087) 		}
(0088) 	}
(0089) 	return null;   						//无按键按下返回null
    00AB 2700      CLR	R16
    00AC 940E0457  CALL	pop_gset1
    00AE 9508      RET
_Key_Num:
  key                  --> R16
    00AF 940E0454  CALL	push_gset1
(0090) }
(0091) 
(0092) /*******************************************************/
(0093) /******   函数名称: Key_Num()                     ******/
(0094) /******   功    能: 转换键值为0-f十六进制数       ******/
(0095) /******   参    数: key--键值                     ******/
(0096) /******   返回值  : 0-f                           ******/
(0097) /*******************************************************/
(0098) unsigned char Key_Num(unsigned char key)
(0099) {
(0100)  	switch(key)
    00B1 2F40      MOV	R20,R16
    00B2 2755      CLR	R21
    00B3 3B47      CPI	R20,0xB7
    00B4 E0E0      LDI	R30,0
    00B5 075E      CPC	R21,R30
    00B6 F409      BNE	0x00B8
    00B7 C054      RJMP	0x010C
    00B8 3B4B      CPI	R20,0xBB
    00B9 E0E0      LDI	R30,0
    00BA 075E      CPC	R21,R30
    00BB F409      BNE	0x00BD
    00BC C057      RJMP	0x0114
    00BD 3B4D      CPI	R20,0xBD
    00BE E0E0      LDI	R30,0
    00BF 075E      CPC	R21,R30
    00C0 F409      BNE	0x00C2
    00C1 C05A      RJMP	0x011C
    00C2 3B4E      CPI	R20,0xBE
    00C3 E0E0      LDI	R30,0
    00C4 075E      CPC	R21,R30
    00C5 F409      BNE	0x00C7
    00C6 C05D      RJMP	0x0124
    00C7 EB8E      LDI	R24,0xBE
    00C8 E090      LDI	R25,0
    00C9 1784      CP	R24,R20
    00CA 0795      CPC	R25,R21
    00CB F0AC      BLT	0x00E1
    00CC 3747      CPI	R20,0x77
    00CD E0E0      LDI	R30,0
    00CE 075E      CPC	R21,R30
    00CF F409      BNE	0x00D1
    00D0 C03D      RJMP	0x010E
    00D1 374B      CPI	R20,0x7B
    00D2 E0E0      LDI	R30,0
    00D3 075E      CPC	R21,R30
    00D4 F409      BNE	0x00D6
    00D5 C040      RJMP	0x0116
    00D6 374D      CPI	R20,0x7D
    00D7 E0E0      LDI	R30,0
    00D8 075E      CPC	R21,R30
    00D9 F409      BNE	0x00DB
    00DA C043      RJMP	0x011E
    00DB 374E      CPI	R20,0x7E
    00DC E0E0      LDI	R30,0
    00DD 075E      CPC	R21,R30
    00DE F409      BNE	0x00E0
    00DF C046      RJMP	0x0126
    00E0 C047      RJMP	0x0128
    00E1 3D47      CPI	R20,0xD7
    00E2 E0E0      LDI	R30,0
    00E3 075E      CPC	R21,R30
    00E4 F129      BEQ	0x010A
    00E5 3D4B      CPI	R20,0xDB
    00E6 E0E0      LDI	R30,0
    00E7 075E      CPC	R21,R30
    00E8 F149      BEQ	0x0112
    00E9 3D4D      CPI	R20,0xDD
    00EA E0E0      LDI	R30,0
    00EB 075E      CPC	R21,R30
    00EC F169      BEQ	0x011A
    00ED 3D4E      CPI	R20,0xDE
    00EE E0E0      LDI	R30,0
    00EF 075E      CPC	R21,R30
    00F0 F409      BNE	0x00F2
    00F1 C030      RJMP	0x0122
    00F2 3D47      CPI	R20,0xD7
    00F3 E0E0      LDI	R30,0
    00F4 075E      CPC	R21,R30
    00F5 F40C      BGE	0x00F7
    00F6 C031      RJMP	0x0128
    00F7 3E47      CPI	R20,0xE7
    00F8 E0E0      LDI	R30,0
    00F9 075E      CPC	R21,R30
    00FA F069      BEQ	0x0108
    00FB 3E4B      CPI	R20,0xEB
    00FC E0E0      LDI	R30,0
    00FD 075E      CPC	R21,R30
    00FE F089      BEQ	0x0110
    00FF 3E4D      CPI	R20,0xED
    0100 E0E0      LDI	R30,0
    0101 075E      CPC	R21,R30
    0102 F0A9      BEQ	0x0118
    0103 3E4E      CPI	R20,0xEE
    0104 E0E0      LDI	R30,0
    0105 075E      CPC	R21,R30
    0106 F0C9      BEQ	0x0120
    0107 C020      RJMP	0x0128
(0101) 	{
(0102) 	 	case 0xe7:return 0;	   			//按键0
    0108 2700      CLR	R16
    0109 C01F      RJMP	0x0129
(0103) 		case 0xd7:return 1;				//按键1
    010A E001      LDI	R16,1
    010B C01D      RJMP	0x0129
(0104) 		case 0xb7:return 2;				//按键2
    010C E002      LDI	R16,2
    010D C01B      RJMP	0x0129
(0105) 		case 0x77:return 3;				//按键3
    010E E003      LDI	R16,3
    010F C019      RJMP	0x0129
(0106) 		case 0xeb:return 4;				//按键4
    0110 E004      LDI	R16,4
    0111 C017      RJMP	0x0129
(0107) 		case 0xdb:return 5;				//按键5
    0112 E005      LDI	R16,5
    0113 C015      RJMP	0x0129
(0108) 		case 0xbb:return 6;				//按键6
    0114 E006      LDI	R16,6
    0115 C013      RJMP	0x0129
(0109) 		case 0x7b:return 7;				//按键7
    0116 E007      LDI	R16,7
    0117 C011      RJMP	0x0129
(0110) 		case 0xed:return 8;				//按键8
    0118 E008      LDI	R16,0x8
    0119 C00F      RJMP	0x0129
(0111) 		case 0xdd:return 9;				//按键9
    011A E009      LDI	R16,0x9
    011B C00D      RJMP	0x0129
(0112) 		case 0xbd:return 10;			//按键A
    011C E00A      LDI	R16,0xA
    011D C00B      RJMP	0x0129
(0113) 		case 0x7d:return 11;			//按键B
    011E E00B      LDI	R16,0xB
    011F C009      RJMP	0x0129
(0114) 		case 0xee:return 12;			//按键C
    0120 E00C      LDI	R16,0xC
    0121 C007      RJMP	0x0129

⌨️ 快捷键说明

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