📄 door_ring.c
字号:
/********************************************************************
* 主 页 : HTTP://WWW.QLMCU.COM
*
* 程序功能 : “叮咚”门铃
*
* 应用软件 : KEIL C
*
* 版 本 : KEIL 7.06
*
* 硬 件 : WS803、WS804、WS806
*
* 创建时间 : 2005-07-28
*
* 注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
* 在此谢谢这些无私奉献的朋友!!!
*
********************************************************************/
/* 程序详细功能介绍:
*当按下按键P3.3 ,AT89S51单片机产生“叮咚”声从P3.2端口输出
*程序设计方法
* 1. 我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,
* 因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。
* 2. 在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。
* 3. “叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。
*/
#include <AT89X51.H>
unsigned char t5hz;
unsigned char t7hz;
unsigned int tcnt;
bit stop;
bit flag;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
ET0=1;
EA=1;
while(1)
{
if(P3_3==0)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_3==0)
{
t5hz=0;
t7hz=0;
tcnt=0;
flag=0;
stop=0;
TR0=1;
while(stop==0);
}
}
}//...while(1)
}//...main
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==2000)
{
tcnt=0;
if(flag==0)
{
flag=~flag;
}
else
{
stop=1;
TR0=0;
}
}
if(flag==0)
{
t7hz++;
if(t7hz==3)
{
t7hz=0;
P3_2=~P3_2;
}
}
else
{
t5hz++;
if(t5hz==4)
{
t5hz=0;
P3_2=~P3_2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -