久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4213|回復: 7
打印 上一主題 下一主題
收起左側

[原創]剛寫的程序,提下建議

[復制鏈接]
跳轉到指定樓層
樓主
ID:38029 發表于 2012-7-11 23:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*************************************/ /*功能:溫度檢測,溫度調節,自動控溫*/ /***********************************/ /********* IR_T.c ***********/ #include #define uint unsigned int #define uchar unsigned char sbit RS = P1^0; //1602數據,命令端 sbit RW = P1^1; //讀寫端 sbit E = P1^2; //使能端 sbit DS = P1^4; //DS18B20 sbit Hot = P2^0; //加熱 sbit Feng = P2^7; //風扇降溫 sbit Light = P3^1; sbit IR = P3^2; //紅外 sbit Alarm = P1^3; //報警 uchar table[4]; //存儲解碼數據 uchar flag = 0; uchar n = 1; uchar t = 0; #include "DS18B20.h" //DS18B20溫度轉化 #include "1602_display.h" //1602顯示 #include "IR.h" //紅外線 void Init() { TMOD = 0x11; TH1 = (65536 - 1500) / 256; TL1 = (65536 - 1500) % 256; TR1 = 0; ET1 = 1; TH0 = 0x00; TL0 = 0x00; TR0 = 0; ET0 = 1; EA = 1; Hot = 0; Init_1602(); //1602初始化 } void main () { Init(); while (1) { Decode(); //紅外線解碼 Light = 1; } } void time1() interrupt 3 { TH1 = (65536 - 1500) / 256; TL1 = (65536 - 1500) % 256; t++; if (t >= 10) { t = 0; Write_tem(DS_average());//溫度顯示 Control(); } } /*************************************/ /******功能:1602液晶控制函數*********/ /******* 1602_display.h ************/ /*************************************/ uchar code table0[] = {"Range:25.0-090.0"}; uchar code table1[] = {"tempe:"}; void delay(uchar z) { uchar x = 0; uchar y = 0; for (x=z; x>0; x--) for (y=110; y>0; y--); } bit Test() //檢忙 { bit STA7 = 0; RS = 0; RW = 1; E = 1; STA7 = (bit)(P0&0x80); delay(5); E = 0; return STA7; } void Write_order(uchar order) //寫指令 { while (Test()); //不忙檢測 RS = 0; RW = 0; P0 = order; delay(5); E = 1; delay(5); E = 0; } void Write_data(uchar dat) //寫數據 { while (Test()); //不忙檢測 RS = 1; RW = 0; P0 = dat; delay(5); E = 1; delay(5); E = 0; } uchar Read_order() //讀指令 { uchar order = 0; while (Test()); //不忙檢測 P0 = 0xff; RS = 0; RW = 1; delay(5); E = 1; delay(5); order = P0; E = 0; return order; } uchar Read_data() //讀數據 { uchar dat = 0; while (Test()); //不忙檢測 RS = 1; RW = 1; delay(5); E = 1; delay(5); dat = P0; E = 0; return dat; } void Init_1602() { uchar i = 0; Write_order(0x38); Write_order(0x0f); Write_order(0x80); //地址 i = 0; while (table0 != '\0') { Write_data(table0); i++; } Write_order(0x80 + 0x40); //地址 i = 0; while (table1 != '\0') { Write_data(table1); i++; } } void Write_tem(float tem) //寫溫度 { Write_order(0x80 + 0x46); Write_data(0x30 + (uint)tem / 100); Write_data(0x30 + (uint)tem / 10 % 10); Write_data(0x30 + (uint)tem % 10); Write_data('.'); Write_data(0x30 + (uint)(tem * 10) % 10); Write_data(0x30 + (uint)(tem * 100) % 10); Write_data(0xdf);//. Write_data('C'); Write_order(0x0c); } float Read_rang_low() //讀最小溫度范圍 { uchar num0 = 0; uchar num1 = 0; uchar num2 = 0; Write_order(0x80 + 6); Read_order(); num0 = Read_data() % 16; Write_order(0x80 + 7); Read_order(); num1 = Read_data() % 16; Write_order(0x80 + 9); Read_order(); num2 = Read_data() % 16; return (num0 * 10 + num1 + num2 * 0.1); } float Read_rang_high() //讀最大溫度范圍 { uchar num0 = 0; uchar num1 = 0; uchar num2 = 0; uchar num3 = 0; Write_order(0x80 + 11); Read_order(); num0 = Read_data() % 16; Write_order(0x80 + 12); Read_order(); num1 = Read_data() % 16; Write_order(0x80 + 13); Read_order(); num2 = Read_data() % 16; Write_order(0x80 + 15); Read_order(); num3 = Read_data() % 16; return (num0 * 100 + num1 * 10 + num2 + num3 * 0.1); } void Control() //對溫度做相應處理 { if (Get_DS() <= Read_rang_high() && Get_DS() >= Read_rang_low()) { Hot = 0; Feng = 1; Alarm = 1; } if (Get_DS() >= Read_rang_high())//溫度高,開降溫 { Feng = 0; Hot = 0; Alarm = 0; delay(100); Alarm = 1; delay(100); } if (Get_DS() <= Read_rang_low())//溫度低,開加熱 { Feng = 1; Hot = 1; Alarm = 0; delay(100); Alarm = 1; delay(100); } } /*************************************/ /*******功能:DS128B20溫度讀取*******/ /******** DS18B20.h ***********/ /**********************************/ void delayms(uchar x) { while (x--); //x=0,14.11us,x=1,20.62us,x=n,14.11+6.51n us } uchar Init_DS() { uchar x = 0; DS = 1; delayms(0); DS = 0; delayms(110); //730us DS = 1; delayms(6); //50us x = DS; delayms(67); //480us DS = 1; return x; } void Write_data_DS(uchar dat) { uchar i = 0; for (i=0; i<8; i++) { DS = 0; DS = dat&0x01; //送低位 delayms(5); //45us DS = 1; dat >>= 1; } } uchar Read_data_DS() { uchar i = 0; uchar dat = 0; for (i=0;i<8;i++) { DS = 0; dat >>= 1; DS = 1; delayms(0); //4us if (DS) dat=dat|0x80; delayms(1); } return dat; } float Get_DS() { float temp = 0; while (Init_DS()); Write_data_DS(0xcc); Write_data_DS(0x44); delayms(120); //800us while (Init_DS()); Write_data_DS(0xcc); Write_data_DS(0xbe); temp = Read_data_DS(); temp = (Read_data_DS() << 8)|(uint)temp; temp = temp * 0.0625 + 0.005; return temp; } float DS_average() //十次平均溫度值 { uchar i = 0; float temp = 0; for (i=10; i>0; i--) { temp = temp + Get_DS(); } temp = temp / 10.0; return temp; } /*************************************/ /******功能:紅外控制解碼************/ /******* IR.h *************/ /**********************************/ void Function(uchar num) //紅外控制 { switch (num) { case 11:EA = 0; //設定范圍 Alarm = 1; //關警報 n = 1; //游標定位 Write_order(0x86); Write_order(0x0f); flag = 1; break; case 12:Write_order(0x0c); //確定 flag = 0; EA=1; break; } if (flag == 1) { switch (num) { case 15:Write_order(0x86+n);//光標右移 n++; if (n == 2) n = 3; if (n == 4) n = 5; if (n == 8) n = 9; if (n == 10) n = 0; break; case 14:if (n <= 1) //光標左移 n = 11; if(n == 10) n = 9; if (n == 6) n = 5; if (n == 4) n = 3; Write_order(0x86+n-2); n--; break; case 0: case 1: case 2: //數字0—9 case 3: case 4: case 5: case 6: case 7: case 8: case 9: Write_data(0x30+num); Write_order(0x86+n); n++; if (n == 2) n = 3; if (n == 4) n = 5; if (n == 8) n = 9; if (n == 10) n = 0; break; } } } void Decode() //解碼 { uchar i = 0; uchar j = 0; uchar temp = 0; uint hightime = 0; uint lowtime = 0; uchar num = 0; TH0 = 0x00; TL0 = 0x00; TR0 = 1; while (IR == 0); TR0 = 0; lowtime = TH0 * 256 + TL0; TH0 = 0x00; TL0 = 0x00; TR0 = 1; while (IR == 1); TR0 = 0; hightime = TH0 * 256 + TL0; if (hightime > 3600 && hightime < 4600 && lowtime > 7800 && lowtime < 8800)//引導嗎 { for (i=0; i<4; i++) { for (j=0; j<8; j++) { temp >>= 1; TH0 = 0; TL0 = 0; TR0 = 1; while (IR == 0); TR0 = 0; lowtime = TH0 * 256 + TL0; TH0 = 0; TL0 = 0; TR0 = 1; while (IR == 1); TR0 = 0; hightime = TH0 * 256 + TL0; if (lowtime > 370 && lowtime < 640) { if (hightime > 420 && hightime < 640)//0 { temp = temp&0x7f; } if (hightime > 1250 && hightime < 1850)//1 { temp = temp|0x80; } } } table = temp; } if (table[2] ==~table[3]) { switch (table[2]) //用戶碼編碼 { case 22:num = 0;break; case 12:num = 1;break; case 24:num = 2;break; case 94:num = 3;break; case 8:num = 4;break; case 28:num = 5;break; case 90:num = 6;break; case 66:num = 7;break; case 82:num = 8;break; case 74:num = 9;break; case 69:num = 10;break; case 70:num = 11;break; case 71:num = 12;break; case 68:num = 13;break; case 64:num = 14;break; case 67:num = 15;break; case 7:num = 16;break; case 21:num = 17;break; case 9:num = 18;break; case 25:num = 19;break; case 13:num = 20;break; } } Light = 0; Function(num); //調用功能函數 } }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:38029 發表于 2012-7-11 23:53 | 只看該作者
/*************************************/ /*功能:溫度檢測,溫度調節,自動控溫*/ /***********************************/ /********* IR_T.c ***********/ #include #define uint unsigned int #define uchar unsigned char sbit RS = P1^0; //1602數據,命令端 sbit RW = P1^1; //讀寫端 sbit E = P1^2; //使能端 sbit DS = P1^4; //DS18B20 sbit Hot = P2^0; //加熱 sbit Feng = P2^7; //風扇降溫 sbit Light = P3^1; sbit IR = P3^2; //紅外 sbit Alarm = P1^3; //報警 uchar table[4]; //存儲解碼數據 uchar flag = 0; uchar n = 1; uchar t = 0; #include "DS18B20.h" //DS18B20溫度轉化 #include "1602_display.h" //1602顯示 #include "IR.h" //紅外線 void Init() { TMOD = 0x11; TH1 = (65536 - 1500) / 256; TL1 = (65536 - 1500) % 256; TR1 = 0; ET1 = 1; TH0 = 0x00; TL0 = 0x00; TR0 = 0; ET0 = 1; EA = 1; Hot = 0; Init_1602(); //1602初始化 } void main () { Init(); while (1) { Decode(); //紅外線解碼 Light = 1; } } void time1() interrupt 3 { TH1 = (65536 - 1500) / 256; TL1 = (65536 - 1500) % 256; t++; if (t >= 10) { t = 0; Write_tem(DS_average());//溫度顯示 Control(); } } /*************************************/ /******功能:1602液晶控制函數*********/ /******* 1602_display.h ************/ /*************************************/ uchar code table0[] = {"Range:25.0-090.0"}; uchar code table1[] = {"tempe:"}; void delay(uchar z) { uchar x = 0; uchar y = 0; for (x=z; x>0; x--) for (y=110; y>0; y--); } bit Test() //檢忙 { bit STA7 = 0; RS = 0; RW = 1; E = 1; STA7 = (bit)(P0&0x80); delay(5); E = 0; return STA7; } void Write_order(uchar order) //寫指令 { while (Test()); //不忙檢測 RS = 0; RW = 0; P0 = order; delay(5); E = 1; delay(5); E = 0; } void Write_data(uchar dat) //寫數據 { while (Test()); //不忙檢測 RS = 1; RW = 0; P0 = dat; delay(5); E = 1; delay(5); E = 0; } uchar Read_order() //讀指令 { uchar order = 0; while (Test()); //不忙檢測 P0 = 0xff; RS = 0; RW = 1; delay(5); E = 1; delay(5); order = P0; E = 0; return order; } uchar Read_data() //讀數據 { uchar dat = 0; while (Test()); //不忙檢測 RS = 1; RW = 1; delay(5); E = 1; delay(5); dat = P0; E = 0; return dat; } void Init_1602() { uchar i = 0; Write_order(0x38); Write_order(0x0f); Write_order(0x80); //地址 i = 0; while (table0 != '\0') { Write_data(table0); i++; } Write_order(0x80 + 0x40); //地址 i = 0; while (table1 != '\0') { Write_data(table1); i++; } } void Write_tem(float tem) //寫溫度 { Write_order(0x80 + 0x46); Write_data(0x30 + (uint)tem / 100); Write_data(0x30 + (uint)tem / 10 % 10); Write_data(0x30 + (uint)tem % 10); Write_data('.'); Write_data(0x30 + (uint)(tem * 10) % 10); Write_data(0x30 + (uint)(tem * 100) % 10); Write_data(0xdf);//. Write_data('C'); Write_order(0x0c); } float Read_rang_low() //讀最小溫度范圍 { uchar num0 = 0; uchar num1 = 0; uchar num2 = 0; Write_order(0x80 + 6); Read_order(); num0 = Read_data() % 16; Write_order(0x80 + 7); Read_order(); num1 = Read_data() % 16; Write_order(0x80 + 9); Read_order(); num2 = Read_data() % 16; return (num0 * 10 + num1 + num2 * 0.1); } float Read_rang_high() //讀最大溫度范圍 { uchar num0 = 0; uchar num1 = 0; uchar num2 = 0; uchar num3 = 0; Write_order(0x80 + 11); Read_order(); num0 = Read_data() % 16; Write_order(0x80 + 12); Read_order(); num1 = Read_data() % 16; Write_order(0x80 + 13); Read_order(); num2 = Read_data() % 16; Write_order(0x80 + 15); Read_order(); num3 = Read_data() % 16; return (num0 * 100 + num1 * 10 + num2 + num3 * 0.1); } void Control() //對溫度做相應處理 { if (Get_DS() <= Read_rang_high() && Get_DS() >= Read_rang_low()) { Hot = 0; Feng = 1; Alarm = 1; } if (Get_DS() >= Read_rang_high())//溫度高,開降溫 { Feng = 0; Hot = 0; Alarm = 0; delay(100); Alarm = 1; delay(100); } if (Get_DS() <= Read_rang_low())//溫度低,開加熱 { Feng = 1; Hot = 1; Alarm = 0; delay(100); Alarm = 1; delay(100); } } /*************************************/ /*******功能:DS128B20溫度讀取*******/ /******** DS18B20.h ***********/ /**********************************/ void delayms(uchar x) { while (x--); //x=0,14.11us,x=1,20.62us,x=n,14.11+6.51n us } uchar Init_DS() { uchar x = 0; DS = 1; delayms(0); DS = 0; delayms(110); //730us DS = 1; delayms(6); //50us x = DS; delayms(67); //480us DS = 1; return x; } void Write_data_DS(uchar dat) { uchar i = 0; for (i=0; i<8; i++) { DS = 0; DS = dat&0x01; //送低位 delayms(5); //45us DS = 1; dat >>= 1; } } uchar Read_data_DS() { uchar i = 0; uchar dat = 0; for (i=0;i<8;i++) { DS = 0; dat >>= 1; DS = 1; delayms(0); //4us if (DS) dat=dat|0x80; delayms(1); } return dat; } float Get_DS() { float temp = 0; while (Init_DS()); Write_data_DS(0xcc); Write_data_DS(0x44); delayms(120); //800us while (Init_DS()); Write_data_DS(0xcc); Write_data_DS(0xbe); temp = Read_data_DS(); temp = (Read_data_DS() << 8)|(uint)temp; temp = temp * 0.0625 + 0.005; return temp; } float DS_average() //十次平均溫度值 { uchar i = 0; float temp = 0; for (i=10; i>0; i--) { temp = temp + Get_DS(); } temp = temp / 10.0; return temp; } /*************************************/ /******功能:紅外控制解碼************/ /******* IR.h *************/ /**********************************/ void Function(uchar num) //紅外控制 { switch (num) { case 11:EA = 0; //設定范圍 Alarm = 1; //關警報 n = 1; //游標定位 Write_order(0x86); Write_order(0x0f); flag = 1; break; case 12:Write_order(0x0c); //確定 flag = 0; EA=1; break; } if (flag == 1) { switch (num) { case 15:Write_order(0x86+n);//光標右移 n++; if (n == 2) n = 3; if (n == 4) n = 5; if (n == 8) n = 9; if (n == 10) n = 0; break; case 14:if (n <= 1) //光標左移 n = 11; if(n == 10) n = 9; if (n == 6) n = 5; if (n == 4) n = 3; Write_order(0x86+n-2); n--; break; case 0: case 1: case 2: //數字0—9 case 3: case 4: case 5: case 6: case 7: case 8: case 9: Write_data(0x30+num); Write_order(0x86+n); n++; if (n == 2) n = 3; if (n == 4) n = 5; if (n == 8) n = 9; if (n == 10) n = 0; break; } } } void Decode() //解碼 { uchar i = 0; uchar j = 0; uchar temp = 0; uint hightime = 0; uint lowtime = 0; uchar num = 0; TH0 = 0x00; TL0 = 0x00; TR0 = 1; while (IR == 0); TR0 = 0; lowtime = TH0 * 256 + TL0; TH0 = 0x00; TL0 = 0x00; TR0 = 1; while (IR == 1); TR0 = 0; hightime = TH0 * 256 + TL0; if (hightime > 3600 && hightime < 4600 && lowtime > 7800 && lowtime < 8800)//引導嗎 { for (i=0; i<4; i++) { for (j=0; j<8; j++) { temp >>= 1; TH0 = 0; TL0 = 0; TR0 = 1; while (IR == 0); TR0 = 0; lowtime = TH0 * 256 + TL0; TH0 = 0; TL0 = 0; TR0 = 1; while (IR == 1); TR0 = 0; hightime = TH0 * 256 + TL0; if (lowtime > 370 && lowtime < 640) { if (hightime > 420 && hightime < 640)//0 { temp = temp&0x7f; } if (hightime > 1250 && hightime < 1850)//1 { temp = temp|0x80; } } } table = temp; } if (table[2] ==~table[3]) { switch (table[2]) //用戶碼編碼 { case 22:num = 0;break; case 12:num = 1;break; case 24:num = 2;break; case 94:num = 3;break; case 8:num = 4;break; case 28:num = 5;break; case 90:num = 6;break; case 66:num = 7;break; case 82:num = 8;break; case 74:num = 9;break; case 69:num = 10;break; case 70:num = 11;break; case 71:num = 12;break; case 68:num = 13;break; case 64:num = 14;break; case 67:num = 15;break; case 7:num = 16;break; case 21:num = 17;break; case 9:num = 18;break; case 25:num = 19;break; case 13:num = 20;break; } } Light = 0; Function(num); //調用功能函數 } }
回復

