历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2020年12月24日 | 51单片机智能火灾报警系统

2020-12-24 来源:51hei

单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

#include


//数码管段选定义      0     1    2    3    4    5         6         7          8           9       

uchar code smg_du[]={0x05,0xdd,0x46,0x54,0x9c,0x34,0x24,0x5d,0x04,0x14,

                                           0x0c,0xa4,0x27,0xc4,0x26,0x2e,0xff};         //断码

//数码管位选定义

uchar code smg_we[]={0x7f,0xbf,0xdf,0xef};


uchar dis_smg[8]  = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};       


sbit CS=P3^2;                //CS定义为P1口的第4位脚,连接ADC0832CS脚  PCB

sbit SCL=P3^3;                //SCL定义为P1口的第3位脚,连接ADC0832SCL脚

sbit DO=P3^4;                //DO定义为P1口的第4位脚,连接ADC0832DO脚



sbit dq   = P3^5;        //18b20 IO口的定义

sbit beep = P3^6;   //蜂鸣器IO口定义

uint temperature,s_temp=35;  //温度的变量

uchar dengji,s_dengji=5;     //烟物等级

uchar shoudong;            //手动报警键


uchar flag_huoyan;



bit flag_300ms = 1;

uchar key_can;                 //按键值的变量

uchar menu_1;        //菜单设计的变量


/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

        uint i,j;

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

}


/***********************小延时函数*****************************/

void delay_uint(uint q)

{

        while(q--);

}


/***********************18b20初始化函数*****************************/

void init_18b20()

{

        bit q;

        dq = 1;                                //把总线拿高

        delay_uint(1);            //15us

        dq = 0;                                //给复位脉冲

        delay_uint(80);                //750us

        dq = 1;                                //把总线拿高 等待

        delay_uint(10);                //110us

        q = dq;                                //读取18b20初始化信号

        delay_uint(20);                //200us

        dq = 1;                                //把总线拿高 释放总线

}


/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

        uchar i;

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

        {                                         //写数据是低位开始

                dq = 0;                         //把总线拿低写时间隙开始

                dq = dat & 0x01; //向18b20总线写数据了

                delay_uint(5);         // 60us

                dq = 1;                         //释放总线

                dat >>= 1;

        }       

}


/*************读取18b20内的数据***************/

uchar read_18b20()

{

        uchar i,value;

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

        {

                dq = 0;                         //把总线拿低读时间隙开始

                value >>= 1;         //读数据是低位开始

                dq = 1;                         //释放总线

                if(dq == 1)                 //开始读写数据

                        value |= 0x80;

                delay_uint(5);         //60us        读一个时间隙最少要保持60us的时间

        }

        return value;                 //返回数据

}


/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

        uint value;

        uchar low;                           //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

        init_18b20();                   //初始化18b20

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0x44);           //启动一次温度转换命令

        delay_uint(50);                   //500us


        init_18b20();                   //初始化18b20

       

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0xbe);           //发出读取暂存器命令

       

        EA = 0;

        low = read_18b20();           //读温度低字节

        value = read_18b20();  //读温度高字节

        EA = 1;

        value <<= 8;                   //把温度的高位左移8位

        value |= low;                   //把读出的温度低位放到value的低八位中

        value *= 0.0625;               //转换到温度值

        return value;                   //返回读出的温度

}



/***********读数模转换数据********************************************************/       

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的


unsigned char ad0832read(unsigned char channel)

