|
非常時(shí)期,孩子不能上學(xué),大人沒(méi)在家,每天早上都睡得十幾點(diǎn),有點(diǎn)過(guò)份,所以作個(gè)簡(jiǎn)易定時(shí)報(bào)警器作鬧鐘用,主要是配合小米智能插座的網(wǎng)絡(luò)定時(shí)功能用,只是自己的小制作,供有需求的人參考用;
制作出來(lái)的實(shí)物圖如下:
51hei圖片_20200303140707.jpg (161.92 KB, 下載次數(shù): 58)
下載附件
2020-3-3 14:06 上傳
功能:
1.上電時(shí)即啟動(dòng)報(bào)警;
2.定時(shí)30S后自動(dòng)停止;
3.報(bào)警過(guò)程中如有按鍵按下即停止報(bào)警;
硬件:
1.P32按一個(gè)按鍵,作為取消報(bào)警用;
2.P35接蜂鳴器,作為報(bào)警聲;
/*/******************************************************************************
-------------------------STC15F104E定時(shí)報(bào)警器-----------------------------------
功能:
1.上電時(shí)即啟動(dòng)報(bào)警;
2.定時(shí)30S后自動(dòng)停止;
3.報(bào)警過(guò)程中如有按鍵按下即停止報(bào)警;
硬件:
1.P32按一個(gè)按鍵,作為取消報(bào)警用;
2.P35接蜂鳴器,作為報(bào)警聲;
說(shuō)明:此報(bào)警器是配合智能插座(例小米智能插座,帶USB那種)用的,主要作用是當(dāng)鬧鐘用
//******************************************************************************/
#include <STC15F104E.H>
// #include <RTX51TNY.H>
#include "intrins.h"
#include "stdio.h"
/*/******************************************************************************/
/*/******************************************************************************/
sbit KEY1 = P3^2; //根據(jù)原理圖,KEY1對(duì)應(yīng)的IO口
sbit BUZZ = P3^5; //根據(jù)原理圖,CLOCKOUT0
/*/******************************************************************************/
bit time0out_flag = 0; //定時(shí)器0超時(shí)標(biāo)志位
bit time1out_flag = 0; //定時(shí)器0超時(shí)標(biāo)志位
unsigned char t1_jishu = 0; //定時(shí)1計(jì)數(shù)變量
unsigned int t1_jishu2 = 0; //定時(shí)1計(jì)數(shù)變量2
/*/******************************************************************************/
void Timer1Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TL1 = 0x00; //設(shè)置定時(shí)初值
TH1 = 0x4C; //設(shè)置定時(shí)初值
TF1 = 0; //清除TF1標(biāo)志
TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)
}
/*/******************************************************************************/
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; //使能定時(shí)器1中斷
IT0 = 1; //設(shè)置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
EX0 = 1; //使能INT0中斷
EA = 1;
}
/**********************************************************************************/
/******************************主函數(shù)**********************************************/
/**********************************************************************************/
void main(void)
{
START(); //初始化
while(1)
{
WDT_CONTR = 0x37; //看門狗定時(shí)器
delayms(1000);
}
}
//-----------------------------------------
//中斷0服務(wù)程序
void exint0() interrupt 0 //INT0中斷入口
{
delayms(20); //中斷按鍵防抖
if(!KEY1)
{
TR1 = 0; //定時(shí)器1
t1_jishu = 0;
t1_jishu2 = 0;
BUZZ = 1; //關(guān)閉報(bào)警
}
}
/* 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)閉報(bào)警
TR1 = 0; //定時(shí)器1
t1_jishu = 0;
t1_jishu2 = 0;
}
}
|
評(píng)分
-
查看全部評(píng)分
|