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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? temperature.c

?? c8051f020使用18B20采集數(shù)據(jù)
?? C
字號:
#include "c8051f020.h"
#include "stdio.h"
#include "intrins.h"
#define READ_ROM 0x33         //讀ROM
#define MATCH_ROM 0x55        //匹配ROM
#define SKIP_ROM 0xcc         //跳過ROM
#define SEARCH_ROM 0xf0       //搜索ROM
#define ALARM_SEARCH 0xec     //ROM發(fā)出警告
#define CONVERT_T 0x44        //啟動溫度轉(zhuǎn)化
#define READ_SRAM 0xbe        //讀暫存存儲器
#define WRITE_SRAM 0x4e       //寫暫存存儲器
#define COPY_SRAM 0x48        //拷貝暫存存儲器內(nèi)容
#define RECALL_E2RAM 0xb8     //重新調(diào)用E2RAM
#define READ_POWER 0xb4       //讀電源方式
#define SYSCLK	25000000	
#define BAUDRATE 9600			//波特率默認為9600
#define BUFSIZE 256
#define RX0BUFSIZE	256		//緩沖區(qū)默認為256字節(jié)
#define TX0BUFSIZE	256

bit symbol=0;                 //溫度的正負號 symbol=0 為正;symbol=1 為負
sbit Ds18b20_DQ=P0^4;
unsigned char SN[8];




unsigned char Rx0Buf[RX0BUFSIZE],Tx0Buf[TX0BUFSIZE];//串口0接收和發(fā)送緩沖區(qū)
int Rx0In, Rx0Out, Tx0In, Tx0Out;	//循環(huán)緩沖區(qū)指針
int Tx0Count;	//已發(fā)送的字節(jié)數(shù)


void Close_WDG(void);
void SYSCLK_Init(void);
void UART_Init(void);
void DispLED(char *DispBuf,char ShowDot); 
void startConvertT(void);
unsigned int getT_matchDs18b20(char ID);
bit getSymbol();
void readSN(unsigned char SN[]);
void UART0_Init(void);
int ReadCom(char * buf, int num);
int WriteCom(char * buf, int num);


/*****************************************
*串口0讀取函數(shù)
*第一個參數(shù):指向讀回的字符串存放的位置的指針
*第二個參數(shù):要讀取的字符個數(shù)
*返回成功讀取的字符個數(shù)
*****************************************/
int ReadCom(unsigned char * buf, int num)
{
	int count = 0;
	while ((Rx0In != Rx0Out) && (count != num))
	{
        buf[count] = Rx0Buf[Rx0Out];
		Rx0Out = (Rx0Out + 1) % RX0BUFSIZE;
		count ++;
	}
	return count;
}

/*****************************************
*串口0發(fā)送函數(shù)
*第一個參數(shù):要發(fā)送的字符串的首地址(指向要發(fā)送的字符串的指針)
*第二個參數(shù):要發(fā)送的字節(jié)個數(shù)
*返回成功讀取的字符個數(shù)
*****************************************/
int WriteCom(unsigned char * buf, int num)
{
	int count = 0;
	long i = 0;
	if(num != 0)
	{
 		 for (count = 0; count < num; count ++)
		{        
			Tx0Buf[Tx0In] = buf[count];

			if((Tx0In + 1) % TX0BUFSIZE == Tx0Out)	//the buffer is full
				Tx0Out = (Tx0Out + 1) % TX0BUFSIZE;	//replace the oldest data
			Tx0In = (Tx0In + 1) % TX0BUFSIZE;
	 	}
//begin to transmit
		REN0 = 0;

		TI0 = 1;
		Tx0Count = 0;
		while((Tx0In != Tx0Out) && (i < 60000000))	//wait for all the datas in transmit buffer sent out; or overtime 
			i ++;	
	
//transmit has completed	

		REN0 = 1;
	}
	else{}
	
	return Tx0Count;
}

