标题: 同时用两个定时器控制蜂鸣器发声 [打印本页]

作者: jinsheng7533967    时间: 2019-3-4 01:52
标题: 同时用两个定时器控制蜂鸣器发声
本帖最后由 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)



作者: 春风十里吹    时间: 2019-3-4 04:35
好样的!棒棒哒!
作者: zhengchong60    时间: 2019-3-7 23:02
真心不错,资源也很多!
作者: jinsheng7533967    时间: 2019-5-20 22:19
其实是一个定时器嵌套的案例,懂的人就明白
作者: yezhihun305    时间: 2019-6-5 10:36
比原版视频里写的好
作者: yezhihun305    时间: 2019-6-5 10:37
可以下载吗
作者: shuisheng    时间: 2020-3-24 20:10
精品啊!值得收藏!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1