机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
1 2 3 4 5 下一页
返回列表 发新帖
查看: 17234 | 回复: 40
打印 上一主题 下一主题

DIY定时自动打铃器

[复制链接]
跳转到指定楼层
1#
发表于 2011-11-20 18:46:59 | 只看该作者 | 只看大图 回帖奖励 | 倒序浏览 | 阅读模式
DIY 定时自动打铃器
我厂为了搞好军事化管理,在每个厂房安装了电铃。按厂规定的休息时间打铃提示。安装这套装置需要一个定时自动控制电铃开启的装置。厂子安排我负责完成这套装置。我接下任务打算自行设计一套定时打铃器,我的设计方案得到厂领导批准后,我给自己立下军令状一周之内完成。
2011 11 20 日制作完成了定时自动打铃器,我利用单片机技术计时产生秒信号首先完成了数字电子钟,在此基础上加入了继电器并通过软件实现了定时控制继电器。最后加入了键盘可以调整走时时间和设置多个定时时间。做到这里遇到一个问题,我是采用市电 220v 变压整流给单片机板供电的,如果突然停电就会丢失走时时钟和设置数据,所以一定要保证供电连续性。我想了一个办法如果停电时采用备用电池供电,停电时它们切换供电在切换过程中加入了 10000uf 的大电容解决了在切换过程中断电现象。
在整个制作过程中遇到了许多问题,我需要面对问题去解决遇到的难题。我个人认为这是一个锻炼自己解决问题的好机会。制作中有苦有乐,我将制作方法拿出来和大家一起分享。
下面是我的小型实验室
制作过程: 2011 11 15 日,我走进我的小角落小型实验室,找出了 51 单片机开发板,打开电脑开始写程序,忙了一天写好了单片机数字电子钟。这套装置的核心就是电子钟,所以首先要制作出数字电子钟。然后在数字钟程序基础上加入了几条语句就可以按编写的时间控制继电器闭合触点了,很简单吧!通过计算机设定调整时间设置定时时间可不行,下一步要加入键盘,通过键盘调整走时时间和设置定时时间。图上面的三个按钮分别为设置键,小时调整键,分钟调整键。第二天完成了键盘调整函数模块程序编写,可以在一天中多了时间段控制电铃响起。一步一步的调试改进完成了自动打铃器,在喜悦中新问题来了,打铃器工作了一天后出现了走时误差,经过 9 个小时就会出现 60 秒的误差。我开始尝试了各种方法解决误差问题,采用自动调整法比较有效果,实验测出产生 1 秒误差所需用的时间,然后通过程序每过一段时间就将秒变量自动加 1 或是减 1 来清除误差。在电源供电方面考虑实际情况需用改进。单片机正常工作必须保证电能连续性。如果一旦停电数据将会丢失,所以要加入备用电池当停电时自动切换到电池供电。我将继电器接到变压器输出端,如果市电有电时继电器得电工作,停电时继电器失电,通过继电器常开常闭触点控制市电和电池切换,在供应电源输出端加入 10000uf 大电容起到市电和电池切换瞬间断电现象。电源电路中加入了一只光耦输出端送往单片机它起到判断何种方式供电,如果电池供电单片机板上面的数码管关闭以节省电能。
下面有电源部分电路原理图,单片机部分电路原理图,实物图和单片机 c51 程序。

图片 014.jpg(69.22 KB, 下载次数: 56)

图片 014.jpg

图片 019.jpg(66.05 KB, 下载次数: 52)

图片 019.jpg
推荐
发表于 2011-11-20 22:45:40 | 只看该作者
其实对于定时打铃的办法很多。比如管理体系健全的企业一般各个车间和部门都会安装广播系统的。利用这个系统,在办公电脑上装个定时播放音乐的软件,定时播放铃声即可。且电脑的时钟是可以联网校准的。更不怕断电产生时钟混乱。基本就是零投入。
2#
楼主 | 发表于 2011-11-20 18:48:40 | 只看该作者
下面是自动打铃器c程序
#include
#define shum P1 // 数码
#define saom P2 // 数码扫描
#define uchar unsigned char
#define uint unsigned int
char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,};
uchar hour=0,min=0,sec=0,tauto=0; // 时 分 秒
uchar x=8,y=0,g=11,f=55,o=16,p=30; //x 是定时 1 小时设定值 y 是定时 1 分设定值
uchar deda=0;
uchar code xsjsbb[60];
bit d_05s=0;
uchar set=0;
/*----------------------- 走时函数 --------------------------*/
void init_timer()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
IE=0x82;
TR0=1;
}
/*-----------------------5ms 定时中断服务函数 --------------------------*/
void T0_srv(void) interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
deda++ ;
}
/*---------------------- 时,分,秒单元及走时单元转换 -------------------------*/
void conv()
{
if(deda<=100)d_05s=0;
else d_05s=1;
if(deda>=200){sec++;deda=0;}
if(sec==60){min++;tauto++;sec=0;}
if(tauto==9){sec=sec+1;tauto=0;} // 自动调时没过 9 分钟 (tauto=9 )秒变量 sec 自增 1
if(min==60){hour++;min=0;}
if(hour==24){hour=0;}
}
void display() // 数码管模块
{char e,scan;
if(deda<=100)P3_4=0; else P3_4=1;
if(hour==x)a=1; else a=0; // 定时设定值 x y g f o p
if(min==y)b=1; else b=0;
if(sec==2)c=1; else c=0;
if(a&b&c) P0_3=0; else P0_3=1;
if(hour==g)la=1; else la=0;
if(min==f)lb=1; else lb=0;
if(sec==2)lc=1; else lc=0;
if(la&lb&lc) P0_3=0; else P0_3=1;
if(hour==o)ia=1; else ia=0;
if(min==p)ib=1; else ib=0;
if(sec==2)ic=1; else ic=0;
if(ia&ib&ic) P0_3=0; else P0_3=1;
disp[3]=hour/10;
disp[2]=hour%10;
disp[1]=min/10;
disp[0]=min%10;
P1=0xff;
scan=0xef;
for(e=0;e<4;e++)
{
shum=0xff;
saom=scan;
if(P3_6==0)
{
if(d_05s==1)
{if(e==2)P1_7=0;else P1_7=1;}
}
else {if(e==2) P1_7=1;}
if(P3_6==0)
P1=DATA_7SEG[disp[e]];
else P1=0xff;
delay(4);
scan>>=1;
}
}
/*------------------- 调整走时时间函数部分 ------------------------*/
void set_time()
{uchar m;
if(P3_1==0)delay(1);
if(P3_1==0)hour++;
F1:if(P3_1==0)goto F1;
if(hour==24)hour=0;
for(m=0;m<30;m++)
{
display();
if(d_05s==1)P2_7=0;
else P2_7=1;
delay(1);
}
if(P3_0==0)delay(1);
if(P3_0==0)min++;
F2:if(P3_0==0)goto F2;
if(min==60)min=0;
for(m=0;m<30;m++)
{
display();
if(d_05s==1)P2_7=0;
else P2_7=1;
delay(1);
}
}
}
3#
楼主 | 发表于 2011-11-20 18:49:20 | 只看该作者
1五湖四海1 发表于 2011-11-20 18:48
下面是自动打铃器c程序
#include#define shum P1 //数码#define saom P2 //数码扫描#define uchar unsign ...

