標題: 同時用兩個定時器控制蜂鳴器發(fā)聲 [打印本頁]

作者: jinsheng7533967    時間: 2019-3-4 01:52
標題: 同時用兩個定時器控制蜂鳴器發(fā)聲
本帖最后由 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控制同個頻率持續(xù)的時間,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;//啟動兩個定時器可以測試一次給字節(jié)賦值
}

void main()
{
f=0;pd=0;sond=1;t=0;
init();
while(1)
{
  if(f>0)  
  {

   TR0=0;  //關閉定時器0防止在執(zhí)行定時器1時被中斷會引起混亂    bp=0; 將變頻信號bp歸零等待下一個信號1
   sond=~sond;  //變頻信號發(fā)生后beep取反
   if(t>5)    //測試定時器0脈沖是否達到6個即300mS
   {
    pd++;  //如果達到300mS頻段改變
    t=0;   //將定時器脈沖數(shù)歸零
   }
   if(pd>6)  //頻段pd超出6個即第7個時將頻段歸零
   {
    pd=0;   
   }
   TR0=1;    //開啟定時器0讓定時器0繼續(xù)工作定時器0在每執(zhí)行一次以
  }
}
}

同時用兩個定時器控制蜂鳴器發(fā)聲.rar (13.93 KB, 下載次數(shù): 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.torrancerestoration.com/bbs/) Powered by Discuz! X3.1