//串口0中斷服務程序
void UART0_ISR(void) interrupt 4
{

	if (RI0 == 1) 				// handle receive function
	{                     
 		RI0 = 0;               // clear RX complete indicator
		Rx0Buf[Rx0In] = SBUF0;

		if((Rx0In + 1) % RX0BUFSIZE == Rx0Out) //如果滿 則覆蓋以前的數(shù)據(jù) 
			Rx0Out = (Rx0Out + 1) % RX0BUFSIZE; //保證有效數(shù)據(jù)的位數(shù)
		Rx0In = (Rx0In + 1) % RX0BUFSIZE;
	}
	else if(TI0 == 1)
	{
   		TI0 = 0;
   		if( Tx0Out != Tx0In )		//Transmit Buffer is not empty	
   		{
   			SBUF0 = Tx0Buf[Tx0Out];
   			Tx0Out = (Tx0Out + 1) % TX0BUFSIZE;
			Tx0Count ++;		//calculate the number of the bytes having been sent
   		}
   		else{}					//Transmit buffer is empty, do nothing
   	}   
}



// 串口初始化函數(shù)
void UART0_Init()
{
	//初始化緩沖區(qū)
	Rx0In = Rx0Out = 0;
	Tx0In = Tx0Out = 0;		
	//波特率初始化 使用timer1,兩個串口波特率相同
	TMOD |= 0x20;				// timer1, mode2, 8-bit reload
	TH1 = -(SYSCLK/BAUDRATE/16);// set Timer1 reload value for baudrate
    //TL1 = TH1;
	CKCON |= 0x10;		// Timer1 uses SYSCLK as time base
	PCON |= 0x80;		// SMOD0 = 1;禁止UART0波特率/2功能
	TR1 = 1;				// start Timer1

 	//交叉開關(guān)分配
 	XBR0 |= 0x04; //UART0允許 RX0,TX0連到兩端口上
 	XBR2 |= 0x40; //交叉開關(guān)允許
	P0MDOUT |= 0x03;
	P0 = 0;
  
	SCON0 = 0x50;   //UART0為方式1:8位,波特率由定時器1決定
	T2CON &= ~(0x30);	// use timer1 as bautrate generator 

	ES0 	= 1;        //允許串口0中斷
	
}




void main(void)
{
  long temperature=0;
  unsigned int feedbackT;
  unsigned char led[6];
  bit sign;
  int i;

  int count;
//	unsigned char getchar[256];  

  Close_WDG();//關(guān)閉看門狗
  SYSCLK_Init();//系統(tǒng)時鐘初始化
  UART0_Init(); 		// 串口初始化函數(shù)
	EA = 1;

  UART_Init();//串口初始化
  readSN(SN); //讀取DS18B20序列號,寫入SN[]
  while(1)
	{
		temperature=0;
   	for(i=0;i<40;i++)
   	{
  	startConvertT(); //開始溫度轉(zhuǎn)換
  	feedbackT=getT_matchDs18b20(0);//獲取溫度值
		sign =getSymbol();//獲取溫度的正、負
		if(sign)
      temperature -=feedbackT;
		else 
	    temperature +=feedbackT;
		}
 		sprintf(led,"%6d",(int)(temperature/40));
				count = WriteCom(led, sizeof(led));
		DispLED(led,3);

 	}

}

void Delay1us(int us)    //延時us毫秒
{
	while (us)
	{
	  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
	  --us;
	}
}

//發(fā)復位脈沖
//返回: 0-有設(shè)備連接    1-無設(shè)備連接
bit resetDs18b20(void)  
{
    unsigned char i;
    bit RstFlag;
	RstFlag=1;	
	Ds18b20_DQ=0;
	Delay1us(600);
	Ds18b20_DQ=1;
	Delay1us(60);	//15us-60us
	for (i=0;i<16;i++)	//60us-240us
	{
		Delay1us(15);
		if (Ds18b20_DQ==0) RstFlag=0;
	}
	Delay1us(240);	//240us
	return RstFlag;	
}

//向DS18b20寫一個字節(jié)ch 
void writeByteToDs18b20(unsigned char ch)
{
    unsigned char i;
	Ds18b20_DQ=1;
	Delay1us(1);
	for (i=0;i<8;i++)
	{
		Ds18b20_DQ=0;
		Delay1us(15);
		Ds18b20_DQ=ch&0x1;

		Delay1us(45);
		Ds18b20_DQ=1;
		ch=ch>>1;
		Delay1us(1);
	}	
}

