亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lm75.c

?? 基于AVRETH1的最新網(wǎng)絡軟件
?? C
字號:
/*,-----------------------------------------------------------------------------------------.| io/lm75|-----------------------------------------------------------------------------------------| this file supports temperature reading of an i2c temp sensor| - supports LM75 & clones, adjust LM75_DEVICE_ID in config.h !!| - does not check for ACK/NACK/ERROR !|| Author   : {{removed according to contest rules}}|            -> circuitcellar.com avr design contest 2006|            -> Entry #AT2616||-----------------------------------------------------------------------------------------| License:| This program is free software; you can redistribute it and/or modify it under| the terms of the GNU General Public License as published by the Free Software| Foundation; either version 2 of the License, or (at your option) any later| version.| This program is distributed in the hope that it will be useful, but|| WITHOUT ANY WARRANTY;|| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR| PURPOSE. See the GNU General Public License for more details.|| You should have received a copy of the GNU General Public License along with| this program; if not, write to the Free Software Foundation, Inc., 51| Franklin St, Fifth Floor, Boston, MA 02110, USA|| http://www.gnu.de/gpl-ger.html`-----------------------------------------------------------------------------------------*/#include "lm75.h"#include "main.h"//ACTIVATE DEBUG by editing this file:#include "debug.h"#include <avr/delay.h>#define LM75_READ  1#define LM75_WRITE 0#define LM75_STATE_IDLE            0#define LM75_STATE_DEVICE_ADDRESS  1#define LM75_STATE_WRITE_CMD0      2#define LM75_STATE_START2          3#define LM75_STATE_DEVICE_ADDRESS2 4#define LM75_STATE_DATA_HI         5#define LM75_STATE_DATA_LO         6#define LM75_STATE_STOP            7#define LM75_STATE_ERROR           8#define LM75_ANSWER_START         0x08#define LM75_ANSWER_RESTART       0x10#define LM75_ANSWER_SLAVE_W_ACK   0x18#define LM75_ANSWER_SLAVE_R_ACK   0x40#define LM75_ANSWER_DATA_ACK      0x28#define LM75_ANSWER_DATA_NACK     0x58volatile unsigned char lm75_state;volatile unsigned int lm75_temp_tmp;void lm75_init(void) {	//initialize TWI clock: TWPS = 0 => prescaler = 1 	#if defined(TWPS0)		//has prescaler (mega128 & newer)		TWSR = 0;//0;	#endif	//slow...	TWBR = 20; //f(SCL) = F_CPU / (16+2*TWBR)*4^TWPS)	lm75_state = LM75_STATE_IDLE;	lm75_temp_tmp = (32<<1);}//do a nonblocking read. this function must be called// ? times in order to read a value.// returns 1 if new value measured, otherwise 0unsigned char lm75_nonblocking_temp_read(unsigned char *data){	unsigned char retval = 0;	switch(lm75_state){		//send start cmd & wait for TWI to send it:		case(LM75_STATE_IDLE):			lm75_send_start();			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_START)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_DEVICE_ADDRESS;			break;		//send device address:		case(LM75_STATE_DEVICE_ADDRESS):			lm75_send_device_address(LM75_DEVICE_ID | LM75_WRITE);			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_SLAVE_W_ACK)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_WRITE_CMD0;			break;		//send "set temp pointer" cmd		case(LM75_STATE_WRITE_CMD0):			lm75_send_byte(0x00);			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_DATA_ACK)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_START2;			break;		//send a second start:		case(LM75_STATE_START2):			lm75_send_start();			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_RESTART)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_DEVICE_ADDRESS2;			break;		//send address again:		case(LM75_STATE_DEVICE_ADDRESS2):			lm75_send_device_address(LM75_DEVICE_ID | LM75_READ);			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_SLAVE_R_ACK)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_DATA_HI;			break;		//read data hi:		case(LM75_STATE_DATA_HI):			lm75_temp_tmp = (lm75_read()<<8);			//check for error:			if ((TWSR & 0xF8) != LM75_ANSWER_DATA_NACK)				lm75_state = LM75_STATE_ERROR; 			else				lm75_state = LM75_STATE_DATA_LO;			break;		//read data lo:		case(LM75_STATE_DATA_LO):			lm75_temp_tmp |= lm75_read();			//is temp negative ? -> convert			if (lm75_temp_tmp&0x8000){				//convert from 2s complement:				lm75_temp_tmp = (0xFFFF-lm75_temp_tmp)|0x8000;			}						//tttt tttt t000 0000 -> 0000 000t tttt tttt			lm75_temp_tmp = lm75_temp_tmp>>7;			//now convert temperature to an 8 bit value.			//-> we are interested in -32.0 to +96.5 degrees			lm75_temp_tmp = lm75_temp_tmp + (32<<1);			//limit range 1:			if (lm75_temp_tmp < 0)				lm75_temp_tmp = 0;			//limit range 2:			if (lm75_temp_tmp >= 255){				lm75_temp_tmp = 255;				return 0;			}/*			//convert to temp vale. 205 = 20.5 °C			//tttt tttt t000 0000 -> 0000 000t tttt tttt			lm75_temp_tmp = lm75_temp_tmp>>7;			//convert to temp vale. 205 = 20.5 °C			(*data) = ((lm75_temp_tmp>>1)&0x007F)*10; 				//add 0.5°C step:			if (lm75_temp_tmp&0x0001)				*data = (*data) + 5;			//is temp negative ?			if (lm75_temp_tmp&0x0100)				*data = -(*data);*/			(*data) = (lm75_temp_tmp)&0xFF;			//success:			retval = 1;			//dont check for error, next state is always stop:		case(LM75_STATE_STOP):		default:			lm75_send_stop();			lm75_state = LM75_STATE_IDLE; 			break;		case(LM75_STATE_ERROR):			#if LM75_DEBUG				softuart_puts_progmem("LM75: error in state ");				softuart_put_uint8(lm75_state);				softuart_puts_progmem(" TWSR=");				softuart_put_uint8(TWSR);				softuart_putnewline();			#endif			lm75_state = LM75_STATE_STOP;	}	return retval;}void lm75_send_start(){	//start cond.	TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);	while (!(TWCR & (1 << TWINT)));}void lm75_send_stop(){	//stop condition	TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);}void lm75_send_device_address(unsigned char addr){	//send device address (including pge offset + write/read flag)	TWDR = addr;	TWCR = (1 << TWINT) | (1 << TWEN);	while (!(TWCR & (1 << TWINT)));}void lm75_send_byte(unsigned char byte){	TWDR = byte;	TWCR = (1 << TWINT) | (1 << TWEN);	while (!(TWCR & (1 << TWINT)));}unsigned char lm75_read(){	//start read transmission	TWCR = (1 << TWINT) | (1 << TWEN);	while (!(TWCR & (1 << TWINT)));	return TWDR;}void lm75_write(unsigned char data){	//load byte to data reg and start transmission	TWDR = data;	TWCR = (1 << TWINT) | (1 << TWEN);	while (!(TWCR & (1 << TWINT)));}/*int lm75_read_temp(){	unsigned int res;	int tmp;	//send start	lm75_send_start();return 0;	//send device address 	lm75_send_device_address(LM75_DEVICE_ID | LM75_WRITE);		//send lm75 pointer cmd for temp	lm75_send_byte(0x00);	//send start	lm75_send_start();	//send device address	lm75_send_device_address(LM75_DEVICE_ID | LM75_READ);		//read data hi:	res = (lm75_read()<<8);		//read data_lo	res |= lm75_read();	//tttt tttt t000 0000 -> 0000 000t tttt tttt	res = res>>7;	//convert to temp vale. 205 = 20.5 °C	tmp = ((res>>1)&0x007F)*10; 		//add 0.5°C step:	if (res&0x0001)		tmp = tmp + 5;	//is temp negative ?	if (res&0x0100)		tmp = -tmp;		//stop	lm75_send_stop();	return tmp;}	*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看亚洲精品| 丁香五精品蜜臀久久久久99网站 | 国产精品欧美经典| 国产盗摄视频一区二区三区| 国产欧美日韩亚州综合| 成人午夜免费视频| 亚洲精品免费看| 欧美高清www午色夜在线视频| 欧美aⅴ一区二区三区视频| 日韩欧美高清dvd碟片| 久久精品久久99精品久久| 久久久五月婷婷| av不卡一区二区三区| 亚洲国产精品麻豆| 日韩精品一区二区三区在线播放 | 精品久久久久香蕉网| 国产成人午夜视频| 亚洲免费观看高清完整版在线观看 | 免费人成黄页网站在线一区二区 | 国产成人一区在线| 亚洲欧美日韩国产综合| 欧美日韩你懂的| 国产精品一区二区黑丝| 亚洲综合久久久| 精品成人免费观看| 91在线观看视频| 欧美bbbbb| 亚洲日本中文字幕区| 日韩欧美中文一区二区| 成人av在线一区二区三区| 偷拍一区二区三区四区| 久久久一区二区三区捆绑**| 欧美在线色视频| 国产一区二区伦理| 亚洲与欧洲av电影| 亚洲一区免费观看| 国产欧美一区二区精品秋霞影院| 色av成人天堂桃色av| 久草这里只有精品视频| 亚洲午夜在线电影| 亚洲国产成人在线| 欧美一区二区三区色| 92精品国产成人观看免费 | 欧美激情一区二区三区蜜桃视频| 欧美日精品一区视频| 粉嫩欧美一区二区三区高清影视| 亚洲国产精品久久久久秋霞影院 | 国产乱人伦偷精品视频免下载| 亚洲人123区| 久久青草国产手机看片福利盒子| 3d动漫精品啪啪一区二区竹菊| 成人精品免费看| 国产一区二区主播在线| 爽好久久久欧美精品| 亚洲激情欧美激情| 中文字幕在线播放不卡一区| 精品日韩欧美在线| 91精品免费在线观看| 91传媒视频在线播放| 岛国av在线一区| 国产精品影音先锋| 狠狠色丁香久久婷婷综| 亚洲va韩国va欧美va| 亚洲三级在线看| 中文字幕亚洲区| 国产精品久久久久久久久免费丝袜 | 国产福利视频一区二区三区| 蜜臀精品久久久久久蜜臀| 调教+趴+乳夹+国产+精品| 亚洲男人都懂的| 国产精品国产自产拍高清av王其| 国产亚洲午夜高清国产拍精品 | 国产精品一区不卡| 国产精品一级在线| 国产成a人无v码亚洲福利| 久久精品国产亚洲aⅴ | 激情五月婷婷综合| 久久国产精品免费| 久草这里只有精品视频| 久久99国产精品麻豆| 黄网站免费久久| 国产一区二区在线观看视频| 精品亚洲porn| 国产麻豆精品theporn| 国产成人免费9x9x人网站视频| 国产成人综合在线| 丁香六月久久综合狠狠色| 99亚偷拍自图区亚洲| 91免费精品国自产拍在线不卡| 91丨porny丨户外露出| 欧美中文字幕亚洲一区二区va在线 | 国产成人欧美日韩在线电影| 粗大黑人巨茎大战欧美成人| av在线一区二区| 色美美综合视频| 欧美日韩一级二级| 日韩美女视频在线| 国产日韩精品一区二区三区| 国产精品久久久久久久浪潮网站| 亚洲视频电影在线| 婷婷久久综合九色综合绿巨人| 美日韩一级片在线观看| 国产精品一级黄| 91福利视频网站| 欧美一区二区福利在线| 精品成人佐山爱一区二区| ●精品国产综合乱码久久久久| 一区二区久久久久久| 乱一区二区av| 成人福利视频在线| 欧美高清视频在线高清观看mv色露露十八| 日韩午夜中文字幕| 国产精品人人做人人爽人人添 | 免费成人小视频| 成人久久视频在线观看| 欧美天堂亚洲电影院在线播放| 日韩女优视频免费观看| 中文字幕中文字幕中文字幕亚洲无线| 一区二区久久久久| 国产在线视视频有精品| 色噜噜久久综合| 久久综合网色—综合色88| 一区二区三区四区激情| 国产一区二区三区精品视频| 91黄色在线观看| 国产欧美日韩三级| 免费在线观看视频一区| 一本色道综合亚洲| 久久婷婷国产综合国色天香| 午夜精品国产更新| av不卡一区二区三区| 精品欧美一区二区三区精品久久| 亚洲激情成人在线| 国产精品99久久久久久宅男| 欧美精品免费视频| 亚洲免费电影在线| 成人h动漫精品一区二| 精品福利av导航| 日韩影院精彩在线| 欧美午夜精品一区二区蜜桃 | 亚洲少妇30p| 国产成人精品三级| 精品日韩在线一区| 日本不卡视频一二三区| 一本到高清视频免费精品| 久久精品视频网| 麻豆精品一二三| 欧美一二区视频| 午夜电影网一区| 欧美日韩在线观看一区二区| 亚洲视频在线观看一区| 国产成人在线网站| www激情久久| 国产一区二区三区香蕉| 欧美成人女星排名| 日韩电影免费在线看| 中文一区一区三区高中清不卡| 精品午夜一区二区三区在线观看| 欧美男男青年gay1069videost| 亚洲人成在线播放网站岛国| 成人激情免费网站| 国产精品天天摸av网| 成人国产精品免费观看视频| 国产欧美日本一区视频| 国产一本一道久久香蕉| 国产日韩欧美精品电影三级在线| 国产一区福利在线| 久久久久国产一区二区三区四区| 国产精品一区二区免费不卡| 久久久久九九视频| 国产风韵犹存在线视精品| 中文一区一区三区高中清不卡| www.欧美亚洲| 亚洲免费在线观看视频| 欧洲精品在线观看| 亚洲国产成人va在线观看天堂 | 9191久久久久久久久久久| 亚洲成人在线免费| 日韩欧美你懂的| 国内成人免费视频| 国产精品伦一区二区三级视频| av不卡在线观看| 午夜久久久久久电影| 日韩视频在线观看一区二区| 精品一区二区成人精品| 欧美国产1区2区| 色哟哟一区二区三区| 日韩国产高清影视| 久久无码av三级| 91麻豆精品在线观看| 天使萌一区二区三区免费观看| 欧美电影免费观看高清完整版在线 | 日本一区二区视频在线| 色一情一乱一乱一91av| 日韩中文字幕1| 国产欧美日韩不卡| 欧美午夜影院一区| 国产一区二区三区高清播放| 亚洲欧美乱综合| 日韩一级片网址|