无源蜂鸣器和流水灯同时工作的程序,你自己按实际电路更改设置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
}
}
} |