历史上的今天
返回首页

历史上的今天

今天是:2024年10月25日(星期五)

正在发生

2019年10月25日 | 单片机+ADC0832+MQ2温度烟雾报警控制

2019-10-25 来源:51hei

1,实物照片
 

 

 

 


2,Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
 

 

元件清单:
1.    AT89C52
2.    40P底座
3.    8P底座
4.    5MM LED*2(红色、绿色)
5.    3MM LED(黄色)
6.    12M晶振
7.    30P瓷片电容*2
8.    10uf电解电容
9.    10K电阻*2
10.    1K电阻*5
11.    16P液晶底座
12.    103电位器*2
13.    9*15万用板
14.    ADC0832芯片
15.    1602液晶
16.    按键*5
17.    继电器
18.    蜂鸣器
19.    MQ2
20.    MQ2底座
21.    DS18B20
22.    3P圆孔母座
23.    8550三极管
24.    8050三极管
25.    自锁开关
26.    DC电源插口
27.    导线 
28.    USB电源线


3整机程序

#include

#include

#include

#include "DS18B20.h"   

#define uint unsigned int

#define uchar unsigned char   //宏定义

#define BEEP P3_4    //定义蜂鸣器

#define hujiao P1_3 

sbit BEEP=P3^4;

sbit hujiao=P1^3;

sbit RS=P2^5;

sbit RW=P2^6;

sbit EN=P2^7;

sbit led_h=P1^4;

sbit led_l=P1^5;

sbit JDQ=P2^0;

sbit ADCS = P3^7;

sbit ADCLK = P3^5;

sbit ADDI = P3^6;

sbit ADDO = P3^6;

bit shanshuo_st;    //闪烁间隔标志

bit beep_st;     //蜂鸣器间隔标志

bit flag=0;//紧急呼叫标志

sbit DIAN = P2^5;        //小数点

uint abc;

uchar x=4;      //计数器

signed char m;     //温度值全局变量

uchar n;      //温度值全局变量

uchar data disdata[5];

uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};

uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00}; // 摄氏温度符号

/*****初始化定时器0*****/

void InitTimer(void)

{

TMOD=0x1;

TH0=0x4c;

TL0=0x00;     //50ms(晶振11.0592M)

}

/*****定时器0中断服务程序*****/

void timer0(void) interrupt 1

{

TH0=0x4c;

TL0=0x00;

x++;

}

/*****读取温度*****/

void check_wendu(void)

{

uint a,b,c;

c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差

a=c/100;     //计算得到十位数字

b=c/10-a*10;    //计算得到个位数字

m=c/10;      //计算得到整数位

n=c-a*100-b*10;    //计算得到小数位

if(m<0){m=0;n=0;}   //设置温度显示上限

if(m>99){m=99;n=9;}   //设置温度显示上限    

}

/*************************lcd1602程序**************************/

void delay1ms(uint ms)//延时1毫秒(不够精确的)

{  uint i,j;

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

}

unsigned char rolmove(unsigned  char m)

  

  unsigned char   a,b,c,d,e,f,g,h;               

a=(m&0x01)<<7;

b=(m&0x02)<<5;

c=(m&0x04)<<3; 

d=(m&0x08)<<1;

e=(m&0x10)>>1;

f=(m&0x20)>>3;

g=(m&0x40)>>5;

h=(m&0x80)>>7;

m=a|b|c|d|e|f|g|h; 

return m;

}

void wr_com(uchar com)//写指令//

{ delay1ms(1);

   RS=0;

   RW=0;

   EN=0;

   P0=rolmove(com);

   delay1ms(1);

   EN=1;

   delay1ms(1);

   EN=0;

}

void wr_dat(uchar dat)//写数据//

{ delay1ms(1);;

   RS=1;

   RW=0;

   EN=0;

   P0=rolmove(dat);

   delay1ms(1);

   EN=1;

   delay1ms(1);

   EN=0;

}

void wr_new()    //写新字符

{

uchar i;

wr_com(0x40);

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

{

  wr_dat(table[i]);

}

}

void lcd_init()//初始化设置//

