×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-21 发布时间:
|

非常时期,孩子不能上学,大人没在家,每天早上都睡得十几点,有点过份,所以作个简易定时报警器作闹钟用,主要是配合小米智能插座的网络定时功能用,只是自己的小制作,供有需求的人参考用;

制作出来的实物图如下:


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

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


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

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

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

说明:此报警器是配合智能插座(例小米智能插座,带USB那种)用的,主要作用是当闹钟用
//******************************************************************************/
        #include
//        #include
        #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;        
        }
}

关键字:STC15F104E  单片机  定时报警器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址