|
本帖最后由 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時(shí)間脈沖信號(hào)f為變頻信號(hào),pd為所選頻段
void timer0() interrupt 1 // 定時(shí)器0控制頻率
{
TH0=(65536-yanshi[pd])/256;
TL0=(65536-yanshi[pd])%256;
f++; //bp為變頻信號(hào)
}
void timer1() interrupt 3 // 定時(shí)器1控制同個(gè)頻率持續(xù)的時(shí)間,50mS脈沖
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
void init()
{
EA=1; //開(kāi)啟總中斷
ET0=1;ET1=1; //開(kāi)啟外部定時(shí)器中斷允許位
TMOD=0x11; //同時(shí)定義兩個(gè)定時(shí)器的工作模式
TH0=(65536-yanshi[f])/256;
TL0=(65536-yanshi[f])%256;//給定時(shí)器0賦初值
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //給定時(shí)器1賦初值
TR0=1;TR1=1;//啟動(dòng)兩個(gè)定時(shí)器可以測(cè)試一次給字節(jié)賦值
}
void main()
{
f=0;pd=0;sond=1;t=0;
init();
while(1)
{
if(f>0)
{
TR0=0; //關(guān)閉定時(shí)器0防止在執(zhí)行定時(shí)器1時(shí)被中斷會(huì)引起混亂 bp=0; 將變頻信號(hào)bp歸零等待下一個(gè)信號(hào)1
sond=~sond; //變頻信號(hào)發(fā)生后beep取反
if(t>5) //測(cè)試定時(shí)器0脈沖是否達(dá)到6個(gè)即300mS
{
pd++; //如果達(dá)到300mS頻段改變
t=0; //將定時(shí)器脈沖數(shù)歸零
}
if(pd>6) //頻段pd超出6個(gè)即第7個(gè)時(shí)將頻段歸零
{
pd=0;
}
TR0=1; //開(kāi)啟定時(shí)器0讓定時(shí)器0繼續(xù)工作定時(shí)器0在每執(zhí)行一次以
}
}
}
同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲.rar
(13.93 KB, 下載次數(shù): 57)
2019-3-4 01:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|