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

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

?? ds18b20-lcd1602-c51.c

?? 單片機控制DS18B20溫度控制1602LCD顯示程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
     { display[0]=display[0]+0x37;}
    else{display[0]=display[0]+0x30;}          
    lcd_wdat(display[0]);        //高位數顯示 

    display[1]=(Temp&0x0f);
    if(display[1]>9)
     {display[1]=display[1]+0x37;}
    else {display[1]=display[1]+0x30;}           
    lcd_wdat(display[1]);        //低位數顯示 
   }
}	 

/*******************************************************************/
/*                                                                 */
/* 讀取溫度                                                        */
/*                                                                 */
/*******************************************************************/
 Read_Temperature(void)
{
     uchar  i;
     TR0=0;                     //關中斷,防止讀數錯誤
     Init_DS18B20();
  
     WriteOneChar(0xCC);        //跳過讀序號列號的操作
     WriteOneChar(0x44);        //啟動溫度轉換

     Init_DS18B20();

     WriteOneChar(0x55);         //匹配ROM命令
     for(i=0;i<8;i++)
     WriteOneChar(RomCode[i]);

     WriteOneChar(0xBE);         //讀取溫度寄存器

     temp_data[0] = ReadOneChar();   //溫度低8位
     temp_data[1] = ReadOneChar();   //溫度高8位
     temp_alarm[0] = ReadOneChar();  //溫度報警TH
	 temp_alarm[1] = ReadOneChar();  //溫度報警TL

	 temp_comp=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
                                   //取溫度整數值
     TR0=1;        //開中斷
}
/*******************************************************************/
/*                                                                 */
/* 數據轉換與溫度顯示                                              */
/*                                                                 */
/*******************************************************************/
 Disp_Temperature()
{
   uchar s=0;
   if(temp_data[1]>127)                  //溫度為負值
   {                                        
    temp_data[0]=(~temp_data[0])+1;     //取反加一,將補碼變成原碼
    if((~temp_data[0])>=0xff)
    temp_data[1]=(~temp_data[1])+1;
    else temp_data[1]=~temp_data[1];
    s=1;
   }
	
   display[4]=temp_data[0]&0x0f;
   display[0]=(display[4]*10/16)+0x30;
  
   display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
   display[3]=display[4]/100+0x30;
   display[1]=display[4]%100;
   display[2]=display[1]/10+0x30;
   display[1]=display[1]%10+0x30;

    if(display[3]==0x30)        //高位為0,不顯示
   { 
     display[3]=0x20;              
     if(display[2]==0x30)       //次高位為0,不顯示
     display[2]=0x20;
   }
   if(s)
   display[3]=0x2d;            //顯示負號
    
    lcd_pos(0x07);             
    lcd_wdat(display[3]);      //百位數顯示             
    lcd_wdat(display[2]);      //十位數顯示              
    lcd_wdat(display[1]);      //個位數顯示  
    lcd_wdat('.');            
    lcd_wdat(display[0]);      //小數位數顯示
 	lcd_wdat(0x00);            //顯示自定義字符
    lcd_wdat('C');             //顯示C
}	 

/*******************************************************************/
/*                                                                 */
/* 蜂鳴器響一聲                                                    */
/*                                                                 */
/*******************************************************************/
void beep()
{
    unsigned char y;
    for (y=0;y<100;y++)
    {
      Delay(70);
      BEEP=!BEEP;                //BEEP取反
    } 
    BEEP=1;                      //關閉蜂鳴器
	Delay(25000);
}

/*******************************************************************/
/*                                                                 */
/* ROMCORD 顯示菜單                                                */
/*                                                                 */
/*******************************************************************/
void  RomCode_Menu ()
{ 
    uchar  m;
    lcd_init();                //初始化LCD
 
    lcd_pos(0);                //設置顯示位置為第一行
    for(m=0;m<16;m++)          //顯示字符
    lcd_wdat(cdis1[m]);
     
    Read_RomCord();            //讀取64位序列碼
    CRC8();                    //CRC效驗
    if(crc==0)                 //CRC效驗正確
    {
	  Disp_RomCode(2);	       //顯示64位序列碼
    }
}

