基于51单片机的蜂鸣器发不同的声音程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/****************************************************
同时用两个定时器控制蜂鸣器发声T0控制频率
T1控制同一频率发声的时长2s不同依次频率为
1,10,50,100,200,400,800,1k(hz)占空比均为0.5
T0的计时周期为125usT1的计时周期为50ms 。不同频率对应的num依次为
40004008040201054
*****************************************************/
#include
sbit beep=P2^3; //
unsigned int num=4000, //决定蜂鸣器的响应周期从而决定不同的频率
counter0=0,//T0控制频率
counter1=0; //T1控制周期
void main(void)
{ //
TMOD=0x12; //T0用自动重装初值的8位计数方式T1用16位计数方式
TH0=0x83; //T0计数周期125us
TL0=0x83;
TH1=(65536-50000)/256; //T1计数周期50ms
TL1=(65536-50000)%256;
ET0=1; //允许T0中断
ET1=1; //允许T1中断
EA=1; //开总中断
TR0=1; //T0开始计数
TR1=1; //T1开始计数
beep=1;
while(1);
}
void time0() interrupt 1
{
counter0++;
if(counter0==num)
{
counter0=0;
beep=~beep;
}
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
counter1++; if(counter1==40)
{
counter1=0;
switch(num)
{
case 4000:num=400 ;break;
case 400 :num=80 ;break;
case 80 :num=40 ;break;
case 40 :num=20 ;break;
case 20 :num=10 ;break;
case 10 :num=5 ;break;
case 5 :num=4 ;break;
case 4 :num=4000;break;
}
}
}