使用道具 舉報

板凳
ID:38029 發表于 2012-7-11 23:59 | 只看該作者
 

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

/*功能:溫度檢測,溫度調節,自動控溫*/

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

/*********    IR_T.c    ***********/

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char


sbit RS    = P1^0;                 //1602數據,命令端

sbit RW    = P1^1;                //讀寫端

sbit E     = P1^2;                 //使能端

sbit DS    = P1^4;                 //DS18B20

sbit Hot   = P2^0;                  //加熱

sbit Feng  = P2^7;                  //風扇降溫

sbit Light = P3^1;

sbit IR    = P3^2;                  //紅外

sbit Alarm = P1^3;                   //報警


uchar table[4];                          //存儲解碼數據

uchar flag = 0;

uchar   n  = 1;

uchar   t  = 0;


#include "DS18B20.h"            //DS18B20溫度轉化

#include "1602_display.h"       //1602顯示

#include "IR.h"                        //紅外線


void Init()

{

       TMOD = 0x11;

      

       TH1 = (65536 - 1500) / 256;

       TL1 = (65536 - 1500) % 256;

       TR1 = 0;

       ET1 = 1;

      

       TH0 = 0x00;

       TL0 = 0x00;

       TR0 = 0;

       ET0 = 1;

      

       EA = 1;

       Hot = 0;

      

       Init_1602();                                     //1602初始化

}


void main ()

{

       Init();

                           

       while (1)

       {

              Decode();                   //紅外線解碼

              Light = 1;

       }

}


void time1() interrupt 3

{

       TH1 = (65536 - 1500) / 256;

       TL1 = (65536 - 1500) % 256;

       t++;

       if (t >= 10)

       {

              t = 0;

              Write_tem(DS_average());//溫度顯示

              Control();

       }           

}


回復

使用道具 舉報

地板
ID:38029 發表于 2012-7-12 00:00 | 只看該作者
 

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

/******功能:1602液晶控制函數*********/

/*******  1602_display.h  ************/

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

uchar code table0[] = {"Range:25.0-090.0"};

uchar code table1[] = {"tempe:"};


void delay(uchar z)

{

       uchar x = 0;

       uchar y = 0;

      

       for (x=z; x>0; x--)

              for (y=110; y>0; y--);

}


bit Test()                                          //檢忙

{

       bit STA7 = 0;

      

       RS = 0;

       RW = 1;

       E  = 1;

       STA7 = (bit)(P0&0x80);

       delay(5);

       E  = 0;

      

       return STA7;

}

void Write_order(uchar order) //寫指令

{

       while (Test());                           //不忙檢測

       RS = 0;

       RW = 0;

       P0 = order;

       delay(5);

       E = 1;

       delay(5);

       E = 0;

}