{ delay1ms(15);

wr_com(0x38);delay1ms(5);

wr_com(0x08);delay1ms(5);

wr_com(0x01);delay1ms(5);

  wr_com(0x06);delay1ms(5);

wr_com(0x0c);delay1ms(5);

wr_new();

wr_com(0x80);

    wr_dat('S');//A

wr_com(0x81);

    wr_dat('m');//:

   wr_com(0x82);

    wr_dat('o');

   wr_com(0x83);

    wr_dat('k');

wr_com(0x84);

    wr_dat('e');

   wr_com(0x85);

    wr_dat(':');

   wr_com(0x87);

    wr_dat('T');

wr_com(0x88);

    wr_dat('e');

   wr_com(0x89);

    wr_dat('m');

   wr_com(0x8a);

    wr_dat(':');

wr_com(0x8d);

    wr_dat('.');

wr_com(0x8f);

    wr_dat('C');

    

wr_com(0xc0);

    wr_dat('A');

wr_com(0xc1);

    wr_dat('l');

wr_com(0xc2);

    wr_dat('a');

   wr_com(0xc3);

    wr_dat('r');

wr_com(0xc4);

    wr_dat('m');

wr_com(0xc5);

    wr_dat(':');

wr_com(0xcb);

    wr_dat('-');

   wr_com(0xce);

    wr_dat('C');   

}

/*****************显示函数******************************/

void disp()//温度值显示

{

     disdata[0]=m/10+0x30;//十位数

     disdata[1]=m%10+0x30;//个位数

     disdata[2]=n+0x30;//小数位

     disdata[3]=abc+0x30;//烟雾浓度

    wr_com(0x8b);

    wr_dat(disdata[0]);//显示十位 

    wr_com(0x8c);

    wr_dat(disdata[1]);//显示个位 

    wr_com(0x8e);

    wr_dat(disdata[2]);//显示小数位

    wr_com(0x86);

    wr_dat(disdata[3]);

}

void baojing()

{

wr_com(0xc9);

    wr_dat(tab[0]+0x30);

wr_com(0xca);

    wr_dat(tab[1]+0x30); 

wr_com(0xcc);

    wr_dat(tab[2]+0x30);

wr_com(0xcd);

    wr_dat(tab[3]+0x30);

wr_com(0xc6);

    wr_dat(tab[4]+0x30);

}

/*****报警子程序*****/

void Alarm()

