发表帖子发布问题
选中 篇: 置顶|
[单片机问答] 解惑 [复制链接]
wr12306 当前在线 经验73 窥视卡
wr12306
技术员
13
主题46
帖子73
经验
发表于 昨天 12:16 78 查看 9 回复 只看该作者 倒序浏览
分享/*******************************/
/*同时用两个定时器控制蜂鸣器发声,
T0控制频率,T1控制同个频率持续的
时间,间隔两秒依次输出1,10,50,100,
200,400,800?1000的方波,设晶振频率为12MHZ*/
/****************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar tt;
uint fre,flag;
void main()
{
fre=50000;
beep=0;
TMOD=0x11;
TH0=(65536-fre)/256;
TL0=(65536-fre)/256;
TH1=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void T0_timer() interrupt 1
{
TR0=0;
TH0=(65536-fre)/256;
TL0=(65536-fre)/256;
tt++;
if(flag<40) 这里的40怎么算出来的
{
if(tt==10)
{
tt=0;
fre=50000;以及这里为什么是50000
beep=~beep;
}
}
if(flag>=40&&flag<80)这里的40 ,80怎么算出来的
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
fre=10000;这里的10000怎么算出来
beep=~beep;
}
if(flag>=120&&flag<160)这里的120 160怎么算出来
{
tt=0;
fre=5000;这里的5000怎么算出来
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
fre=2500;这里的2500怎么算出来的
beep=~beep;
}
if(flag>=200&&flag<240)这里的200 240怎么算出来
{
tt=0;
fre=1250;这里的1250怎么算出来的
beep=~beep;
}
if(flag>=240&&flag<280)这里的240 280 怎么算出来的
{
tt=0;
fre=625;这里的625怎么算出来的
beep=~beep;
}
if(flag>=280&&flag<320)这里的280 320怎么算出来
{
tt=0;
fre=312;这里的312怎么算出来的
beep=~beep;
}
if(flag>=320&&flag<360)这里的320 360 怎么算出来的
{
tt=0;
fre=156;这里的156怎么算出来的
beep=~beep;
}
TR0=1;
}
void T1_timer() interrupt 3
{
TH1=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
if(flag==360)
{
flag=0;
fre=50000;
}
} |