|
非常時期,孩子不能上學(xué),大人沒在家,每天早上都睡得十幾點,有點過份,所以作個簡易定時報警器作鬧鐘用,主要是配合小米智能插座的網(wǎng)絡(luò)定時功能用,只是自己的小制作,供有需求的人參考用;
制作出來的實物圖如下:
功能:
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;
}
}
|
評分
-
查看全部評分
|