{

if((m>=shangxian&&beep_st==1)||(melse if(abc>=nongdu&&beep_st==1) BEEP=1;

else BEEP=0;

if(m>=shangxian||melse if(abc>=nongdu) {led_h=0;led_l=1;JDQ=0;}

else {led_h=1;led_l=0;JDQ=1;}

if(x>=10){beep_st=~beep_st;x=0;}

}

void Alarm1()

{

led_h=0;

led_l=1;

if(x>=10){beep_st=~beep_st;x=0;}

if(beep_st==1)BEEP=1;

else BEEP=0;

led_h=0;

led_l=1;

JDQ=0;

}

uchar ADC0832(bit mode,bit channel)     //AD转换,返回结果

{

uchar i,dat,ndat;


ADCS = 0;//拉低CS端

_nop_();

_nop_();


ADDI = 1; //第1个下降沿为高电平

ADCLK = 1;//拉高CLK端

_nop_();

_nop_();

ADCLK = 0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();


ADDI = mode; //低电平为差分模式,高电平为单通道模式。 

ADCLK = 1;//拉高CLK端

_nop_();

_nop_();

ADCLK = 0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();


ADDI = channel; //低电平为CH0,高电平为CH1 

ADCLK = 1;//拉高CLK端

_nop_();

_nop_();

ADCLK = 0;//拉低CLK端,形成下降沿3


ADDI = 1;//控制命令结束(经试验必需)

dat = 0;

//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)

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

{

  dat <<= 1;

  ADCLK=1;//拉高时钟端

  _nop_();

  _nop_();

  ADCLK=0;//拉低时钟端形成一次时钟脉冲

  _nop_();

  _nop_();

  dat |= ADDO;

}

ndat = 0;     //记录D0

if(ADDO == 1)

ndat |= 0x80;

//下面开始继续读取反序的数据(从D1到D7) 

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

{

  ndat >>= 1;

  ADCLK = 1;//拉高时钟端

  _nop_();

  _nop_();

  ADCLK=0;//拉低时钟端形成一次时钟脉冲

  _nop_();

  _nop_();

  if(ADDO==1)

  ndat |= 0x80;

}   

ADCS=1;//拉高CS端,结束转换

ADCLK=0;//拉低CLK端

ADDI=1;//拉高数据端,回到初始状态

if(dat==ndat)

return(dat);

else

return 0;   

}

/*****主函数*****/

void main(void)

{

InitTimer();    //初始化定时器

EA=1;      //全局中断开关

TR0=1;

ET0=1;      //开启定时器0

BEEP=0;

led_h=1;

led_l=1;

JDQ=1;

check_wendu();

check_wendu();

lcd_init();//初始化显示

delay1ms(100);

lcd_init();//初始化显示

delay1ms(100);

while(1)

{

if(hujiao==0)

{

   Delay(2000);

   do{}while(hujiao==0);

   flag=~flag;

}

checkkey();

  abc = ADC0832(1,0);  //差分模式,CH0-CH1

  abc = abc*19.607843; //转换为实际电压便于显示

  abc=abc/1000%10;

    check_wendu();

disp();

baojing();

if(flag==1){Alarm1();JDQ=0;}

else    Alarm();   //报警检测

if(set_st==0) wr_com(0x0c);

if(set_st==1)

{

wr_com(0xc6);

wr_com(0x0d);

delay1ms(150);

}

if(set_st==2)

{

wr_com(0xca);

wr_com(0x0d);

delay1ms(150);

}

if(set_st==3)

{

wr_com(0xcd);

wr_com(0x0d);

delay1ms(150);

}

}

}/*****END*****/



推荐阅读

史海拾趣

HDP_Power公司的发展小趣事

关于电蚊拍的基本电路,网友可能提出的问题及回答如下:

问题一:电蚊拍的基本电路由哪些部分组成?

回答:电蚊拍的基本电路主要由三个核心部分组成:阻容降压电路(或称为高频振荡电路)、倍压整流电路以及高压电击网。

  1. 阻容降压电路(高频振荡电路):这部分电路主要负责将直流电源(如电池提供的3V直流电)转换为高频交流电,通常频率在18kHz左右。这一转换过程由三极管和变压器等元件共同完成,通过变压器的升压作用,将电压提升到数百伏。

  2. 倍压整流电路:高频交流电经过升压后,进入倍压整流电路。这个电路通过多个二极管和电容的组合,将电压进一步升高到足以电击蚊虫的水平,通常可达到1500V左右。常见的倍压整流电路有三倍压、四倍压等多种连接方式。

  3. 高压电击网:高压电击网是电蚊拍的输出部分,由细密的金属网格构成。当蚊虫接触到金属网格时,会形成电路通路,导致蚊虫被高压电击死。

问题二:为什么电蚊拍使用一段时间后,电击效果会变差?

回答:电蚊拍使用一段时间后电击效果变差的原因可能包括以下几点:

  1. 电容老化:电蚊拍中的倍压电容(如CBB电容)在频繁充放电过程中会逐渐老化,其容量会逐渐下降,导致储能能力降低,从而影响电击效果。

  2. 元件损坏:电蚊拍中的二极管、三极管等元件在长时间使用后可能出现损坏或性能下降,导致电路无法正常工作或电压无法升到足够高的水平。

  3. 电池电量不足:电池是电蚊拍的能量来源,如果电池电量不足,将直接影响电蚊拍的电击效果。

  4. 金属网格污染或变形:金属网格在使用过程中可能会受到污染或变形,导致接触不良或短路,从而影响电击效果。

问题三:如何判断电蚊拍是否需要维修?

回答:可以通过以下几种方法来判断电蚊拍是否需要维修:

  1. 观察指示灯:如果电蚊拍的指示灯不亮或亮度明显降低,可能是电池电量不足或电路存在故障。

  2. 检查电击效果:如果电蚊拍在使用时电击效果变差或无法电击蚊虫,可能是电路中的元件损坏或老化。

  3. 测量电压:使用万用表等工具测量电蚊拍输出端的电压,如果电压明显低于正常值(如1500V左右),则说明电路存在问题。

  4. 检查金属网格:观察金属网格是否干净、平整、无变形或短路现象。

问题四:如何维修电蚊拍?

回答:维修电蚊拍需要一定的电子知识和技能,以下是一些基本的维修步骤:

  1. 检查电池:首先检查电池是否电量充足且接触良好。如果电池电量不足,应及时更换新电池。

  2. 清洁金属网格:使用软布或棉签等工具清洁金属网格上的污垢和灰尘。

  3. 检查并更换元件:如果确定是电路中的元件损坏导致的问题,应使用万用表等工具检测并更换损坏的元件。常见的损坏元件包括二极管、三极管、电容等。

  4. 调整电路:在更换元件后,可能需要调整电路中的某些参数(如电阻值、电容容量等)以确保电路能够正常工作。

  5. 测试电击效果:在维修完成后,应使用万用表等工具测试电蚊拍的电击效果是否恢复正常。

请注意,由于电蚊拍内部涉及高压电路,因此在维修过程中应确保安全操作,避免触电等危险情况的发生。如果不具备相关知识和技能,建议将电蚊拍送至专业维修机构进行维修。

AnDAPT__Inc.公司的发展小趣事

AnDAPT Inc.是一家专注于可编程电源管理解决方案的创新型公司。以下是关于该公司发展的相关故事:

  1. 公司成立与初期阶段:AnDAPT Inc.成立于2014年,总部位于美国加利福尼亚州圣何塞。公司的创始人之一是Raghunandan "Raghu" Anandan,他在可编程电源管理领域拥有丰富的经验和专业知识。公司成立之初,致力于开发一种新型的可编程电源管理解决方案,以满足日益复杂和多样化的电子设备对电源管理的需求。

  2. 技术创新与产品开发:AnDAPT Inc.在其成立初期即开始着手开发基于可编程电源管理技术的解决方案。公司团队结合了数字信号处理(DSP)和模拟电路设计等领域的专业知识,不断推动技术创新和产品开发。他们的主要产品是基于可编程电源管理器件的芯片,能够根据应用需求动态调整电源管理参数,提供高效、灵活和智能的电源解决方案。

  3. 市场拓展与合作伙伴关系:随着公司技术的不断成熟和产品的不断推出,AnDAPT Inc.开始加大对市场的拓展力度。公司与电子设备制造商、系统集成商以及电源管理解决方案提供商建立了紧密的合作关系,共同推动可编程电源管理技术的应用和推广。通过与行业领先的合作伙伴进行合作,AnDAPT Inc.不断拓展产品的应用领域和市场份额。

  4. 技术认证与市场认可:AnDAPT Inc.的产品经过严格的技术认证和市场测试,在业界获得了良好的口碑和市场认可。公司的可编程电源管理解决方案被广泛应用于各种电子设备,包括消费类电子产品、工业自动化设备、汽车电子系统等。其技术创新和产品性能得到了行业专家和客户的一致好评。

  5. 持续发展与未来展望:作为一家专注于可编程电源管理技术的创新型公司,AnDAPT Inc.将继续致力于技术创新和产品开发。公司将不断推出新的产品和解决方案,满足客户不断变化的需求,并积极参与行业标准的制定和技术进步的推动。在未来,AnDAPT Inc.将继续保持敏锐的市场洞察力和技术领先地位,助力客户实现产品创新和市场竞争优势。

EDAC公司的发展小趣事

精英电脑(ECS)自1987年成立以来,一直以其卓越的技术创新能力在电子行业中占据一席之地。公司早期专注于主板的研发和生产,凭借其稳定的性能和出色的兼容性,迅速赢得了市场的认可。随着科技的进步,ECS不断拓宽产品线,从主板扩展到台式机、笔记本电脑、平板电脑等多个领域。在技术创新方面,ECS始终坚持自主研发,不断推出具有行业领先水平的新产品,如采用最新制程技术的主板、搭载高性能处理器的笔记本电脑等。这些创新产品不仅提升了ECS的品牌形象,也为公司带来了可观的利润。

BLACK&DECKER公司的发展小趣事

随着公司的不断发展壮大,BLACK&DECKER开始进军国际市场。1993年,公司在中国成立了第一家工厂,这标志着BLACK&DECKER全球化战略的重要一步。此后,公司通过在全球范围内设立生产基地和销售网络,不断扩大品牌影响力。同时,BLACK&DECKER还通过收购其他知名品牌,如得伟(DeWalt)等,进一步巩固了其在电子行业中的领先地位。

璟德(ACX)公司的发展小趣事

2008年,璟德(ACX)成功在台北证券交易所上市,股票代码为3152。这一举措为公司带来了更多的资金支持,也提升了其品牌影响力和市场地位。上市后,璟德(ACX)加大了对研发和市场拓展的投入,进一步巩固了其在无线通信领域的领先地位。

Computer Conversions Corp公司的发展小趣事

面对日益严峻的环境问题,Computer Conversions Corp积极响应环保号召,开始研发更加环保的计算机转换技术。公司不仅优化了生产工艺,减少了生产过程中的能源消耗和废弃物排放,还推出了一系列节能型转换设备,帮助客户在提升计算效率的同时,也降低了能源消耗。这一举措不仅赢得了客户的赞赏,也提升了公司的社会形象。

问答坊 | AI 解惑

漏电保护器的作用

低压配电系统中设漏电保护器是防止人身触电事故的有效措施之一,也是防止因漏电引起电气火灾和电气设备损坏事故的技术措施。但安装漏电保护器后并不等于绝对安全,运行中仍应以预防为主,并应同时采取其他防止触电和电气设备损坏事故的技术措施。 ...…

查看全部问答>

ce6.0 rc3有人试过了吗??

看到不少感兴趣的东西,原有的rc2下的bsp应该不需要修改就可以了吧? 有人试过ie和flash,手势识别怎么样吗…

查看全部问答>

LM3S8962串口问题解决了

前段时间比较忙,没来得及分析LM3S8962串口问题。今天花了一上午时间搞定了,原来是232片子坏了,换了个新的,串口能调通了。顺便发点LM3S8962串口的资料,大家共同学习进步。 [ 本帖最后由 beyondvv 于 2010-9-25 22:27 编辑 ]…

查看全部问答>

请各位模拟电路高手指教!

图中是一个产生500V左右高压的稳幅振荡电路,其中振荡电路点部分有一个磁罐,其中绕线如下图所示,磁罐输出端是100匝绕线,500V高压,和三极管 连接的是1匝和4匝绕线,电感分别是0.2uH和1.1uH左右,分别接在三极管的发射级和集电极,发射极的2个电 ...…

查看全部问答>

stm32的flash有几种加密方法?望各个大大不吝赐教

                                 就是防止程序被读出来,看手册上有一种是通过设置flash寄存器加密。但是有看见别人提到利用96位的stm32芯片ID号加 ...…

查看全部问答>

Q:LM3S控制电路与主电路隔离

一般都采用什么方法啊,亲。。。。…

查看全部问答>

传感器的参数怎么理解呢?求助,我是个初学者

传感器的参数怎么理解呢?求助,我是个初学者…

查看全部问答>

用TB捕获脉宽

想用TBCCRO捕获脉冲低电平宽度,思路是:tbccr0捕获到下降沿中断,则记下tbccro的值,并改为上升沿触发;捕获到上升沿中断,则记下tbccro的值,改为下降沿触发。 硬件:单片机:MSP430F149       晶振:32K,8M 输入信号:通过无 ...…

查看全部问答>

HT1621B稳定性

使用msp430f5418+HT1621B驱动段式液晶 先调试了两块样机 一切正常 但是后来把样机发给客户之后 客户再回发给我后 我想再做一些相关测试 供电一段时间后发现显示忽然不正常了 灰度很暗很暗 随后又焊接两块板子进行调试 都是一样的症状 最后进行相关 ...…

查看全部问答>

求个黑白信号,要做一个平板电视机的ERP,要用到黑白信号输入,有个发下,谢谢

求个黑白信号,要做一个平板电视机的ERP,要用到黑白信号输入,有个发下,谢谢…

查看全部问答>