void Write_data(uchar dat)             //寫數據

{

       while (Test());                           //不忙檢測

       RS = 1;

       RW = 0;

       P0 = dat;

       delay(5);

       E = 1;

       delay(5);

       E = 0;

}


uchar Read_order()                         //讀指令

{

       uchar order = 0;

      

       while (Test());                           //不忙檢測

       P0 = 0xff;

       RS = 0;

       RW = 1;

       delay(5);

       E = 1;

       delay(5);

       order = P0;

       E = 0;

      

       return order;

}


uchar Read_data()                          //讀數據

{

       uchar dat = 0;

       while (Test());                           //不忙檢測

       RS = 1;

       RW = 1;

       delay(5);

       E = 1;

       delay(5);

       dat = P0;

       E = 0;

      

       return dat;

}


void Init_1602()

{

       uchar i = 0;

       Write_order(0x38);

       Write_order(0x0f);

      

       Write_order(0x80);                  //地址

       i = 0;

       while (table0 != '\0')

       {

              Write_data(table0);

              i++;

       }

      

       Write_order(0x80 + 0x40);      //地址

       i = 0;

       while (table1 != '\0')

       {

              Write_data(table1);

              i++;

       }

}


void Write_tem(float tem)              //寫溫度

{

       Write_order(0x80 + 0x46);

       Write_data(0x30 + (uint)tem / 100);

       Write_data(0x30 + (uint)tem / 10 % 10);

       Write_data(0x30 + (uint)tem % 10);

       Write_data('.');

       Write_data(0x30 + (uint)(tem * 10) % 10);

       Write_data(0x30 + (uint)(tem * 100) % 10);

       Write_data(0xdf);//.

       Write_data('C');


       Write_order(0x0c);

      

}


