历史上的今天
返回首页

历史上的今天

今天是:2025年07月29日(星期二)

正在发生

2020年07月29日 | 单片机红外热释报警器

2020-07-29 来源:51hei

#include                  //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

//   红外热释电传感器 平时为0  有输出为1

sbit beep  = P2^5;           //蜂鸣器定义
sbit red   = P0^1;           //红色发光二极管定义
sbit green = P0^4;           //绿色发光二极管定义
sbit yellow = P0^7;           //黄色发光二极管定义
sbit hw    = P0^0;           //红外热释传感器定义
bit flag_500ms = 0;
uchar flag_alarm ;     //报警标志位
uchar flag_bufang ;    //布防标志位
uchar flag_bufang_en ; //布防标志位使能
uint  flag_value;      //用做定时器的变量

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
        uint i,j;
        for(i=0;i                for(j=0;j<120;j++);
}

/********************独立按键程序*****************/
uchar key_can;         //按键值

void key()         //独立按键程序
{
        static uchar key_new;
        key_can = 20;                   //按键值还原
        P1 |= 0xff;
        if((P1 & 0xff) != 0xff)                //按键按下
        {
                delay_1ms(1);                     //按键消抖动
                if(((P1 & 0xff) != 0xff) && (key_new == 1))
                {                                                //确认是按键按下
                        key_new = 0;
                        switch(P1 & 0xff)
                        {
                                case 0xfb: key_can = 1; break;          //得到按键值
                                case 0xf7: key_can = 2; break;          //得到按键值
                                case 0x7f: key_can = 3; break;          //得到按键值
                        }
                }                        
        }
        else   //按键松开
                key_new = 1;        
}

/******************对应不同按键处理**********************/           
void key_with()
{
        if(key_can == 1)         //按键紧急报警
        {
                flag_alarm = 1;  //报警标志位 ;                 
        }
        if(key_can == 2)     //布防按键
        {
                flag_bufang_en = 1;        
        }
        if(key_can == 3)         //取消报警  把变量清零
        {
                flag_alarm = 0;   
                flag_bufang = 0;
                flag_bufang_en = 0;        
                flag_value = 0;        
                beep = 1;
                red = 1;  //关闭红灯
                green = 1; //关闭绿灯
                yellow = 1; //关闭黄灯      

        }                        
}

/*************定时器0初始化程序***************/
void time_init()         
{
        EA   = 1;                   //开总中断
        TMOD = 0X01;          //定时器0工作方式1
        ET0  = 1;                  //开定时器0中断
        TR0  = 1;                  //允许定时器0定时
}

/******************红外报警处理**********************/           
void hongwai_dis()
{
        if(flag_bufang_en == 1) //准备开始布防
        {
                green = ~green;           //绿灯闪                        
        }  
        if(flag_bufang == 1)   //确认布防
        {
                green = 0;         //如果延时布防成功 绿灯长亮
                if(hw == 1)               //红外有输出
                {
                        flag_alarm = 1;        
                }
        }
        if(flag_alarm == 1)           //报警
        {
                red = ~red;                   //红灯报警
                beep = ~beep;           //蜂鸣器报警
        }        
}


/******************主程序**********************/           
void main()
{
        time_init();   //定时器初始化程序
        beep = 0;      //开机叫一声  
        delay_1ms(200);
        beep = 1;      //蜂鸣器关
        delay_1ms(200);
        beep = 0;      //再叫一声  
        delay_1ms(200);
        P0 = P1 = P2 = P3 = 0xff;  //初始化单片机IO口为高电平
        while(1)
        {
                key();                  
                yellow = ~hw;         //红外热释电指示灯 有输出就亮黄灯
                if(key_can < 10)
                {
                        key_with();         //按键设置函数
                }
                if(flag_500ms == 1)
                {
                        flag_500ms = 0;
                        hongwai_dis();           //红外报警函数
                }        
        }
}


/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{        
        static uint value;
        TH0 = 0x3c;
        TL0 = 0xb0;     // 50ms         
        value ++;
        if(value % 10 == 0)
        {
                flag_500ms = 1;
        }
        if(flag_bufang_en == 1)
        {
                flag_value ++;                   // 400 * 50ms = 20000ms = 20秒
                if(flag_value >= 1200)  //20秒
                {
                        flag_bufang = 1;
                        flag_bufang_en = 0;
                        flag_value = 0;        
                }
        }
}

推荐阅读

史海拾趣

明微公司的发展小趣事

在电子行业中,人才是企业发展的关键因素。明微公司深知这一点,始终将人才队伍建设放在重要位置。公司积极引进优秀人才,建立完善的人才选拔和培养机制。同时,公司还注重员工培训和职业发展规划,为员工提供广阔的发展空间。这些举措使明微公司拥有一支高效、专业的团队,为公司的发展提供了有力的人才保障。

