历史上的今天
今天是:2025年02月06日(星期四)
2021年02月06日 | 51单片机门铃电路原理图及C语言源程序
2021-02-06 来源:eefocus
当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。
电路原理图
系统板上硬件连线
(1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
(2. 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭;
(3. 把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上;
程序设计方法
(1. 我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。
(2. 在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。
(3. “叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。
C语言源程序
#include
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_7==0)
{
for(i=10;i>0;i--)
for(j=248;j>0;j--);
if(P3_7==0)
{
t5hz=0;
t7hz=0;
tcnt=0;
flag=0;
stop=0;
TR0=1;
while(stop==0);
}
}
}
}
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;
P1_0=~P1_0;
}
}
else
{
t5hz++;
if(t5hz==4)
{
t5hz=0;
P1_0=~P1_0;
}
}
}
上一篇:51单片机数码管动态时钟电路图
下一篇:51单片机超声波测距程序代码
史海拾趣
|
装上ccs3.3之后,tds510不能仿真c6713,能进入也能load程序,就是执行其他操作就出问题,说什么芯片保护不让仿真器读写寄存器。过去使用3.1的时候没有出现这个问题的。不知道是怎么回事。:L… 查看全部问答> |
|
我的keil 老是出错, 比如: void main(void) { unsigned int w; w=10; } 程序执行到‘}’结束符就出错。 *** error 65: access violation at C:0x0A00 &nb ...… 查看全部问答> |
|
小弟这两天碰到一个很诡异的问题。 我在以前写的工程中加入代码调试运行时,新写的代码不运行。具体如下: 假如先前函数代码: [code]OnBnClickedBtnPrint1() { int a=0; a++; &nb ...… 查看全部问答> |