//接收DS18b20傳送來的一個字節(jié)并返回
unsigned char readByteFromDs18b20(void)
{
    unsigned char i,ch;
	ch=0;
	Ds18b20_DQ=1;
	Delay1us(1);
	for (i=0;i<8;i++)
	{
		Ds18b20_DQ=0;
		Delay1us(10);
		Ds18b20_DQ=1;
		Delay1us(2);
		ch=ch>>1;
		if (Ds18b20_DQ==1)
		{
			ch=ch+0x80;
		}
		Delay1us(45);
	}	
	return ch;
}

//跳過ROM區(qū)
void skipROMCode(void)
{
	resetDs18b20();
	writeByteToDs18b20(SKIP_ROM); 
}

//啟動DS18b20的溫度轉(zhuǎn)化功能
void startConvertT(void)
{

	resetDs18b20();		//復位
	writeByteToDs18b20(SKIP_ROM);  //廣播
	writeByteToDs18b20(CONVERT_T); 	//啟動AD轉(zhuǎn)換12bit700ms
}

//讀取DS18b20的序列號,更新SN[]
void readSN(unsigned char SN[])
{
  char i;
  while(resetDs18b20());
  writeByteToDs18b20(READ_ROM);  //讀取ROM
  for(i=0;i<8;i++)
  {
   SN[i]=readByteFromDs18b20();
  } 
}

//發(fā)送序列號并匹配
void matchDs18b20(char ID)
{
  unsigned char i;
  writeByteToDs18b20(MATCH_ROM);  //匹配ROM
  for ( i = 0; i < 8; i++ ) 
    writeByteToDs18b20(SN[i]);
}

//獲取溫度值
unsigned int getTempValue(void)
{
    unsigned char low,high;
    unsigned int T;

	writeByteToDs18b20(READ_SRAM);
	low=readByteFromDs18b20();
	high=readByteFromDs18b20();
    
    T =low+high*256;
    if((high & 0xf8)!=0)
	  symbol=1;
	else symbol=0;
	if(symbol)      //溫度為負
      T =-T;
    T =T&0x07ff;
    T =(T/16.0)*100;
	return T;
}

//讀取與指定的DS18b20相匹配的溫度值
unsigned int getT_matchDs18b20(char ID)
{
  unsigned int T;
  int i;
  
  for(i=0;i<30000;i++);//延時等待轉(zhuǎn)換結(jié)束

  resetDs18b20();      //復位
  skipROMCode();
  writeByteToDs18b20(CONVERT_T);
  Delay1us(2);         //2us
  
  resetDs18b20();      //復位
  matchDs18b20(ID);
  T=getTempValue();
  return(T);
}

//返回溫度的正負號
bit getSymbol()
{
  return symbol;
}
void UART_Init(void)
{
  //初始化緩沖區(qū)
	Rx0In = Rx0Out = 0;
	Tx0In = Tx0Out = 0;		
	//波特率初始化 使用timer1,兩個串口波特率相同
	TMOD |= 0x20;				// timer1, mode2, 8-bit reload
	TH1 = -(SYSCLK/BAUDRATE/16);// set Timer1 reload value for baudrate
    //TL1 = TH1;
	CKCON |= 0x10;		// Timer1 uses SYSCLK as time base
	PCON |= 0x80;		// SMOD0 = 1;禁止UART0波特率/2功能
	TR1 = 1;				// start Timer1


  XBR0=0x04;
  XBR2=0x44;
  SCON1=0x00;
  P0MDOUT=0xFF;

  SCON0 = 0x50;   //UART0為方式1:8位,波特率由定時器1決定
	T2CON &= ~(0x30);	// use timer1 as bautrate generator 

	ES0 	= 1;        //允許串口0中斷
}
/*********************************************************
           功能:在六位數(shù)碼管顯示要求的字符串 含標點
       *DispBuf:要顯示的字符串,長度為6
        ShowDot:標點的位置
              0:不顯示
           1~6:標點顯示在數(shù)碼管的對應位 
*********************************************************/
unsigned char code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,
0xf6,0xee,0x3e,0x9a,0x7c,0x9e,0x8e,0x04,0x00};
void DispLED(char *DispBuf,char ShowDot)//ShowDot 顯示小數(shù)點位 
{
    char ch;
	int i=0,j;
	ShowDot=6-ShowDot;       //顯示小數(shù)點
	SCON1=0x20;
	for(i=5;i>=0;i--)
	{
	    ch=DispBuf[i]; 
		if ((ch>='a') && (ch<='f'))  //轉(zhuǎn)換ASCII碼為對應段碼
		{  ch-='a';ch+=10;}
		else if ((ch>='A') && (ch<='F'))
		{  ch-='A';ch+=10;}
		else if ((ch>='0') && (ch<='9'))
	       ch-='0';
		else if (ch=='-')            //顯示負號
		   ch=16;
		else 
		   ch=17;   
		if (i==ShowDot)           //顯示小數(shù)點
		   SBUF1=table[ch]+1;
		else
		   SBUF1=table[ch];
	    for(j=0;j<255;j++);    //延時
		if(i==0)                //清除串口中斷
		   SCON1=0;
	} 
}