{

        uchar i=0;

        uchar j;

        uint dat=0;

        uchar ndat=0;

        uchar  Vot=0;


        if(channel==0)channel=2;

        if(channel==1)channel=3;

        DO=1;

        _nop_();

        _nop_();

        CS=0;//拉低CS端

        _nop_();

        _nop_();

        SCL=1;//拉高CLK端

        _nop_();

        _nop_();

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

        _nop_();

        _nop_();

        SCL=1;//拉高CLK端

        DO=channel&0x1;

        _nop_();

        _nop_();

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

        _nop_();

        _nop_();

        SCL=1;//拉高CLK端

        DO=(channel>>1)&0x1;

        _nop_();

        _nop_();

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

        DO=1;//控制命令结束

        _nop_();

        _nop_();

        dat=0;

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

        {

                dat|=DO;//收数据

                SCL=1;

                _nop_();

                _nop_();

                SCL=0;//形成一次时钟脉冲

                _nop_();

                _nop_();

                dat<<=1;

                if(i==7)dat|=DO;

        }

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

        {

                j=0;

                j=j|DO;//收数据

                SCL=1;

推荐阅读

史海拾趣

CETC公司的发展小趣事

作为一家大型国有企业,CETC始终将社会责任放在首位。公司积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。同时,CETC还注重环保和可持续发展,在生产过程中采用环保材料和工艺,降低对环境的影响。这些举措不仅提升了公司的社会形象,也赢得了社会各界的广泛赞誉。

以上五个故事分别从科研突破、产业合作、海外市场布局、人才培养与团队建设以及社会责任等方面描述了CETC公司的发展过程。这些故事都是基于CETC在电子行业中的实际表现和公开资料进行的创作,旨在客观展现公司的发展历程和成就。当然,CETC的发展故事远不止这些,更多精彩的故事还需要我们进一步去发掘和了解。

Appointech Inc公司的发展小趣事

为了进一步扩大市场份额,Appointech Inc公司开始积极拓展海外市场。通过与国际知名企业的合作,公司成功打入国际市场,产品销量大幅提升。同时,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的长远发展奠定了坚实的基础。

Elektron公司的发展小趣事

随着环保意识的不断提高和可持续发展理念的普及,Elektron公司开始注重环保和可持续发展方面的工作。公司积极采用环保材料和节能技术,降低产品制造过程中的能耗和排放。同时,Elektron还加强了对废弃物的处理和回收工作,努力实现资源的循环利用和环境的可持续发展。这些措施不仅有助于公司降低成本和提高效率,也符合社会和消费者对环保和可持续发展的期望和要求。

以上五个故事分别从不同角度概述了Elektron公司的发展过程,包括创立与初期发展、技术创新与产品多样化、全球扩张与市场领导地位、技术突破与行业引领以及环保理念与可持续发展等方面。这些故事共同构成了Elektron公司丰富多彩的发展历程和辉煌成就。

ECM [ECM Electronics Limited.]公司的发展小趣事

面对日益严重的环境问题,ECM Electronics Limited.积极响应国家节能减排的号召,将绿色发展和可持续发展作为企业的重要战略。公司采用环保材料和节能技术,降低产品能耗和排放。同时,公司还积极参与环保公益活动,推动行业绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

Amperite Co公司的发展小趣事

ECM Electronics Limited.自创立之初,就注重技术创新。公司投入大量研发资金,专注于开发高效、节能的电子产品。通过不断的技术迭代和产品创新,ECM成功推出了一系列具有竞争力的产品,逐渐在市场上建立了良好的口碑。同时,公司还积极与高校和科研机构合作,引进先进技术,为公司的持续发展提供了强大的技术支撑。

aconno公司的发展小趣事

aconno深知人才是企业发展的核心动力。因此,公司一直致力于打造一支高素质、专业化的团队。通过招聘优秀人才、提供专业培训、建立激励机制等一系列措施,aconno成功吸引和留住了一批业内精英。这些人才为公司的技术创新和市场拓展提供了有力支持,成为aconno发展壮大的重要保障。

问答坊 | AI 解惑

自己写得一个DDS 效果不错!!

自己前段时间学习得时候写得一个DDS   希望大家喜欢!!!!!!!!…

查看全部问答>

现在貌似找工作时都没要求同时得会arm和fpga

如果同时掌握了arm和cpld会不会有所帮助? 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

求ADC0809资料,电路图或小程序

那位大哥有的话发一个到我邮箱行吗?谢谢! sodik@126.com…

查看全部问答>

请教:X 开N次方在硬件上如何实现?

请教:X 开N次方在硬件上如何实现?…

查看全部问答>

NDIS的一点疑问?

我的是一个协议层驱动,有个疑问就是 A.使用CreateService,OpenService,QueryServiceStatus及StartService等一系列API安装起来的驱动 B.使用Inf文件及INetCfg的COM接口安装的驱动 问题是 1.这两种方式有什么不同? 2.为什么A安装后\"本地连接\" ...…

查看全部问答>

当我开辟一个大的数组到外部sram,lcd就不能正常显示了

我现在做图片解码显示,用的是ze的片子,我开辟了的一个大的数组在sram里,请放心这个数组确实在外部,我去过地址查看,0x6800xxx位置,现在的问题是,我如果把这个数组开辟的小一点,比如几百字节,lcd显示正常,开辟大来人比如几百k &n ...…

查看全部问答>

全国电子设计竞赛A题交流群101126312

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 全国电子设计竞赛A题交流群101126312  …

查看全部问答>

初学者求助C54x程序运行结果

请各位大侠帮忙看一下如下三条语句,已知(80H)=20H,(81H)=30H, LD #0,DP LD 80H,16,B ADD 81H,B 运行后B等于多少?这到底是属于绝对地址寻址还是直接寻址啊?谢谢!…

查看全部问答>

想买msp430开发板,坛里有吗?

想买msp430开发板,坛里有吗?谢谢,麻烦贴个网址! 另外建议斑竹开辟一个关于购买开发板的小版块,呵呵!…

查看全部问答>

msp430f5418的DCO最高倍频是多少

msp430f5418的DCO最高倍频多少?能不能倍到40MHz或以上?尝试过没成功…

查看全部问答>