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

📄 1820.lst

📁 基于ATMEGA16的温度传感器原代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0115) 		case 0xde:return 13;			//按键D
    0122 E00D      LDI	R16,0xD
    0123 C005      RJMP	0x0129
(0116) 		case 0xbe:return 14;			//按键E
    0124 E00E      LDI	R16,0xE
    0125 C003      RJMP	0x0129
(0117) 		case 0x7e:return 15;			//按键F
    0126 E00F      LDI	R16,0xF
    0127 C001      RJMP	0x0129
(0118) 		default: return 16;				//无按键按下
    0128 E100      LDI	R16,0x10
    0129 940E0457  CALL	pop_gset1
    012B 9508      RET
_Display_One_SMG:
  data                 --> R22
  bit                  --> R20
    012C 940E0452  CALL	push_gset2
    012E 2F62      MOV	R22,R18
    012F 2F40      MOV	R20,R16
(0119) 	}
(0120) }		
(0121) /*******************************************************/
(0122) /******   函数名称: Display_One_SMG()             ******/
(0123) /******   功    能: 显示指定内容在指定位          ******/
(0124) /******   参    数: bit--位(1-8),              ******/
(0125) /******             data--显示内容(0-15,16为全灭)****/
(0126) /******   返回值  : 无                            ******/
(0127) /*******************************************************/
(0128) void Display_One_SMG(unsigned char bit,unsigned char data)
(0129) {
(0130) 	SMG=SMG_Conver[data];	  	   		//送显示数据
    0130 E584      LDI	R24,0x54
    0131 E090      LDI	R25,0
    0132 2FE6      MOV	R30,R22
    0133 27FF      CLR	R31
    0134 0FE8      ADD	R30,R24
    0135 1FF9      ADC	R31,R25
    0136 91E4      LPM	R30,0(Z)
    0137 BBE8      OUT	0x18,R30
(0131) 	Open_SMG_DATA;						//锁存数据
    0138 9ADB      SBI	0x1B,3
(0132) 	Close_SMG_DATA;					
    0139 98DB      CBI	0x1B,3
(0133) 	SMG=~BIT(bit);						//送位数据
    013A E001      LDI	R16,1
    013B 2F14      MOV	R17,R20
    013C 940E0488  CALL	lsl8
    013E 2E20      MOV	R2,R16
    013F 9420      COM	R2
    0140 BA28      OUT	0x18,R2
(0134) 	Open_SMG_BIT;						//锁存数据
    0141 9ADA      SBI	0x1B,2
(0135) 	Close_SMG_BIT;
    0142 98DA      CBI	0x1B,2
(0136) 	delay_nms(2);
    0143 E002      LDI	R16,2
    0144 E010      LDI	R17,0
    0145 DF2C      RCALL	_delay_nms
    0146 940E0446  CALL	pop_gset2
    0148 9508      RET
_Display_One_SMG_Point:
  bit                  --> R20
    0149 940E0454  CALL	push_gset1
    014B 2F40      MOV	R20,R16
(0137) }
(0138) /*******************************************************/
(0139) /******   函数名称: Display_One_SMG_Point()       ******/
(0140) /******   功    能: 显示小数点在指定位            ******/
(0141) /******   返回值  : 无                            ******/
(0142) /*******************************************************/
(0143) void Display_One_SMG_Point(unsigned char bit)
(0144) {
(0145) 	SMG=0x80;	  	   		  	   	   	//送显示数据
    014C E880      LDI	R24,0x80
    014D BB88      OUT	0x18,R24
(0146) 	Open_SMG_DATA;						//锁存数据
    014E 9ADB      SBI	0x1B,3
(0147) 	Close_SMG_DATA;					
    014F 98DB      CBI	0x1B,3
(0148) 	SMG=~BIT(bit);						//送位数据
    0150 E001      LDI	R16,1
    0151 2F14      MOV	R17,R20
    0152 940E0488  CALL	lsl8
    0154 2E20      MOV	R2,R16
    0155 9420      COM	R2
    0156 BA28      OUT	0x18,R2
(0149) 	Open_SMG_BIT;						//锁存数据
    0157 9ADA      SBI	0x1B,2
(0150) 	Close_SMG_BIT;
    0158 98DA      CBI	0x1B,2
(0151) 	delay_nms(2);
    0159 E002      LDI	R16,2
    015A E010      LDI	R17,0
    015B DF16      RCALL	_delay_nms
    015C 940E0457  CALL	pop_gset1
    015E 9508      RET
(0152) }
(0153) /*******************************************************/
(0154) /******   函数名称: En_Led()                      ******/
(0155) /******   功    能: 使能LED功能                   ******/
(0156) /******   参    数: 无                            ******/
(0157) /******   返回值  : 无                            ******/
(0158) /*******************************************************/
(0159) void En_Led(void)
(0160) {
(0161)  	DDRB=0xff;	 				//设置输出
_En_Led:
    015F EF8F      LDI	R24,0xFF
    0160 BB87      OUT	0x17,R24
(0162) 	PORTB=0xff;					//输出高电平
    0161 BB88      OUT	0x18,R24
(0163) 	Open_LED;					//打开LED功能
    0162 9ADC      SBI	0x1B,4
    0163 9508      RET
(0164) }
(0165) /*******************************************************/
(0166) /******   函数名称: Un_Led()                      ******/
(0167) /******   功    能: 关闭LED功能                   ******/
(0168) /******   参    数: 无                            ******/
(0169) /******   返回值  : 无                            ******/
(0170) /*******************************************************/
(0171) void Un_Led(void)
(0172) {
(0173)  	DDRB=0xff;	 				//设置输出
_Un_Led:
    0164 EF8F      LDI	R24,0xFF
    0165 BB87      OUT	0x17,R24
(0174) 	PORTB=0xff;					//输出高电平
    0166 BB88      OUT	0x18,R24
(0175) 	Open_LED;					//打开LED功能
    0167 9ADC      SBI	0x1B,4
(0176) 	Close_LED;					//关闭LED功能
    0168 98DC      CBI	0x1B,4
    0169 9508      RET
(0177) }
(0178) /*******************************************************/
(0179) /******   函数名称: Clear_SMG()                   ******/
(0180) /******   功    能: 关闭数码管功能                ******/
(0181) /******   参    数: 无                            ******/
(0182) /******   返回值  : 无                            ******/
(0183) /*******************************************************/
(0184) void Clear_SMG(void)
(0185) {
(0186)  	DDRB=0xff;	 				//设置输出
_Clear_SMG:
    016A EF8F      LDI	R24,0xFF
    016B BB87      OUT	0x17,R24
(0187) 	PORTB=0x00;					//输出高电平
    016C 2422      CLR	R2
    016D BA28      OUT	0x18,R2
(0188) 	Open_SMG_DATA;				//锁存数据
    016E 9ADB      SBI	0x1B,3
(0189) 	Close_SMG_DATA;
    016F 98DB      CBI	0x1B,3
(0190) 	Open_SMG_BIT;
    0170 9ADA      SBI	0x1B,2
(0191) 	Close_SMG_BIT;
    0171 98DA      CBI	0x1B,2
    0172 9508      RET
(0192) }
(0193) /*******************************************************/
(0194) /******   函数名称: Spi_Init()                    ******/
(0195) /******   功    能: 初始化SPI接口                 ******/
(0196) /******   参    数: 无                            ******/
(0197) /******   返回值  : 无                            ******/
(0198) /*******************************************************/
(0199) void Spi_Init(void)
(0200) {
(0201)  	unsigned char i;
(0202) 	DDRB|=0xb0;	  	   			//MISO输入MOSI,SCK,SS输出
_Spi_Init:
  i                    --> R16
    0173 B387      IN	R24,0x17
    0174 6B80      ORI	R24,0xB0
    0175 BB87      OUT	0x17,R24
(0203) 	DDRB&=~0x40;				
    0176 98BE      CBI	0x17,6
(0204) 	PORTB|=0x40;				//MISO上拉有效
    0177 9AC6      SBI	0x18,6
(0205) 	SPSR=0x01;					//SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
    0178 E081      LDI	R24,1
    0179 B98E      OUT	0x0E,R24
(0206) 	SPCR=0x50;
    017A E580      LDI	R24,0x50
    017B B98D      OUT	0x0D,R24
(0207) 	i=SPSR;
    017C B10E      IN	R16,0x0E
(0208) 	i=SPDR;						//清空SPI,和中断标志,使SPI空闲
    017D B10F      IN	R16,0x0F
    017E 9508      RET
(0209) }
(0210) /*******************************************************/
(0211) /******   函数名称: PutSPIchar()                  ******/
(0212) /******   功    能: 用SPI发送数据                 ******/
(0213) /******   参    数: data--待发的数据              ******/
(0214) /******   返回值  : 无                            ******/
(0215) /*******************************************************/
(0216) void PutSPIchar(char data)
(0217) {
(0218)  	SPDR=data;
_PutSPIchar:
  data                 --> R16
    017F B90F      OUT	0x0F,R16
(0219) 	while(!(SPSR&(1<<SPIF)));	//等待发送完毕
    0180 9B77      SBIS	0x0E,7
    0181 CFFE      RJMP	0x0180
    0182 9508      RET
(0220) }
(0221) /*******************************************************/
(0222) /******   函数名称: CPU_Init()                    ******/
(0223) /******   功    能: 初始化CPU端口                 ******/
(0224) /******   参    数: 无                            ******/
(0225) /******   返回值  : 无                            ******/
(0226) /*******************************************************/
(0227) void CPU_Init(void)
(0228) {
(0229)  	PORTB=0xff;
_CPU_Init:
    0183 EF8F      LDI	R24,0xFF
    0184 BB88      OUT	0x18,R24
(0230) 	DDRB=0xff;
    0185 BB87      OUT	0x17,R24
(0231) 	PORTA=0x80;				 		
    0186 E880      LDI	R24,0x80
    0187 BB8B      OUT	0x1B,R24
(0232) 	DDRA=0xdc;
    0188 ED8C      LDI	R24,0xDC
    0189 BB8A      OUT	0x1A,R24
(0233) 	DDRB=0x00;
    018A 2422      CLR	R2
    018B BA27      OUT	0x17,R2
(0234) 	PORTC=0xff;
    018C EF8F      LDI	R24,0xFF
    018D BB85      OUT	0x15,R24
(0235) 	DDRC=0x00;
    018E BA24      OUT	0x14,R2
(0236) 	PORTD=0xff;
    018F BB82      OUT	0x12,R24
(0237) 	DDRD=0x00;
    0190 BA21      OUT	0x11,R2
(0238) 	Un_Led();
    0191 DFD2      RCALL	_Un_Led
(0239) 	Clear_SMG();	
    0192 DFD7      RCALL	_Clear_SMG
    0193 9508      RET
_LCD_send_data:
  i                    --> R20
  data                 --> R16
    0194 940E0454  CALL	push_gset1
FILE: H:\bbi项目源程序\18b20温度传感器\LCD显示18B20\lcd.h
(0001) #define uchar unsigned char
(0002) #define uint unsigned int
(0003) /*******************************************************/
(0004) /******   函数名称: send_data ()                  ******/
(0005) /******   功    能: 写入字节数据                  ******/
(0006) /******                                           ******/
(0007) /******   参    数: uchar data                    ******/
(0008) /******   返回值  : 无                            ******/
(0009) /*******************************************************/
(0010) void LCD_send_data(uchar data)
(0011) {  
(0012)     unsigned char i;   			 	
(0013) 	for(i=0;i<8;i++)				//循环8次		
    0196 2744      CLR	R20
    0197 C009      RJMP	0x01A1
(0014) 	{								
(0015) 		PORTA&=~0x08;				//置低CLK
    0198 98DB      CBI	0x1B,3
(0016) 		if(data&0x80)				//判断数据极性
    0199 FF07      SBRS	R16,7
    019A C002      RJMP	0x019D
(0017) 		PORTA|=0X04;				//如果数据为1置高
    019B 9ADA      SBI	0x1B,2
    019C C001      RJMP	0x019E
(0018) 		else						
(0019) 		PORTA&=~0X04;				//否则置低
    019D 98DA      CBI	0x1B,2
(0020) 		data<<=1;					//右移一位
    019E 0F00      LSL	R16
(0021) 		PORTA|=0X08;				//置高CLK
    019F 9ADB      SBI	0x1B,3
    01A0 9543      INC	R20
    01A1 3048      CPI	R20,0x8
    01A2 F3A8      BCS	0x0198
    01A3 940E0457  CALL	pop_gset1
    01A5 9508      RET
_delay:
  i                    --> R20
  n                    --> R16
    01A6 940E0454  CALL	push_gset1
(0022) 		//delay_nus(1);
(0023) 		//PORTA&=~0X08;				//置低
(0024) 	}
(0025)  }
(0026) /*******************************************************/
(0027) /******   函数名称: wr_command(char)              ******/
(0028) /******   功    能: 向LCD写入控制字               ******/
(0029) /******                                           ******/
(0030) /******   参    数: com                           ******/
(0031) unsigned char ADtmp,ADbz=0;
(0032) #define LCD_DATAL PORTA&=~BIT(2)
(0033) #define LCD_DATAH PORTA|=BIT(2) 
(0034) #define LCD_CLKL PORTA&=~BIT(3)
(0035) #define LCD_CLKH PORTA|=BIT(3)
(0036) #define JP_CHK  PINA&BIT(4)
(0037) #define JP_CHK2  PINA&BIT(1)
(0038) void delay(unsigned char n)
(0039) {	 
(0040) 	 unsigned char i;
(0041)  	 for(i=0;i<n;i++)                //延时
    01A8 2744      CLR	R20
    01A9 C002      RJMP	0x01AC
(0042) 	 {asm("nop");}
    01AA 0000      NOP
    01AB 9543      INC	R20
    01AC 1740      CP	R20,R16
    01AD F3E0      BCS	0x01AA
    01AE 940E0457  CALL	pop_gset1
    01B0 9508      RET
_lcd_out:
  s                    --> Y+1
  i                    --> R20
  send_byte            --> R22
    01B1 940E0452  CALL	push_gset2
    01B3 2F60      MOV	R22,R16
(0043) }
(0044) //*************************************************************************
(0045) 
(0046) //***************************************************************************
(0047) void lcd_out(unsigned char send_byte)
(0048) {    
(0049)     unsigned char i,s;
(0050)  	for (i=0;i<8;i++)
    01B4 2744      CLR	R20
    01B5 C009      RJMP	0x01BF
(0051) 	{
(0052) 	 if((send_byte&0x80)==0)
    01B6 FD67      SBRC	R22,7
    01B7 C002      RJMP	0x01BA
(0053) 	 {
(0054) 	     LCD_DATAL;
    01B8 98DA      CBI	0x1B,2
(0055) 	 }
    01B9 C001      RJMP	0x01BB
(0056) 	 else
(0057) 	 {
(0058) 	     LCD_DATAH;
    01BA 9ADA      SBI	0x1B,2
(0059) 	 }      //送数据
(0060) 	 LCD_CLKL;
    01BB 98DB      CBI	0x1B,3
(0061) 	 LCD_CLKH;
    01BC 9ADB      SBI	0x1B,3
(0062) 	 send_byte=send_byte<<1;
    01BD 0F66      LSL	R22
    01BE 9543      INC	R20
    01BF 3048      CPI	R20,0x8
    01C0 F3A8      BCS	0x01B6
(0063) 	}
(0064) 	delay(256);
    01C1 E000      LDI	R16,0
    01C2 DFE3      RCALL	_delay
    01C3 940E0446  CALL	pop_gset2
    01C5 9508      RET
_WR_dat:
  s                    --> R20
  dat                  --> R22
    01C6 940E0452  CALL	push_gset2
    01C8 2F60      MOV	R22,R16
(0065) }
(0066) //***************************************************************************
(0067) 
(0068) void WR_dat(unsigned char dat)
(0069) {
(0070)      unsigned char s;
(0071) 	 s=dat&0xf0;
    01C9 2F46      MOV	R20,R22
    01CA 7F40      ANDI	R20,0xF0
(0072) 	lcd_out(0xfa);
    01CB EF0A      LDI	R16,0xFA
    01CC DFE4      RCALL	_lcd_out
(0073) 	 lcd_out(s);
    01CD 2F04      MOV	R16,R20
    01CE DFE2      RCALL	_lcd_out
(0074) 	 s=dat&0x0f;
    01CF 2F46      MOV	R20,R22
    01D0 704F      ANDI	R20,0xF
(0075) 	 s<<=4;
    01D1 2F84      MOV	R24,R20
    01D2 708F      ANDI	R24,0xF
    01D3 9582      SWAP	R24

⌨️ 快捷键说明

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