找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3972|回复: 4
收起左侧

简易STC15F104E单片机定时报警器制作 附程序

[复制链接]
ID:65956 发表于 2020-3-3 14:09 | 显示全部楼层 |阅读模式
非常时期,孩子不能上学,大人没在家,每天早上都睡得十几点,有点过份,所以作个简易定时报警器作闹钟用,主要是配合小米智能插座的网络定时功能用,只是自己的小制作,供有需求的人参考用;

制作出来的实物图如下:
51hei图片_20200303140707.jpg

功能:
1.上电时即启动报警;
2.定时30S后自动停止;
3.报警过程中如有按键按下即停止报警;

硬件:
1.P32按一个按键,作为取消报警用;
2.P35接蜂鸣器,作为报警声;


/*/******************************************************************************
-------------------------STC15F104E定时报警器-----------------------------------

功能:
1.上电时即启动报警;
2.定时30S后自动停止;
3.报警过程中如有按键按下即停止报警;

硬件:
1.P32按一个按键,作为取消报警用;
2.P35接蜂鸣器,作为报警声;

说明:此报警器是配合智能插座(例小米智能插座,带USB那种)用的,主要作用是当闹钟用
//******************************************************************************/
        #include <STC15F104E.H>
//        #include <RTX51TNY.H>
        #include "intrins.h"
        #include "stdio.h"


/*/******************************************************************************/


/*/******************************************************************************/
        sbit KEY1   = P3^2;                                //根据原理图,KEY1对应的IO口

        sbit BUZZ   = P3^5;                                //根据原理图,CLOCKOUT0

/*/******************************************************************************/
        bit  time0out_flag = 0;                        //定时器0超时标志位
        bit  time1out_flag = 0;                        //定时器0超时标志位

        unsigned char t1_jishu = 0;                //定时1计数变量
        unsigned int t1_jishu2 = 0;                //定时1计数变量2



/*/******************************************************************************/
void Timer1Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0xBF;                        //定时器时钟12T模式
        TMOD &= 0x0F;                        //设置定时器模式
        TL1 = 0x00;                                //设置定时初值
        TH1 = 0x4C;                                //设置定时初值
        TF1 = 0;                                //清除TF1标志
        TR1 = 1;                                //定时器1开始计时
}
/*/******************************************************************************/
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
}
//-----------------------------------------
void delayms(unsigned int t)
{
        while(--t) Delay1ms();
}
/*/******************************************************************************/
/*/*********************************************************************************
/***********************************************************************************
//--------------------------------------初始化------------------------------------*/
void START(void)
{
        P0M0 = 0x00;    P0M1 = 0x00;
    P1M0 = 0x00;    P1M1 = 0x00;
    P2M0 = 0x00;    P2M1 = 0x00;
    P3M0 = 0x00;    P3M1 = 0x00;
    P4M0 = 0x00;    P4M1 = 0x00;
    P5M0 = 0x00;    P5M1 = 0x00;
    P6M0 = 0x00;    P6M1 = 0x00;
    P7M0 = 0x00;    P7M1 = 0x00;

        Timer1Init();                                //50毫秒@11.0592MHz
        ET1 = 1;                                        //使能定时器1中断

        IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
        EX0 = 1;                    //使能INT0中断

    EA = 1;
}

/**********************************************************************************/
/******************************主函数**********************************************/
/**********************************************************************************/
void main(void)
{
        START();                                                                                //初始化
    while(1)
        {
                WDT_CONTR = 0x37;                                               //看门狗定时器

                delayms(1000);
        }
}

//-----------------------------------------
//中断0服务程序
void exint0() interrupt 0       //INT0中断入口
{
        delayms(20);                                //中断按键防抖
        if(!KEY1)
        {
                TR1 = 0;                                //定时器1
                t1_jishu = 0;
                t1_jishu2 = 0;
                BUZZ = 1;                                //关闭报警
        }
}

/* Timer1 interrupt routine */
void tm1_isr() interrupt 3 //using 1
{
        t1_jishu ++;
        t1_jishu2 ++;
        if(t1_jishu == 5)
        {
                t1_jishu = 0;
                BUZZ = ~BUZZ;        
        }
        if(t1_jishu2 == 20*30)
        {
                BUZZ = 1;                                //关闭报警
                TR1 = 0;                                //定时器1
                t1_jishu = 0;
                t1_jishu2 = 0;        
        }
}



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2020-3-3 15:09 | 显示全部楼层
好东东,能分享下源码工程包吗?
回复

使用道具 举报

ID:67356 发表于 2020-3-4 08:23 | 显示全部楼层
P0M0 = 0x00;    P0M1 = 0x00;
    P1M0 = 0x00;    P1M1 = 0x00;
    P2M0 = 0x00;    P2M1 = 0x00;
    P3M0 = 0x00;    P3M1 = 0x00;
    P4M0 = 0x00;    P4M1 = 0x00;
    P5M0 = 0x00;    P5M1 = 0x00;
    P6M0 = 0x00;    P6M1 = 0x00;
    P7M0 = 0x00;    P7M1 = 0x00;

这些删掉会咋样?
回复

使用道具 举报

ID:214276 发表于 2020-3-16 01:16 | 显示全部楼层
测试后,好像没声音,蜂鸣轻响了一下就没声了。是不是没有发声代码,楼主用的是有源直流蜂鸣器吗。
回复

使用道具 举报

ID:695749 发表于 2020-3-16 12:31 | 显示全部楼层
思路很好,没有实物,不太直观,谢谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表