void set_t1()
{
uchar m;
if(P3_1==0)delay(1);
if(P3_1==0)x++;
F1:if(P3_1==0)goto F1;
if(x==24)x=0;
if(P3_0==0)delay(1);
if(P3_0==0)y++;
F2:if(P3_0==0)goto F2;
if(y==60)y=0;
for(m=0;m<30;m++)
{
char e,scan;
tdisp[4]=1;
tdisp[3]=x/10;
tdisp[2]=x%10;
tdisp[1]=y/10;
tdisp[0]=y%10;
P1=0xff;
scan=0xef;
for(e=0;e<5;e++)
{
shum=0xff;
saom=scan;
P1=DATA_7SEG[tdisp[e]];
delay(4);
scan>>=1;
}
delay(1);
}
}
void set_t2()
{
uchar m;
if(P3_1==0)delay(1);
if(P3_1==0)g++;
F1:if(P3_1==0)goto F1;
if(g==24)g=0;
if(P3_0==0)delay(1);
if(P3_0==0)f++;
F2:if(P3_0==0)goto F2;
if(f==60)f=0;
for(m=0;m<30;m++)
{
char e,scan;
tdisp[4]=2;
tdisp[3]=g/10;
tdisp[2]=g%10;
tdisp[1]=f/10;
tdisp[0]=f%10;
P1=0xff;
scan=0xef;
for(e=0;e<5;e++)
{
shum=0xff;
saom=scan;
P1=DATA_7SEG[tdisp[e]];
delay(4);
scan>>=1;
}
delay(1);
}
}
void set_t3()
{
uchar m;
if(P3_1==0)delay(1);
if(P3_1==0)o++;
F1:if(P3_1==0)goto F1;
if(o==24)o=0;
if(P3_0==0)delay(1);
if(P3_0==0)p++;
F2:if(P3_0==0)goto F2;
if(p==60)p=0;
for(m=0;m<30;m++)
{
char e,scan;
tdisp[4]=3;
tdisp[3]=o/10;
tdisp[2]=o%10;
tdisp[1]=p/10;
tdisp[0]=p%10;
P1=0xff;
scan=0xef;
for(e=0;e<5;e++)
{
shum=0xff;
saom=scan;
P1=DATA_7SEG[tdisp[e]];
delay(4);
scan>>=1;
}
delay(1);
}
}
/*------------------- 按键扫描及延时等函数部分 -------------------------*/
/*-------- 走时时间程序函数 --------*/
void time()
{
conv();
display();
}
/*-------- 扫描按键函数 --------*/
void scan_key()
{
delay(1);
if(P3_2==0)set++;
if(set>=5)set=0;
if(set==1)flag=0x55;
F0:if(P3_2==0)goto F0;
}
/*-------- 延时函数 -------------*/
void delay(uint k)
{
uint i,j;
for(i=0;j
{
for(j=0;j<121;j++);
}
}
/*----------------- 主函数 -------------------------------------*/
void main()
{
init_timer();
while(1)
{if(P3_2==0)scan_key();
switch(set)
{
case 0:time(); break;
case 1:set_time();break;
case 2:set_t1();break;
case 3:set_t2();break;
case 4:set_t3();break;
default:break;
}
}
4#
发表于 2011-11-20 19:38:17 | 只看该作者
{:soso_e126:} 打铃器还要自制啊!!!浪费时间,直接买一个,都是现成的,而且很便宜!
5#
发表于 2011-11-20 20:02:21 | 只看该作者
严重不懂为啥要自己做,廉价的现成东西不用?
6#
发表于 2011-11-20 21:49:17 | 只看该作者
精神可嘉,认真钻研,工作本身也是一种生活,有时候不以金钱论罢
7#
发表于 2011-11-20 21:53:11 | 只看该作者
楼主赞一个。。。。。。。。。。
9#
楼主 | 发表于 2011-11-20 22:51:53 | 只看该作者
华山一道 发表于 2011-11-20 20:02
严重不懂为啥要自己做,廉价的现成东西不用?

我喜欢电子制作,将擅长的单片机技术应用到单位多好了,而且在制作过程中会遇到问题从中会学到很多东西。

点评

以学习为目的的另当别论 发表于 2011-11-21 09:31
10#
发表于 2011-11-20 23:04:45 | 只看该作者
有时间自己做也好啊,我可还不会做
1 2 3 4 5 下一页
返回列表 发新帖
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2024-6-9 18:09, Processed in 0.064893 second(s), 24 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

快速回复 返回顶部 返回列表