float Read_rang_low()                    //讀最小溫度范圍

{

       uchar num0 = 0;

       uchar num1 = 0;

       uchar num2 = 0;

      

       Write_order(0x80 + 6);

       Read_order();

       num0 = Read_data() % 16;

      

       Write_order(0x80 + 7);

       Read_order();

       num1 = Read_data() % 16;

      

       Write_order(0x80 + 9);

       Read_order();

       num2 = Read_data() % 16;

      

       return (num0 * 10 + num1 + num2 * 0.1);

}


float Read_rang_high()                   //讀最大溫度范圍

{

       uchar num0 = 0;

       uchar num1 = 0;

       uchar num2 = 0;

       uchar num3 = 0; 

      

       Write_order(0x80 + 11);

       Read_order();

       num0 = Read_data() % 16;

      

       Write_order(0x80 + 12);

       Read_order();

       num1 = Read_data() % 16;

      

       Write_order(0x80 + 13);

       Read_order();

       num2 = Read_data() % 16;

      

       Write_order(0x80 + 15);

       Read_order();

       num3 = Read_data() % 16;

      

       return (num0 * 100 + num1 * 10 + num2 + num3 * 0.1);

}


void Control()                                 //對溫度做相應處理

{

       if (Get_DS() <= Read_rang_high()

              && Get_DS() >= Read_rang_low())

       {

              Hot = 0;

              Feng = 1;

              Alarm = 1;

       }

      

       if (Get_DS() >= Read_rang_high())//溫度高,開降溫

       {

              Feng = 0;

              Hot = 0;

              Alarm = 0;

              delay(100);

              Alarm = 1;

              delay(100);

       }

      

       if (Get_DS() <= Read_rang_low())//溫度低,開加熱

       {

              Feng = 1;

              Hot = 1;

              Alarm = 0;

              delay(100);

              Alarm = 1;

              delay(100);

       }

}


