基于单片机的温控报警系统设计 ,

发布者:数据梦行者最新更新时间:2022-03-24 来源: eefocus关键字:单片机  温控  报警系统 手机看文章 扫描二维码
随时随地手机看文章

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

#include

#include

#include

code unsigned char seg7code[11]=

{ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x40}; //显示段码

 

sbit TMDAT =P3^1; //DS18B20 的数据输入/输出脚DQ,根据情况设定

 

sbit jia=P2^1;

sbit jian=P2^0;

sbit hong=P1^0;//红色警告灯

sbit sheng=P1^1;//蜂鸣器

sbit lan=P1^2;//兰色灯

bit write=0; //写24C08 的标志;

 

j=30;

unsigned int sdata;//测量到的温度的整数部分

unsigned char xiaoshu1;//小数第一位

unsigned char xiaoshu2;//小数第二位

unsigned char xiaoshu;//两位小数

 

bit fg=1; //温度正负标志

 

24C08 读写驱动程序

sbit scl=P3^4; // 24c08 SCL

sbit sda=P3^5; // 24c08 SDA

 

void delay1(unsigned char x)

{ unsigned int i;

for(i=0;i;}

 

void flash()

{ ; ; }

 

void x24c08_init() //24c08 初始化子程序

{scl=1; flash(); sda=1;  flash();}

 

void start() //启动(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) //写一个字节

{ 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() //读一个字节

{

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)线时钟

{

unsigned char i=0;

scl=1; flash();

while ((sda==1)&&(i<255))i++;

scl=0; flash();

}

 

//从24c02 的地址address 中读取一个字

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 地址中写入一字节数据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 读写驱动程序完/

void Delay2(unsigned int tc) //延时程序

{

while( tc != 0 )

{unsigned int i;

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

tc--;}

}

*/

 

//*显示延时程序*///

void Delay(unsigned int tc)

{while( tc != 0 )

{unsigned int i;

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

tc--;}

}

 

延时部分///

void yanshi (unsigned int count)

{

unsigned char i;

while(count--)

{for(i=0;i<115;i++);}

}

 

/发送复位/// 

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++; //微量延时 //

dat = TMDAT;

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

return (dat);

}

 

unsigned char tmrbyte (void) //读一个字节

{

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)

{

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) //发送ds1820 开始转换

{

fashong(); //复位

yanshi(1); //延时

tmwbyte(0xcc); //跳过序列号命令

tmwbyte(0x44); //发转换命令 44H,

}                   

void tmrtemp (void) //读取温度

{

unsigned char a,b;

fashong (); //复位

yanshi (1); //延时

tmwbyte (0xcc); //跳过序列号命令

tmwbyte (0xbe); //发送读取命令

a = tmrbyte (); //读取低位温度

b = tmrbyte (); //读取高位温度

if(b>0x7f) //最高位为1 时温度是负

{a=~a; b=~b+1; //补码转换,取反加一

fg=0; //读取温度为负时fg=0

}

sdata = a/16+b*16; //整数部分

xiaoshu1 = (a&0x0f)*10/16; //小数第一位

xiaoshu2 = (a&0x0f)*100/16%10;//小数

xiaoshu=xiaoshu1*10+xiaoshu2; //小数

}

void DS18B20PRO(void)

{

tmstart();

//yanshi(5); //如果是不断地读取的话可以不延

tmrtemp(); //读取温度,执行完毕温度将存于

}

void Led()

{

if(fg==1) //温度为正时显示的数据

{

  P2=P2&0xef;

P0=seg7code[sdata/10]; //输

Delay(2); P2=P2|0xf0; P2=P2&0xdf;

P0=seg7code[sdata%10]|0x80; //输出个

Delay(2); P2=P2|0xf0; P2=P2&0xbf;

P0=seg7code[xiaoshu1]; //输出小数点

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; //输出个位 

Delay(1); P2=P2|0x0f;

 

if(sdata<=j)

{

lan=0;

hong=1;

sheng=1;

};

if(sdata>=j)

{

lan=1;

hong=0;

sheng=0;

}; 

}

if(fg==0) //温度为负时显示的数据

{ P2=P2&0xef;

P0=seg7code[11]; //负号

Delay(8); P2=P2|0xf0; P2=P2&0xdf;

P0=seg7code[sdata/10]|0x80; //输出十位

Delay(8); P2=P2|0xf0; P2=P2&0xbf;

P0=seg7code[sdata%10]; //输出个位

Delay(8); P2=P2|0xf0; P2=P2&0x7f;

P0=seg7code[xiaoshu1]; //输出小

Delay(4); P2=P2|0xf0;

}

}

main()

{fg=1;

x24c08_init(); //初始化24C08

j=x24c08_read(2);//读出保存的数据

while(1)

{

DS18B20PRO();

Led();

if(jia==0)

{Delay(200);j++;}

if(jian==0)

{Delay(200);j--;}

x24c08_write(2,j);

}

}

关键字:单片机  温控  报警系统 引用地址:基于单片机的温控报警系统设计 ,

上一篇:基于单片机的智能小车系统设计
下一篇:基于单片机的水温液位自动控制系统设计

推荐阅读最新更新时间:2024-11-07 10:21

单片机C语言优化
一、程序结构的优化 虽然并不会影响生成代码的质量,但是在实际编写过程中还是要遵循一定的书写规则,一个书写清晰明了的程序有利于以后的维护。在书写程序时,特别是对于while、for、do while、if else、switch case等语句或这些语句嵌套组合时,应采用 缩格 的书写形式。 二、标识符 程序种使用的用户标识符除要遵循标识符的命名规则以外,一半不要用代数符号(如a、b、x1、x2)作为变量名,应选取具有相关含义的英文单词(或缩写)或拼音作为标识符,增加程序的可读性。 三、程序结构 C语言是一种高级程序设计语言,提供了十分完备的规范化流程控制结构。因此在采用C语言设计单片机应用程序时,首先要注意尽可能采用结构化
[单片机]
STC单片机控制BH1750测量光照强度程序
#include reg51.h #include intrins.h bit write=0; sbit SDA=P2^0; sbit SCL=P2^1; typedef unsigned char BYTE; BYTE BUF ; unsigned char num; unsigned char a,b,sec,count; unsigned char ge,shi,bai,qian,wan; //显示变量 int dis_data,dis_data1; //变量 void conversion(unsigned int temp_data) //
[单片机]
STC<font color='red'>单片机</font>控制BH1750测量光照强度程序
RS 232串口通信在PC机与单片机通信中的应用
  随着物联网技术的迅速发展和日益成熟,超低功耗的无线传感器已成为物联网的重要组成单元。无线传感器网络通过将大量的传感器节点部署在监测区域内,使用无线电通信方式形成一个多跳的具有动态拓扑结构的自组织网络系统,目前已得到了广泛应用。但是采用传统供电模式的传感器节点一旦电池耗尽需要重新更换电池,如果传感器节点大量分布,人工更换电池所需的工作将不容忽视。随着超低功耗芯片技术的越发成熟,收集周围环境中的无线射频能量提供电能成为一种有效可行的新型能源供应模式。近年来,随着通信技术的迅速发展,环境中充斥着大量的无线电波信号,主要包括移动电话(GSM) 频段和工业通讯(ISM) 频段。未来的很长一段时间内,多种通信网络共存,也为射频能量收集系统
[电源管理]
RS 232串口通信在PC机与<font color='red'>单片机</font>通信中的应用
单片机PWM技术实现呼吸灯和KTV等娱乐场所的灯光闪烁效果
程序是在51hei单片机开发板上面做的,电路很简单,最小系统+P0的八个led即可.ADDR0和ENLED那是开发板上的led使能电路控制端,如果是你自己做的电路 可以删掉这几个语句.或者不用管他,不会影响程序的运行. /** ************************************************************************************************************ * @file : main.c * @author : xr * @date : 2014年4月15日20:34:05 - 2014年4月15日22:28:08 * @version: V
[单片机]
基于MCS-51单片机的智能时钟控制系统设计的技巧
  随着电子技术产业结构调整,生产工艺的飞速发展,人们生活水平的不断提高,家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。本文所述智能时钟控制系统主要指时钟显示、时间设置、闹铃及家用电器定时开关机(可扩展功能)等控制系统。   本文采用进入市场时间早、总线开放、仿真开发设备多、芯片及其开发设备价格低廉、速度较快、电磁兼容性较好的MCS-51型单片机为核心实现智能时钟控制。   硬件系统设计   智能时钟控制系统以MCS-51MC3399T兼容单片机AT89C51微处理器为核心,由时钟显示模块、定时控制模块、电源模块等电路组成。   AT89C51微处理器   AT89C51是一款采用ATMEL高密度非易失存储器M
[单片机]
单片机微处理器看门狗监控电路
  在微处理器的工作过程中,如遇到来自电源或外界的干扰,有可能使读出的指令或程序指针地址发生错误,在这种情形下,将使微处理器错误地执行指令,或者到错误的地址去取指令,以至发生混乱,使整个系统无法正常地工作。微处理器监控电路实际上是一个复位电路,其作用是及时地发现上述情况,并向微处理器发出复位信号,以控制系统重新工作。常用的监控电路具有两个功能,一个功能是对电源电压的监控,通过对电源电压波动范围的设置,此电路通过电压比较器监视电源电压,一旦电源电压低于设定值,比较器的输出控制产生复位电路,使系统重新工作。监控电路的另一个功能是对执行程序的监视,此电路的框图如图1所示,它由一个计数器和复位电路构成,当计数器计数溢出时,将控制复位电路产生
[单片机]
<font color='red'>单片机</font>微处理器看门狗监控电路
单片机10分钟(带暂停)倒计时程序
ORG 0000H AJMP MAIN ORG 000BH AJMP INTT0 ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR,#TAB SETB EA SETB ET0 SETB TR0 L2: MOV R7,#00H L1: MOV A,#0 MOV B,#10 DIV AB SETB P2.2 SETB P2.1 SETB P2.0 MOVC A,@A+DPTR MOV P0,A CLR P2.3 SETB P2.3 MOV A,B MOVC A,@A+D
[单片机]
Proteus软件在嵌入式系统教学中的应用研究
0 引言     嵌入式系统是一门涉及计算机体系结构、计算机软件以及其他相关电子技术的综合技术。目前,嵌入式系统技术已经成为最热门的技术之一,各类企业对具备嵌入式系统设计开发能力人才的需求量非常旺盛。在目前各高校开设的嵌入式系统课程中,普遍采用的微处理器是8位的单片机8051,32位ARM7TDMI核的飞利浦NXP LPC系列和三星S3C4480芯片。首先以单片机作为嵌入式系统设计学习的入门,掌握了基本的概念和设计方法之后,再把ARM7内核CPU作为一种“功能更强大的单片机”,无缝升级到流行的ARM平台。     传统的嵌入式系统教学,课堂环节多是纯理论教学,实践环节一般也是使用传统的实验箱,实验项目较少,内容固定,创新手
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved