無源蜂鳴器和流水燈同時工作的程序,你自己按實際電路更改設置I/O口
#include <AT89X52.H> //單片機頭文件
#include <intrins.h>
#define uint unsigned int //宏定義變量uint為無符號整型數據(0-65535)
#define uchar unsigned char //宏定義變量uchar為無符號字符型數據(0-255)
sbit Buzzer=P2^3; //蜂鳴器端口定義
bit Buzzer_sign=0; //蜂鳴器使能標志位
uint Cnt200us=0; //中斷計數
void xianshi(); //顯示子程序聲明
void Timer0Init(); //定時器初始化聲明
void main()
{
Buzzer=1; //蜂鳴器端口初始化
Timer0Init(); //定時器初始化
P1=0xfe; //LED端口初始化
while(1)
{
xianshi(); //顯示子程序
}
}
void xianshi() //顯示子程序
{
if(Cnt200us>=5000) //1秒
{
Cnt200us=0;
P1=_crol_(P1,1); //循環移位
Buzzer_sign=1; //蜂鳴器使能標志置1
}
}
void Timer0Init() //200微秒@11.0592MHz
{
TMOD = 0x02; //設置定時器8位自動重載模式
TL0 = 0x48; //設置定時初值
TH0 = 0x48; //設置定時重載值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
EA=1; //開總中斷
ET0=1; //開定時器0中斷
}
void timer0() interrupt 1 //中斷服務程序
{
static uint count;
Cnt200us++;
if(Buzzer_sign==1) //如果蜂鳴器使能標志1
{
count++; //定時器中斷變量自+1
Buzzer=~Buzzer; //蜂鳴器端口取反
if(count>=1000) //持續鳴0.2秒
{
count=0; //計數清0
Buzzer_sign=0; //蜂鳴器使能標志清0
Buzzer=1; //蜂鳴器端口清0
}
}
} |