回復

使用道具 舉報

5#
ID:38029 發表于 2012-7-12 00:00 | 只看該作者

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

/*******功能:DS128B20溫度讀取*******/

/********    DS18B20.h   ***********/

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

void delayms(uchar x)

{

       while (x--);                 //x=0,14.11us,x=1,20.62us,x=n,14.11+6.51n us

}


uchar Init_DS()

{

       uchar x = 0;

      

       DS = 1;

       delayms(0);

       DS = 0;

       delayms(110);                    //730us

       DS = 1;

       delayms(6);                //50us

       x = DS;

       delayms(67);                     //480us

       DS = 1;

      

       return x;

}


void Write_data_DS(uchar dat)

{

       uchar i = 0;

      

       for (i=0; i<8; i++)

       {

              DS = 0;

              DS = dat&0x01;        //送低位

              delayms(5);         //45us

              DS = 1;

              dat >>= 1;

       }    

}


uchar Read_data_DS()

{

       uchar i = 0;

       uchar dat = 0;

      

       for (i=0;i<8;i++)

       {

              DS = 0;

              dat >>= 1;

              DS = 1;

              delayms(0);                //4us

              if (DS)

                     dat=dat|0x80;

              delayms(1);

       }

       return dat;

}


float Get_DS()

{

       float temp = 0;

      

       while (Init_DS());

       Write_data_DS(0xcc);

       Write_data_DS(0x44);

       delayms(120);                   //800us

      

       while (Init_DS());

       Write_data_DS(0xcc);

       Write_data_DS(0xbe);

      

       temp = Read_data_DS();

       temp = (Read_data_DS() << 8)|(uint)temp;

      

       temp = temp * 0.0625 + 0.005;

      

      

       return temp;

}