/*******************************************************************/
/*                                                                 */
/* DS18B20 ERROR 顯示菜單                                          */
/*                                                                 */
/*******************************************************************/
void  Error_Menu ()
{
     uchar  m;
     lcd_init();                //初始化LCD 
	
  	 lcd_pos(0);                //設置顯示位置為第一行的第1個字符
     for(m=0;m<16;m++) 
     lcd_wdat(cdis3[m]);        //顯示字符
    
     lcd_pos(0x40);             //設置顯示位置為第二行第1個字符
     for(m=0;m<16;m++) 
     lcd_wdat(cdis4[m]);        //顯示字符
}

/*******************************************************************/
/*                                                                 */
/* DS18B20 正常顯示菜單                                            */
/*                                                                 */
/*******************************************************************/
void  Natural_Menu ()
{
   uchar  m;
   lcd_init();                //初始化LCD 

   lcd_pos(0);                //設置顯示位置為第一行的第1個字符
   for(m=0;m<16;m++) 
   lcd_wdat(cdis5[m]);        //顯示字符

   lcd_pos(0x40);             //設置顯示位置為第二行第1個字符
   for(m=0;m<16;m++) 
   lcd_wdat(cdis6[m]);        //顯示字符

   Read_Temperature();
   Disp_Temp_alarm(0x43,0);   //顯示TH值
   Disp_Temp_alarm(0x4b,1);   //顯示TL值
   Disp_Temperature();        //顯示實時溫度值
}


/*********************************************************/
// 顯示報警溫度
/*********************************************************/
void Disp_Temp_alarm(uchar addr,uchar num)
{   //0=TH,1=TL
   display1[2]=temp_alarm[num]/100+0x30;
   display1[0]=temp_alarm[num]%100;
   display1[1]=display1[0]/10+0x30;
   display1[0]=display1[0]%10+0x30;

    if(display1[2]==0x30)        //高位為0,不顯示
    { 
      display1[2]=0x20;              
      if(display1[1]==0x30)      //次高位為0,不顯示
      display1[1]=0x20;
    }

    lcd_pos(addr);
    lcd_wdat(display1[2]);        //百位數顯示             
    lcd_wdat(display1[1]);        //十位數顯示              
    lcd_wdat(display1[0]);        //個位數顯示
}    

/**********************************************************/
// Time0中斷函數
/**********************************************************/
void Time0(void) interrupt 1 using 0
{
   TH0=0x4c;        //50ms定時
   TL0=0x00;
   timecount++;
   if(timecount>9)
   {
    timecount=0;
    flag=~flag;         
   }
}

/*********************************************************/
/*                                                       */
/*小喇叭閃動                                             */
/*                                                       */
/*********************************************************/
void  spk(uchar addr)
{
   if(flag)
   {
     lcd_pos(addr);
     lcd_wdat(0x01);      //小喇叭顯示
   }
   else
   {
     lcd_pos(addr);
     lcd_wdat(0x20);      //清屏
   }
}

/*********************************************************/
// 溫度比較函數
/*********************************************************/
void temp_compare()
{    
    if(temp_comp >= temp_alarm[0])      //比較 TH 值
     {
       compare_th=1;                    
	 }
	else  compare_th=0;

    if(temp_comp < temp_alarm[1])        //比較 TL 值
	 {
	   compare_tl=1;
	 }
	else  compare_tl=0;
     
	if(compare_th)
	 {
	   spk(0x46);            //小喇叭閃動
       if(!alarm_on_off)     //靜音選擇
	   beep();
	   count=temp_alarm[0];
	 }
	else 
	 {
       lcd_pos(0x46);
       lcd_wdat(0x20);
	 }
	if(compare_tl)
	 {
	   spk(0x4e);           //小喇叭閃動
       if(!alarm_on_off)    //靜音選擇
	   beep();
	   count=temp_alarm[1];
	 }
	else 
	 {
       lcd_pos(0x4e);
       lcd_wdat(0x20);
	 }
}   

