|
分享一个ds18b20传感器检测环境温度,数码管显示并且超过一定温度蜂鸣器蜂鸣报警,下面是部分电路仿真图。
51单片机源程序:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DS=P2^2; //define interface
- uint temp; // variable of temperature
- uchar flag1; // sign of the result positive or negative
- sbit wela1=P2^4; //段选信号的锁存器控制
- sbit wela2=P2^5;
- sbit wela3=P2^6; //段选信号的锁存器控制
- sbit wela4=P2^7; //位选信号的锁存器控制
- sbit beep=P2^3;
- unsigned char code table[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
- 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
- 0x87,0xff,0xef};
- void delay(uint count) //delay
- {
- uint i;
- while(count)
- {
- i=200;
- while(i>0)
- i--;
- count--;
- }
- }
- void dsreset(void) //send reset and initialization command
- {
- uint i;
- DS=0;
- i=103;
- while(i>0)i--;
- DS=1;
- i=4;
- while(i>0)i--;
- }
- bit tmpreadbit(void) //read a bit
- {
- uint i;
- bit dat;
- DS=0;i++; //i++ for delay
- DS=1;i++;i++;
- dat=DS;
- i=8;while(i>0)i--;
- return (dat);
- }
- uchar tmpread(void) //read a byte date
- {
- uchar i,j,dat;
- dat=0;
- for(i=1;i<=8;i++)
- {
- j=tmpreadbit();
- dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
- }
- return(dat);
- }
- void tmpwritebyte(uchar dat) //write a byte to ds18b20
- {
- uint i;
- uchar j;
- bit testb;
- for(j=1;j<=8;j++)
- {
- testb=dat&0x01;
- dat=dat>>1;
- if(testb) //write 1
- {
- DS=0;
- i++;i++;
- DS=1;
- i=8;while(i>0)i--;
- }
- else
- {
- DS=0; //write 0
- i=8;while(i>0)i--;
- DS=1;
- i++;i++;
- }
- }
- }
- void tmpchange(void) //DS18B20 begin change
- {
- dsreset();
- delay(1);
- tmpwritebyte(0xcc); // address all drivers on bus
- tmpwritebyte(0x44); // initiates a single temperature conversion
- }
- uint tmp() //get the temperature
- {
- float tt;
- uchar a,b;
- dsreset();
- delay(1);
- tmpwritebyte(0xcc);
- tmpwritebyte(0xbe);
- a=tmpread();
- b=tmpread();
- temp=b;
- temp<<=8; //two byte compose a int variable
- temp=temp|a;
- tt=temp*0.0625;
- temp=tt*10+0.5;
- return temp;
- }
- void display(uint temp) //显示程序
- {
-
- uchar A1,A2,A2t,A3;
- A1=temp/100;
- A2t=temp%100;
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
数码管显示温度并报警 .rar
(63.77 KB, 下载次数: 68)
|
评分
-
查看全部评分
|