本帖最后由 jinsheng7533967 于 2019-3-4 01:55 编辑
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit sond=P3^7;
uint yanshi[]={50000,10000,5000,2500,1250,625,500}
uchar t,f,pd; //t为50mS时间脉冲信号f为变频信号,pd为所选频段
void timer0() interrupt 1 // 定时器0控制频率
{
TH0=(65536-yanshi[pd])/256;
TL0=(65536-yanshi[pd])%256;
f++; //bp为变频信号
}
void timer1() interrupt 3 // 定时器1控制同个频率持续的时间,50mS脉冲
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
void init()
{
EA=1; //开启总中断
ET0=1;ET1=1; //开启外部定时器中断允许位
TMOD=0x11; //同时定义两个定时器的工作模式
TH0=(65536-yanshi[f])/256;
TL0=(65536-yanshi[f])%256;//给定时器0赋初值
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //给定时器1赋初值
TR0=1;TR1=1;//启动两个定时器可以测试一次给字节赋值
}
void main()
{
f=0;pd=0;sond=1;t=0;
init();
while(1)
{
if(f>0)
{
TR0=0; //关闭定时器0防止在执行定时器1时被中断会引起混乱 bp=0; 将变频信号bp归零等待下一个信号1
sond=~sond; //变频信号发生后beep取反
if(t>5) //测试定时器0脉冲是否达到6个即300mS
{
pd++; //如果达到300mS频段改变
t=0; //将定时器脉冲数归零
}
if(pd>6) //频段pd超出6个即第7个时将频段归零
{
pd=0;
}
TR0=1; //开启定时器0让定时器0继续工作定时器0在每执行一次以
}
}
}
同时用两个定时器控制蜂鸣器发声.rar
(13.93 KB, 下载次数: 57)
|