/*******************************************************************/
//通過定時器控制產生占空比可變的PWM波。
//按下K5,PWM值增大,占空比減小,LED燈逐漸變暗。
//按K6,PWM值減小,占空比增大,LED燈逐漸點亮。
//當PWM值增大到最大值或減小到最小值時,蜂鳴器會報警。
/*********************************************************/
# include & ltreg 51 . h & gt;
# include & ltintrins.h & gt
sbit K5 =p3^2;//添加密鑰
sbit K6 =p3^3;//減少鍵
sbit嗶嗶=p3^7;//蜂鳴器
無符號字符PWM = 0x7f//分配初始值
void Beep();
void delayms(無符號字符ms);
/*********************************************************/
void main()
{
P2 = 0x ff;
TMOD = 0x 21;
TH0 = 0xfc//1ms延遲常數12M
TL0 = 0x 18;//頻率調整
//th 1 = PWM;//脈沖寬度調整
//TL 1 = 0;
EA = 1;
ET0 = 1;
et 1 = 1;
TR0 = 1;
while(1)
{
做{
if(PWM!=0xff)
{ pwm++;delay ms(10);}
else Beep();
}
while(K5 = = 0);
做{
if(PWM!=0x00)
{ PWM-;delay ms(10);}
else Beep();
}
while(K6 = = 0);
}
}
/*********************************************************/
//定時器0中斷服務程序。
/*********************************************************/
無效定時器0()中斷1
{
//tr 1 = 0;
TH0 = 0xfc
TL0 = 0x66
tr 1 = 1;
P2 = 0x 00;//開始輸出
}
/*********************************************************/
//Timer1中斷服務程序
/*********************************************************/
無效定時器1()中斷3
{
th 1 = PWM;//以timer 2的方式,在數據重載TH-TL中改變PWM的值,即變量timer的初始值。
tr 1 = 0;
P2 = 0x ff;//結束輸出
}
/*********************************************************/
//蜂鳴器子程序
/*********************************************************/
無效嗶嗶聲()
{
無符號字符I;
for(I = 0;我& lt100 ;i++)
{
戴萊姆斯(2);
嗶=!嗶;//嗶聲反轉
}
嗶聲= 1;//關閉蜂鳴器
delayms(100);
}
/*********************************************************/
//延遲子程序
/*********************************************************/
void延遲符號(無符號字符毫秒)
{
無符號字符I;
當(毫秒)
{
for(I = 0;我& lt120 ;i++);
}
}
/*********************************************************/
您希望輸出端口是P1^7.我使用P2作為這裏的輸出端口。就改吧,希望對妳有用!!!!!!!