/*********************************************************/
// 溫度報警值閃動
/*********************************************************/
void  Set_tempalarm_Flash(uchar addr,uchar num)
{
   if(flag)
   {
     temp_alarm[num]=count;
     Disp_Temp_alarm(addr,num);  //顯示溫度報警值
   }
   else
   {
     lcd_pos(addr);
     lcd_wdat(0x20);
	 lcd_wdat(0x20);
	 lcd_wdat(0x20);
   }
}


/*******************************************************************/
/*                                                                 */
/* 主函數                                                          */
/*                                                                 */
/*******************************************************************/
void main()
 {
	uchar  m;
	TMOD=0x01; TH0=0x4c; TL0=0x00; 				//50ms定時
	EA=1; ET0=1; TR0=1;
	P0=0;
	P2&=0x1F;
	Init_DS18B20();
	Write_Temperature_alarm();					//設定報警上下限溫度值
	if(presence)
    {
    	Error_Menu ();
		do
		{  
			Init_DS18B20();
			beep();
		}
		while(presence);
    }
    
	RomCode_Menu ();      						//顯示RomCode
	for(m=0;m<10;m++)
	Delay(50000);
    Natural_Menu ();							//正常顯示界面
	Delay(50000);
	while(1)
	{
		Read_Temperature();						//讀取當前溫度
		Delay(50000);
		Disp_Temperature();						//更新當前溫度
		temp_compare();							//溫度上下限比較
		if(compare_th)
		{
			Set_tempalarm_Flash(0x43,0);		//上限報警
		}
		if(compare_tl)
		{
			Set_tempalarm_Flash(0x4b,1);		//下限報警
		}
  }//end of while(1)
}  //end of main()


