|
本帖最后由 jinsheng7533967 于 2019-3-4 01:55 編輯
111.jpg (300.07 KB, 下載次數(shù): 95)
下載附件
2019-3-4 01:51 上傳
#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; //關(guān)閉定時器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 01:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|