找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4938|回復(fù): 4
收起左側(cè)

簡易STC15F104E單片機定時報警器制作 附程序

[復(fù)制鏈接]
ID:65956 發(fā)表于 2020-3-3 14:09 | 顯示全部樓層 |閱讀模式
非常時期,孩子不能上學(xué),大人沒在家,每天早上都睡得十幾點,有點過份,所以作個簡易定時報警器作鬧鐘用,主要是配合小米智能插座的網(wǎng)絡(luò)定時功能用,只是自己的小制作,供有需求的人參考用;

制作出來的實物圖如下:
51hei圖片_20200303140707.jpg

功能:
1.上電時即啟動報警;
2.定時30S后自動停止;
3.報警過程中如有按鍵按下即停止報警;

硬件:
1.P32按一個按鍵,作為取消報警用;
2.P35接蜂鳴器,作為報警聲;


/*/******************************************************************************
-------------------------STC15F104E定時報警器-----------------------------------

功能:
1.上電時即啟動報警;
2.定時30S后自動停止;
3.報警過程中如有按鍵按下即停止報警;

硬件:
1.P32按一個按鍵,作為取消報警用;
2.P35接蜂鳴器,作為報警聲;

說明:此報警器是配合智能插座(例小米智能插座,帶USB那種)用的,主要作用是當(dāng)鬧鐘用
//******************************************************************************/
        #include <STC15F104E.H>
//        #include <RTX51TNY.H>
        #include "intrins.h"
        #include "stdio.h"


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


/*/******************************************************************************/
        sbit KEY1   = P3^2;                                //根據(jù)原理圖,KEY1對應(yīng)的IO口

        sbit BUZZ   = P3^5;                                //根據(jù)原理圖,CLOCKOUT0

/*/******************************************************************************/
        bit  time0out_flag = 0;                        //定時器0超時標(biāo)志位
        bit  time1out_flag = 0;                        //定時器0超時標(biāo)志位

        unsigned char t1_jishu = 0;                //定時1計數(shù)變量
        unsigned int t1_jishu2 = 0;                //定時1計數(shù)變量2



/*/******************************************************************************/
void Timer1Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0xBF;                        //定時器時鐘12T模式
        TMOD &= 0x0F;                        //設(shè)置定時器模式
        TL1 = 0x00;                                //設(shè)置定時初值
        TH1 = 0x4C;                                //設(shè)置定時初值
        TF1 = 0;                                //清除TF1標(biāo)志
        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;                    //設(shè)置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
        EX0 = 1;                    //使能INT0中斷

    EA = 1;
}

/**********************************************************************************/
/******************************主函數(shù)**********************************************/
/**********************************************************************************/
void main(void)
{
        START();                                                                                //初始化
    while(1)
        {
                WDT_CONTR = 0x37;                                               //看門狗定時器

                delayms(1000);
        }
}

//-----------------------------------------
//中斷0服務(wù)程序
void exint0() interrupt 0       //INT0中斷入口
{
        delayms(20);                                //中斷按鍵防抖
        if(!KEY1)
        {
                TR1 = 0;                                //定時器1
                t1_jishu = 0;
                t1_jishu2 = 0;
                BUZZ = 1;                                //關(guān)閉報警
        }
}

/* 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;                                //關(guān)閉報警
                TR1 = 0;                                //定時器1
                t1_jishu = 0;
                t1_jishu2 = 0;        
        }
}



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2020-3-3 15:09 | 顯示全部樓層
好東東,能分享下源碼工程包嗎?
回復(fù)

使用道具 舉報

ID:67356 發(fā)表于 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;

這些刪掉會咋樣?
回復(fù)

使用道具 舉報

ID:214276 發(fā)表于 2020-3-16 01:16 | 顯示全部樓層
測試后,好像沒聲音,蜂鳴輕響了一下就沒聲了。是不是沒有發(fā)聲代碼,樓主用的是有源直流蜂鳴器嗎。
回復(fù)

使用道具 舉報

ID:695749 發(fā)表于 2020-3-16 12:31 | 顯示全部樓層
思路很好,沒有實物,不太直觀,謝謝分享!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表