1、
两个定时器蜂鸣器-一个控制频率-另一个控制时间
精品文档
//同时利用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同一个频率持续的时间,间隔300ms依次输出1、10、
//50、100、200、400、800HZ的方波
#include //52单片机头文件
#include //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char
sbit Waveout=P1^0;
uc
2、har tt;
uint fre,flag;
uint Freq[]={1,10,50,100,200,400,800,1000}
void main() //主函数
{
fre=50000;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//
3、启动定时器0
while(1)
//等待中断产生
{
if(tt=a)
{
tt=0;
Waveout=~Waveout;
}
}
}
void timer0() interrupt 1 //定时器0中断
{
TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
tt++;
}
void timer1() interrupt 3 //定时器1中断用来产生300微秒时间定时
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==6)
{
flag=0;
freq=Freq[i];
}
}
收集于网络,如有侵权请联系管理员删除