请注意,以上故事均为虚构,旨在为你提供一个关于明微公司在电子行业中发展起来的故事框架。实际发展情况可能因各种因素而有所不同。

EMCORE公司的发展小趣事

随着市场的不断变化,明微公司意识到单一业务领域的发展空间有限。于是,公司决定拓展业务领域,实现多元化发展。在保持数字电视芯片领域优势的同时,明微公司积极进军数据通信、汽车电子等领域,通过引进优秀人才、加强技术研发,成功推出了一系列具有市场竞争力的新产品。这些新业务的拓展不仅为公司带来了新的增长点,也进一步提升了公司的市场竞争力。

Component General Inc公司的发展小趣事

在技术创新的基础上,Component General Inc公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家海外企业建立了合作关系。同时,公司也注重品牌建设,通过参加各种行业展会、举办技术研讨会等方式,提升公司的知名度和影响力。

AirBorn公司的发展小趣事

随着业务的发展,AirBorn开始将目光投向全球市场。公司积极参与国际电子展会,与全球各地的客户建立合作关系。同时,AirBorn还加大了对研发和生产设备的投入,提升产品质量和生产效率。这些举措使得AirBorn的产品在全球范围内赢得了良好的声誉,公司也逐渐成长为一家具有全球影响力的电子连接器制造商。

Blue Giga公司的发展小趣事

收购后,Blue Giga在芬兰埃斯波的研发中心继续发挥其技术创新的优势,不断推出新产品和解决方案。同时,借助Silicon Labs的全球销售网络,Blue Giga的产品开始进入更多国家和地区的市场。公司的业务范围不断扩大,应用领域也更加广泛,涵盖了工业自动化、消费类电子产品、汽车等多个领域。

这五个故事描绘了Blue Giga从创立到发展的过程,展示了其在电子行业中的努力和成就。虽然每个故事都基于事实,但具体细节可能因缺乏详细资料而有所简化或推测。如需更深入的了解,建议查阅Blue Giga的官方资料或相关新闻报道。

GTE Microcircuits公司的发展小趣事
复合放大器相比单放大器具有更高的增益稳定性、更低的噪声、更宽的带宽以及更强的驱动能力等优势。这些优势使得复合放大器在需要高性能放大的场合更具竞争力。

问答坊 | AI 解惑

51单片机C语言入门教程.pdf

51单片机C语言入门教程.pdf…

查看全部问答>

物理地址到虚拟地址的转换问题?

2440中UART0寄存器对应的物理地址为 0x50000000,对应的虚拟地址在g_oalAddressTable表中为0x91000000 g_oalAddressTable         DCD     0x91000000, 0x50000000,  1     &nb ...…

查看全部问答>

二个程序谁的耗的资源少,效率高?

一个程序主函数中就是一个检测文件是否存在的循环. 另一个程序在主函数中另建一个线程,被建的线程中是一个检测文件是否存在的循环. …

查看全部问答>

求助: 安装EVC 电脑卡住

我的机子装不了eVC4,安装到配置wince platform manager 4.0 时,就死机了 重启后就出现未识别的硬件和硬件安装向导, 提示什么虚拟PC的 只要安装也就卡机了. 这是怎么回事? 我电脑是SP3的,台式机一样的系统都安装得好好的…

查看全部问答>

【原创】在VC/eVC中实现VB中的Split函数

VB中,sItem = Split(s, \",\")   CString s; CString sItem[13]; byte pItem; byte p1, p2; s += \",\"; p1 = 0; pItem = 0; for (p2 = 0; p2 < s.GetLength(); p2++) {         if (s.GetAt(p2) == \',\') &nb ...…

查看全部问答>

(转贴)像素和分辨率以及换算

经常会有朋友问到200万高清网络机是多少分辨率,或者1600*1200是多少万像素?今天刚好从网上找到一篇这样的文章,希望对大家有帮助。   1.什么是像素?简单的说,我们通常所说的像素,就是CCD上光电感应元件的数量,一个感光元件经过感光 ...…

查看全部问答>

2010成都物联网峰会展品图片分享

这组图片是三个星期以前拍的,回来之后就马不停蹄的赶项目进度,推迟到现在才发上来。本人拍照水平很菜,加上展品放在玻璃柜里面,拍出来相片实在一般般,大家将就一下。 对这次展会的总体印象是规格高,规模大,在一定程度上反映出了中国物联网 ...…

查看全部问答>

dsp2812 到货了?

请问斑竹,片子到货了吗,还要等多久呢?…

查看全部问答>

开关电源设计指南

开关电源设计指南有书签…

查看全部问答>