float DS_average()                   //十次平均溫度值

{

       uchar i = 0;

       float temp = 0;

      

       for (i=10; i>0; i--)

       {

              temp = temp + Get_DS();

       }

       temp = temp / 10.0;

      

       return temp;

}


回復

使用道具 舉報

6#
ID:38029 發表于 2012-7-12 00:01 | 只看該作者
 

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

/******功能:紅外控制解碼************/

/*******      IR.h     *************/

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

void Function(uchar num)                            //紅外控制

{

       switch (num)

       {

              case 11:EA = 0;                               //設定范圍

                            Alarm = 1;                         //關警報

                            n = 1;                                 //游標定位

                            Write_order(0x86);

                            Write_order(0x0f);

                            flag = 1;

                            break;

                           

              case 12:Write_order(0x0c);             //確定

                            flag = 0;

                            EA=1;

                            break;

       }

      

       if (flag == 1)

       {

              switch (num)

              {

                     case 15:Write_order(0x86+n);//光標右移

                                   n++;      

                                   if (n == 2)

                                   n = 3;

                                   if (n == 4)

                                   n = 5;

                                   if (n == 8)

                                   n = 9;

                                   if (n == 10)

                                   n = 0;                  

                                   break;

                                  

                     case 14:if (n <= 1)                    //光標左移

                                   n = 11;

                                   if(n == 10)

                                   n = 9;

                                   if (n == 6)

                                   n = 5;

                                   if (n == 4)

                                   n = 3;

                                   Write_order(0x86+n-2);

                                   n--; 

                                   break;

                                  

                     case 0: case 1: case 2:        //數字0—9

                     case 3: case 4: case 5:

                     case 6: case 7: case 8:

                     case 9:  

                                   Write_data(0x30+num);

                                   Write_order(0x86+n);

                                   n++;

                                   if (n == 2)

                                   n = 3;

                                   if (n == 4)

                                   n = 5;

                                   if (n == 8)

                                   n = 9;

                                   if (n == 10)

                                   n = 0;           

                                   break;

              }

       }

}


