|
作品外觀:
0.png (466.68 KB, 下載次數(shù): 59)
下載附件
2017-5-22 21:17 上傳
電路原理圖如下:
0.png (88.34 KB, 下載次數(shù): 71)
下載附件
2017-5-22 21:18 上傳
主要參數(shù) | 序號(hào) | | | | | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | | 主要元器件 | 序號(hào) | | | | | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | | 6 | | | | | 7 | | | | | 8 | | | | |
單片機(jī)源程序如下:
- #include<reg52.h>
- #include <stdio.h>
- #include <absacc.h>
- code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x40}; //顯示段碼
- sbit TMDAT =P3^1; //DS18B20 的數(shù)據(jù)輸入/輸出腳DQ,根據(jù)情況設(shè)定
- sbit jia=P2^1;
- sbit jian=P2^0;
- sbit hong=P1^0; //紅色警告燈
- sbit sheng=P1^1; //蜂鳴器
- sbit lan=P1^2; //蘭色燈
- bit write=0; //寫24C08 的標(biāo)志;
- j=30;
- unsigned int sdata;//測(cè)量到的溫度的整數(shù)部分
- unsigned char xiaoshu1;//小數(shù)第一位
- unsigned char xiaoshu2;//小數(shù)第二位
- unsigned char xiaoshu;//兩位小數(shù)
- bit fg=1; //溫度正負(fù)標(biāo)志
- ////////24C08 讀寫驅(qū)動(dòng)程序////////////////////
- sbit scl=P3^4; // 24c08 SCL
- sbit sda=P3^5; // 24c08 SDA
- void delay1(unsigned char x)
- { unsigned int i;
- for(i=0;i<x;i++);
- ;}
- void flash()
- { ; ; }
- void x24c08_init() //24c08 初始化子程序
- {scl=1; flash(); sda=1; flash();}
- void start() //啟動(dòng)(I方C)總線
- {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
- void stop() //停止(I方C)總線
- {sda=0; flash(); scl=1; flash(); sda=1; flash();}
- void writex(unsigned char j) //寫一個(gè)字節(jié)
- { unsigned char i,temp;
- temp=j;
- for (i=0;i<8;i++)
- {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
- scl=0; flash(); sda=1; flash();
- }
- unsigned char readx() //讀一個(gè)字節(jié)
- {
- unsigned char i,j,k=0;
- scl=0; flash(); sda=1;
- for (i=0;i<8;i++)
- {
- flash(); scl=1; flash();
- if (sda==1) j=1;
- else j=0;
- k=(k<<1)|j;
- scl=0;}
- flash(); return(k);
- }
- void clock() //(I方C)線時(shí)鐘
- {
- unsigned char i=0;
- scl=1; flash();
- while ((sda==1)&&(i<255))i++;
- scl=0; flash();
- }
- ////////從24c02 的地址address 中讀取一個(gè)字節(jié)數(shù)據(jù)/////
- unsigned char x24c08_read(unsigned char address)
- {
- unsigned char i;
- start(); writex(0xa0);
- clock(); writex(address);
- clock(); start();
- writex(0xa1); clock();
- i=readx(); stop();
- delay1(10);
- return(i);
- }
- //////向24c02 的address 地址中寫入一字節(jié)數(shù)據(jù)info/////
- void x24c08_write(unsigned char address,unsigned char info)
- {
- EA=0;
- start(); writex(0xa0);
- clock(); writex(address);
- clock(); writex(info);
- clock(); stop();
- EA=1;
- delay1(50);
- }
- /*////////////24C08 讀寫驅(qū)動(dòng)程序完/////////////////////
- void Delay2(unsigned int tc) //延時(shí)程序
- {
- while( tc != 0 )
- {unsigned int i;
- for(i=0; i<100; i++);
- tc--;}
- }
- */
- //////////*顯示延時(shí)程序*///////////////
- void Delay(unsigned int tc)
- {while( tc != 0 )
- {unsigned int i;
- for(i=0; i<80; i++);
- tc--;}
- }
- ////////////延時(shí)部分///////////////
- void yanshi (unsigned int count)
- {
- unsigned char i;
- while(count--)
- {for(i=0;i<115;i++);}
- }
- /////////////發(fā)送復(fù)位///////////////
- void fashong (void)
- {
- unsigned char i;
- TMDAT = 0; for(i=0;i<103;i++);
- TMDAT = 1; for(i=0;i<4;i++);
- }
- bit tmrbit (void) //讀一位//
- {
- unsigned int i;
- bit dat;
- TMDAT = 0;
- i++;
- TMDAT = 1;
- i++; i++; //微量延時(shí) //
- dat = TMDAT;
- for(i=0;i<8;i++);
- return (dat);
- }
- unsigned char tmrbyte (void) //讀一個(gè)字節(jié)
- {
- unsigned char i,j,dat;
- dat = 0;
- for (i=1;i<=8;i++)
- { j = tmrbit(); dat = (j << 7) | (dat >> 1); }
- return (dat);
- }
- void tmwbyte (unsigned char dat) //寫一個(gè)字節(jié)
- {
- unsigned char j,i;
- bit testb;
- for (j=1;j<=8;j++)
- { testb = dat & 0x01;
- dat = dat >> 1;
- if (testb)
- { TMDAT = 0; //寫0
- i++; i++;
- TMDAT = 1;
- for(i=0;i<8;i++); }
- else
- { TMDAT = 0; //寫0
- for(i=0;i<8;i++);
- TMDAT = 1;
- i++; i++;}
- }
- }
- void tmstart (void) //發(fā)送ds1820 開始轉(zhuǎn)換
- {
- fashong(); //復(fù)位
- yanshi(1); //延時(shí)
- tmwbyte(0xcc); //跳過序列號(hào)命令
- tmwbyte(0x44); //發(fā)轉(zhuǎn)換命令 44H,
- }
- void tmrtemp (void) //讀取溫度
- {
- unsigned char a,b;
- fashong (); //復(fù)位
- yanshi (1); //延時(shí)
- tmwbyte (0xcc); //跳過序列號(hào)命令
- tmwbyte (0xbe); //發(fā)送讀取命令
- a = tmrbyte (); //讀取低位溫度
- b = tmrbyte (); //讀取高位溫度
- if(b>0x7f) //最高位為1 時(shí)溫度是負(fù)
- {a=~a; b=~b+1; //補(bǔ)碼轉(zhuǎn)換,取反加一
- fg=0; //讀取溫度為負(fù)時(shí)fg=0
- }
- sdata = a/16+b*16; //整數(shù)部分
- xiaoshu1 = (a&0x0f)*10/16; //小數(shù)第一位
- xiaoshu2 = (a&0x0f)*100/16%10;//小數(shù)
- xiaoshu=xiaoshu1*10+xiaoshu2; //小數(shù)
- }
- void DS18B20PRO(void)
- {
- tmstart();
- //yanshi(5); //如果是不斷地讀取的話可以不延
- tmrtemp(); //讀取溫度,執(zhí)行完畢溫度將存于
- }
- void Led()
- {
- if(fg==1) //溫度為正時(shí)顯示的數(shù)據(jù)
- {
- P2=P2&0xef;
- P0=seg7code[sdata/10]; //輸
- Delay(2); P2=P2|0xf0; P2=P2&0xdf;
- P0=seg7code[sdata%10]|0x80; //輸出個(gè)
- Delay(2); P2=P2|0xf0; P2=P2&0xbf;
- P0=seg7code[xiaoshu1]; //輸出小數(shù)點(diǎn)
- Delay(2); P2=P2|0xf0; P2=P2&0x7f;
- P0=seg7code[xiaoshu2]; //輸出小
- Delay(1); P2=P2|0xf0;
- Delay(2); P2=P2|0xf0;P2=P2&0xf7;
- P0=seg7code[j/10]; //輸出十位
- Delay(2); P2=P2|0x0f; P2=P2&0xfb;
- P0=seg7code[j%10]|0x80; //輸出個(gè)位
- Delay(1); P2=P2|0x0f;
- /*
- P2=P2&0x7f;
- P0=seg7code[sdata/10]; //輸出十位
- Delay(8); P2=P2|0xf0;P2=P2&0xbf;
- P0=seg7code[sdata%10]|0x80; //輸出個(gè)位
- Delay(8); P2=P2|0xf0; P2=P2&0xf7;
- P0=seg7code[xiaoshu1]; //輸出小數(shù)點(diǎn)
- Delay(8); P2=P2|0xf0; P2=P2&0xfb;
- P0=seg7code[xiaoshu2]; //輸出小
- Delay(4); P2=P2|0xf0;
- Delay(8); P2=P2|0xf0;P2=P2&0xdf;
- P0=seg7code[j/10]; //輸出十位
- Delay(8); P2=P2|0xf0; P2=P2&0xef;
- P0=seg7code[j%10]|0x80; //輸出個(gè)位
- Delay(4); P2=P2|0xf0;
- */
- if(sdata<=j)
- {
- lan=0;
- hong=1;
- sheng=1;
- };
- if(sdata>=j)
- {
- lan=1;
- hong=0;
- sheng=0;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
智能溫度報(bào)警系統(tǒng).rar
(99.27 KB, 下載次數(shù): 38)
2017-5-22 20:32 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|