历史上的今天
今天是:2025年01月22日(星期三)
2018年01月22日 | 基于89C51的一个简单的警报系统
2018-01-22 来源:eefocus

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit light = P1^0
sbit loud = P1^7;
sbit alarm = P2^0;
bit alarm_flag,flag_dec,flag_change;
uint t0_count = 1;
uint t0_set,second;
void delay_1ms(unsigned int count) //1MS的延时×count
{
unsigned int i,j;
for(i=0;i
}
void light_show(int i) //灯闪亮
{
light = 0;
delay_1ms(i);
light = 1;
delay_1ms(i);
}
void init_t0(void) //初始化定时时钟
{
TMOD=0x01; //方式2
TH0=(65536-65436)/256;
TL0=(65536-65436)%256;
ET0=1;
EA=0;
}
void init_IO(void)
{
P1 = 0;
P2 = 0;
}
void alarm_check(void) //判断警报,为高电平打开警报
{
if(alarm == 1)
{
delay_1ms(10);
if(alarm == 1);
{
alarm_flag = 1; //响铃标志
flag_change = 1; //铃声改变标志
t0_set = 5; //调响铃节奏
}
}
}
void alarm_close(void) //低电平,解除警报
{
if(alarm == 0)
{
delay_1ms(10);
if(alarm == 0);
{
alarm_flag = 0;
light = 0;
loud = 0;
TR0 = 0;
EA = 0;
}
}
}
void main()
{
uint i,j;
init_t0();
init_IO();
while(1)
{
alarm_check();
while(alarm_flag)
{
TR0 = 1;
EA = 1;
for(j = 0;j < 40;j++)
{
alarm_close();
if(alarm_flag == 0)
{
break; //跳出循环
}
light_show(100);
}
}
}
}
void t0(void) interrupt 1 using 0
{
EA = 0;
TR0 = 0;
t0_count--;
if(t0_count == 0)
{
t0_count = t0_set;
if(flag_change == 1)
{
loud = ~loud;
}
}
if(flag_change == 0)
{
loud = 1;
}
second++;
if(second == 30) //调时间长短
{
flag_dec = 1;
second = 0;
if(t0_set ==1)
{
t0_set = 1;
flag_dec =0;
flag_change = 0;
}
if(flag_dec == 1)
{
t0_set--;
}
}
TR0 = 1;
EA = 1;
}
上一篇:调试通过的灯闪程序
史海拾趣
|
公司版STM32工作原理 晶振:老板,带两个秘书(电容),有时老板不在秘书说了算(内部时钟模式) 时钟PLL:老板娘,老板控制局面,但还是要听老板娘的话。 CPU:人力资源部,调动人员齐心合力 APB1,APB2时钟:部门经理,发布任务进度, ...… 查看全部问答> |
|
嵌入式系统的远程数据传输经常要使用公共通信线路这给数据安全带来隐患本文介绍的T E A 数据 加密算法高效可靠适用于资源有限的嵌入式系统同时文章还给出T E A 算法的一个应用实例… 查看全部问答> |
|
evc有没有打开文件夹对话框的api啊,SHBrowseForFolder()这个函数在evc里编译不过啊,还有没有其他的方法啊。 wince不会只能打开文件吧。 各位大虾帮帮忙啊!… 查看全部问答> |