回復

使用道具 舉報

7#
ID:38029 發表于 2012-7-12 00:01 | 只看該作者

void Decode()                                               //解碼

{

       uchar i = 0;

       uchar j = 0;

       uchar temp = 0;

       uint hightime = 0;

       uint lowtime = 0;

       uchar num = 0;

      

       TH0 = 0x00;

       TL0 = 0x00;

       TR0 = 1;

       while (IR == 0);

       TR0 = 0;

       lowtime = TH0 * 256 + TL0;

      

       TH0 = 0x00;

       TL0 = 0x00;

       TR0 = 1;

       while (IR == 1);

       TR0 = 0;

       hightime = TH0 * 256 + TL0;

      

       if (hightime > 3600 && hightime < 4600

              && lowtime > 7800 && lowtime < 8800)//引導嗎

       {    

              for (i=0; i<4; i++)

              {

                     for (j=0; j<8; j++)

                     {

                            temp >>= 1;

                                  

                            TH0 = 0;

                            TL0 = 0;

                            TR0 = 1;

                            while (IR == 0);

                            TR0 = 0;

                            lowtime = TH0 * 256 + TL0;

                                  

                            TH0 = 0;

                            TL0 = 0;

                            TR0 = 1;

                            while (IR == 1);

                            TR0 = 0;

                            hightime = TH0 * 256 + TL0;

                                  

                            if (lowtime > 370 && lowtime < 640)

                            {

                                   if (hightime > 420 && hightime < 640)//0

                                   {

                                          temp = temp&0x7f;

                                   }

                                  

                                   if (hightime > 1250 && hightime < 1850)//1

                                   {

                                          temp = temp|0x80;

                                   }

                                  

                            }           

                     }

              table = temp;

              }

              if (table[2] ==~table[3])

              {

                     switch (table[2])                //用戶碼編碼

                     {

                            case 22:num = 0;break;

                            case 12:num = 1;break;

                            case 24:num = 2;break;

                            case 94:num = 3;break;

                            case  8:num = 4;break;

                            case 28:num = 5;break;

                            case 90:num = 6;break;

                            case 66:num = 7;break;

                            case 82:num = 8;break;

                            case 74:num = 9;break;

                                  

                            case 69:num = 10;break;

                            case 70:num = 11;break;

                            case 71:num = 12;break;

                            case 68:num = 13;break;

                            case 64:num = 14;break;

                            case 67:num = 15;break;

                            case  7:num = 16;break;

                            case 21:num = 17;break;

                            case  9:num = 18;break;

                            case 25:num = 19;break;

                            case 13:num = 20;break;

                     }           

              }

              Light = 0;

              Function(num);                               //調用功能函數

       }           

}


回復

使用道具 舉報

8#
ID:42770 發表于 2012-7-12 20:06 | 只看該作者

你能幫我解釋一下關于定時計數器的意義嗎

 

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人在线播放 | av喷水| 亚洲国产精品久久久久 | 99成人| 91福利网 | 国产成人精品a视频 | 国产精品精品久久久 | www.精品国产 | 欧美综合久久 | 成人免费一区二区三区视频网站 | 天天搞夜夜操 | 美女一区 | 波多野结衣av中文字幕 | 国产精品a一区二区三区网址 | 99久久久久久99国产精品免 | 狠狠久久综合 | 天天干天天爽 | 国产成人精品一区二区三区四区 | 精品久久久久久中文字幕 | 成人九色 | 久久精品二区亚洲w码 | 国产精品日日摸夜夜添夜夜av | 狠狠撸在线视频 | 日日夜夜精品视频 | 91网站在线看 | av一区二区在线观看 | 国产高清精品一区二区三区 | 日韩免费视频一区二区 | 国产精品欧美日韩 | 无码一区二区三区视频 | 久久大陆 | 亚洲 欧美 日韩在线 | 麻豆亚洲 | 亚洲一区 中文字幕 | 99久久精品国产一区二区三区 | 亚洲黄色片免费观看 | 呦呦在线视频 | 亚洲97 | 欧美一区二区三区久久精品 | 日韩一区二区av | 亚洲码欧美码一区二区三区 |