/*****************************************
	Function:initiate the system clock
*****************************************/
void SYSCLK_Init(void)
{
	int i;
	OSCXCN=0x67;           // start external oscillator with 22.1184MHz crystal
 	for(i=0;i<256;i++);    // XTLVLD blanking interval (>1ms)
	while(!(OSCXCN&0x80)); // Wait for crystal osc. to settle
	OSCICN=0x88;           // select external oscillator as SYSCLK 
							// source and enable missing clock
}
void Close_WDG()
{      
  WDTCN=0xde;        // disable watchdog timer
  WDTCN=0xad;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩综合不卡| 中文字幕一区二区三| 亚洲va国产va欧美va观看| 亚洲精品国久久99热| 日韩av电影免费观看高清完整版在线观看 | 99国产欧美另类久久久精品| 欧美韩日一区二区三区| 成人黄色小视频| 中文字幕欧美一| 欧美亚洲国产一区二区三区 | 精品一区二区三区久久久| 欧美剧情电影在线观看完整版免费励志电影 | 91视频com| 日韩精品一卡二卡三卡四卡无卡| 69久久夜色精品国产69蝌蚪网| 亚洲国产综合人成综合网站| 欧美日韩久久久一区| 日韩av午夜在线观看| 日韩精品一区二区三区在线观看 | 欧美日韩中文字幕一区| 亚洲国产精品麻豆| 久久久亚洲精品一区二区三区| 国产精品一区二区不卡| 樱桃视频在线观看一区| 337p日本欧洲亚洲大胆精品| caoporm超碰国产精品| 香蕉av福利精品导航| 国产精品女主播在线观看| 欧美日韩日日摸| 国产高清成人在线| 午夜欧美大尺度福利影院在线看| xf在线a精品一区二区视频网站| 成人三级在线视频| 久久99久久99精品免视看婷婷| 亚洲欧洲综合另类在线| 国产色一区二区| 51久久夜色精品国产麻豆| 91在线观看美女| 国产福利精品一区二区| 久久国产精品区| 日韩在线卡一卡二| 午夜av一区二区| 亚洲精品免费一二三区| 国产精品乱码人人做人人爱 | 欧美一激情一区二区三区| 91福利在线看| 欧美亚洲动漫另类| 91搞黄在线观看| 欧美吞精做爰啪啪高潮| 在线视频一区二区三区| 色综合久久中文综合久久牛| 国产电影一区二区三区| 成人一区二区三区中文字幕| 国产一区二区电影| 久久精品久久综合| 国产一区二区视频在线| 青青国产91久久久久久 | 亚洲小少妇裸体bbw| 日韩电影在线免费看| 亚欧色一区w666天堂| 日韩av午夜在线观看| 国产在线视频精品一区| 国产成人av电影在线播放| va亚洲va日韩不卡在线观看| 91浏览器打开| 日韩欧美国产系列| 国产欧美日韩亚州综合| 亚洲精品高清视频在线观看| 午夜在线电影亚洲一区| 黄色资源网久久资源365| 国产成人精品免费视频网站| 一本久久a久久免费精品不卡| 91福利社在线观看| 久久人人爽爽爽人久久久| 亚洲品质自拍视频网站| 国产在线视频一区二区三区| 色综合天天天天做夜夜夜夜做| 91精品国产91久久综合桃花| 欧美激情一区二区三区不卡| 偷拍一区二区三区四区| 高清国产午夜精品久久久久久| 欧美卡1卡2卡| 亚洲欧美日韩精品久久久久| 国产专区综合网| 日韩免费视频一区二区| 亚洲第一主播视频| 成人免费的视频| 26uuu亚洲综合色| 日韩精品成人一区二区三区| 色哟哟国产精品| 国产精品久久毛片a| 国产精品一色哟哟哟| 日韩视频永久免费| 免费成人在线播放| 欧美一区二区三区成人| 美洲天堂一区二卡三卡四卡视频| 91久久香蕉国产日韩欧美9色| 国产精品久久久久aaaa| 成人毛片视频在线观看| 国产日韩欧美高清| 粉嫩av一区二区三区| 久久久美女毛片| 国产成a人亚洲精| 欧美国产乱子伦| 色哟哟在线观看一区二区三区| 国产精品午夜电影| 99视频精品免费视频| 中文字幕在线一区免费| 色综合久久综合网欧美综合网| 亚洲色图都市小说| 欧美日本视频在线| 日韩国产在线观看一区| 久久久久国产精品人| 欧美日韩视频一区二区| 免费看日韩精品| 欧美激情一区二区| 欧美电影一区二区| 国产一区二区不卡| 亚洲综合小说图片| 久久久久久久一区| 欧美视频在线一区| 国产老肥熟一区二区三区| 亚洲柠檬福利资源导航| 日韩视频123| 色婷婷精品久久二区二区蜜臀av| 蜜臀久久99精品久久久久宅男| 日本一区二区三区在线不卡 | 欧美在线观看18| 极品美女销魂一区二区三区| 亚洲欧美偷拍三级| 久久男人中文字幕资源站| 欧美日韩精品一区二区三区| 国产盗摄女厕一区二区三区| 人禽交欧美网站| 亚洲一区二区三区视频在线| 国产欧美久久久精品影院| 日韩一区二区三区免费观看| 99精品视频一区二区三区| 国产美女久久久久| 精品一区二区三区在线观看| 亚洲成人自拍偷拍| 亚洲一区二区三区视频在线播放 | 亚洲一区免费视频| 日本中文字幕一区二区视频| 国产精品久久久久久久午夜片| 在线观看91视频| 亚洲一区二区三区国产| 国产精品久久看| 色综合亚洲欧洲| 极品尤物av久久免费看| 欧美精品一区二区三区高清aⅴ| 欧美在线视频日韩| 91久久精品一区二区三区| 99热精品国产| 欧美午夜精品一区二区蜜桃| 色婷婷综合久久久久中文一区二区 | 97精品久久久午夜一区二区三区 | 久久99久久精品欧美| 久99久精品视频免费观看| 国内偷窥港台综合视频在线播放| 青娱乐精品在线视频| 国产精品影视在线| www.一区二区| 欧美电影在线免费观看| 国产视频一区二区在线观看| 国产精品久久久久影院| 一区二区三区av电影| 国产麻豆91精品| 在线免费不卡视频| 制服视频三区第一页精品| 欧美精品一区二区三区蜜臀| 亚洲精品国产一区二区三区四区在线| 午夜精品福利一区二区三区av| 久久99久久99| 欧美精品自拍偷拍| 国产精品久久久久久亚洲毛片 | 麻豆精品在线观看| 色婷婷国产精品| 久久久激情视频| 久久99九九99精品| 欧美理论电影在线| 亚洲日本欧美天堂| 99在线精品观看| 久久久久久久久99精品| 男男成人高潮片免费网站| 欧美在线小视频| 亚洲精品国产一区二区三区四区在线 | 国产精品网站一区| 狠狠色2019综合网| 欧美成人福利视频| 免费观看一级欧美片| 欧美精品日日鲁夜夜添| 亚洲h在线观看| 4438x亚洲最大成人网| 天堂久久一区二区三区| 69成人精品免费视频| 日本欧美大码aⅴ在线播放| 91精品国产综合久久久久久| 麻豆国产一区二区| 欧美一级电影网站|