/**********************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区在线免费观看| 日韩黄色免费网站| 亚洲精品福利视频网站| 日本最新不卡在线| 国产69精品久久久久毛片 | 精品成人在线观看| 一区二区三区丝袜| 成人黄页在线观看| 欧美大片在线观看| 亚洲成人激情自拍| 成人成人成人在线视频| 精品日韩一区二区| 亚洲不卡在线观看| 色综合天天做天天爱| 久久日韩粉嫩一区二区三区| 一区二区三区**美女毛片| 国产大片一区二区| 欧美成人福利视频| 亚洲va欧美va人人爽| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日日夜夜一区二区| 91老师片黄在线观看| 国产欧美精品一区| 久久丁香综合五月国产三级网站 | 色综合久久久久久久久久久| 国产亚洲欧美中文| 国产一区不卡在线| 欧美一级片免费看| 三级在线观看一区二区| 欧美日韩精品一区视频| 亚洲人成网站色在线观看| 不卡的av电影在线观看| 国产精品无遮挡| 国产精品一卡二| 久久先锋资源网| 国产一区在线观看视频| 精品福利二区三区| 国产乱码精品一品二品| 久久久精品中文字幕麻豆发布| 老鸭窝一区二区久久精品| 欧美一级片免费看| 麻豆精品在线视频| 久久综合资源网| 国产乱人伦偷精品视频不卡| 久久精品视频在线看| 国产成人超碰人人澡人人澡| 中文字幕亚洲一区二区va在线| 六月婷婷色综合| 欧美精品一区二区三区在线播放| 久久精品国产在热久久| 欧美va亚洲va国产综合| 韩国在线一区二区| 国产日韩精品一区二区浪潮av | 日韩欧美国产三级电影视频| 免费人成黄页网站在线一区二区| 这里只有精品99re| 久久国产日韩欧美精品| 国产目拍亚洲精品99久久精品| 国产suv精品一区二区三区| 国产精品视频yy9299一区| 99视频精品全部免费在线| 亚洲免费观看高清完整版在线| 在线视频你懂得一区二区三区| 午夜国产精品影院在线观看| 日韩一区二区三区电影在线观看| 精品一区二区影视| 欧美国产综合色视频| 在线精品视频一区二区| 日本中文字幕不卡| 国产午夜精品福利| 在线观看日韩电影| 免费不卡在线观看| 国产女同性恋一区二区| 欧美色综合久久| 久久97超碰色| 亚洲色图制服诱惑| 精品国产一区二区三区久久影院 | 国产精品久久久爽爽爽麻豆色哟哟| 在线亚洲+欧美+日本专区| 青青青伊人色综合久久| 中文字幕日韩一区| 日韩欧美在线一区二区三区| 97久久精品人人澡人人爽| 日韩精品亚洲一区| ...xxx性欧美| 精品欧美一区二区在线观看| 色婷婷av一区二区三区软件| 激情文学综合网| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美久久一二三四区| 成人久久18免费网站麻豆 | 成人欧美一区二区三区黑人麻豆| 欧美人动与zoxxxx乱| 成人免费视频视频在线观看免费| 日日嗨av一区二区三区四区| 亚洲自拍偷拍图区| 久久毛片高清国产| 欧美一区二区三区在线看| 色婷婷精品久久二区二区蜜臂av| 国产精品一二三区| 九九九精品视频| 视频一区二区三区在线| 亚洲另类在线视频| 中国av一区二区三区| 久久免费精品国产久精品久久久久| 欧美日韩综合在线| 91麻豆自制传媒国产之光| 国产精品1区2区| 久久精品免费看| 日本不卡中文字幕| 亚洲va欧美va人人爽午夜| 亚洲综合激情另类小说区| 亚洲精选视频免费看| 国产精品对白交换视频 | 欧美精品xxxxbbbb| 欧美三级中文字幕| 欧美在线free| 欧美午夜精品免费| 欧美日韩在线播放一区| 在线看不卡av| 在线观看日韩毛片| 欧美日韩免费观看一区三区| 欧洲一区二区av| 欧美在线观看视频一区二区三区 | 成人欧美一区二区三区小说| 中文在线一区二区| 国产精品久久久久久久第一福利| 国产精品免费视频观看| 中文欧美字幕免费| 亚洲视频小说图片| 亚洲精品高清视频在线观看| 亚洲一级二级三级在线免费观看| 一区二区久久久久| 亚欧色一区w666天堂| 免费欧美日韩国产三级电影| 日韩电影免费一区| 精品一区二区三区在线播放视频 | 精品免费99久久| 久久精品一二三| **性色生活片久久毛片| 亚洲a一区二区| 久久99精品视频| 粉嫩aⅴ一区二区三区四区五区| 成人av在线影院| 欧美午夜宅男影院| 欧美成人女星排名| 国产精品久久久一本精品| 一区二区三区在线影院| 蜜臀av一区二区在线免费观看| 国产一区二区毛片| 日本韩国欧美一区二区三区| 欧美日韩在线观看一区二区| 精品盗摄一区二区三区| 一区精品在线播放| 青青草97国产精品免费观看无弹窗版 | 在线精品视频小说1| 欧美成人一区二区三区片免费| 亚洲精品中文字幕乱码三区| 亚洲精品高清在线观看| 免费看欧美女人艹b| 成人网在线播放| 欧美日韩精品欧美日韩精品一| 久久免费偷拍视频| 亚洲国产精品影院| 国产成人激情av| 欧美日韩国产精品自在自线| 国产日韩欧美电影| 日本欧美韩国一区三区| youjizz久久| 日韩免费性生活视频播放| 综合久久久久综合| 狠狠色丁香婷婷综合久久片| 欧美中文字幕一区二区三区亚洲| 337p粉嫩大胆噜噜噜噜噜91av | 日韩一区二区三区三四区视频在线观看 | 国产大陆a不卡| 欧美日本乱大交xxxxx| 国产精品久久看| 久久国产精品区| 欧美精品xxxxbbbb| 亚洲美女淫视频| 成人午夜激情视频| 精品国产伦一区二区三区观看体验| 一区二区三区四区不卡视频| 粉嫩aⅴ一区二区三区四区五区| 91精品国产综合久久国产大片| 自拍偷拍欧美激情| 懂色av一区二区三区免费看| 欧美一区二区三区小说| 亚洲午夜在线电影| 91丨porny丨蝌蚪视频| 久久久久久久综合日本| 久久草av在线| 欧美成人猛片aaaaaaa| 日韩激情中文字幕| 欧美日产在线观看| 亚洲高清在线视频| 欧美影院一区二区三区| 亚洲图片欧美激情| 91网站在线观看视频|