#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(HS&WDTDIS);
#define LED RD0
#define BEEP RE0 //蜂鸣器
char flag; //全局变量,保存LED状态
/********延时程序********/
void Delay_ms(uint xms)
{
int i,j;
for(i=0;i<xms;i++)
{ for(j=0;j<71;j++) ; }
}
/*********蜂鸣器响一声函数********/
void beep()
{
BEEP=0; //蜂鸣器响
Delay_ms(100);
BEEP=1; //关闭蜂鸣器
Delay_ms(100);
}
/********端口设置函数********/
void port_init(void)
{
RBPU=0; //端口B弱上位使能
TRISB=0b00000001; //RB0设置为输入
TRISD = 0x00; //RD设为设为输出
ADCON1=0x06; //定义RA、RE为IO端口
TRISE=0x00; //端口E为输出,蜂鸣器(RE0)、继电器(RE1)工作
PORTE=0xff;
}
/********主函数********/
void main(void)
{
port_init();
GIE=1; //开发总中断
INTE=1; //允许RB0/INT中断
INTEDG=0; //下降沿触发
LED=0;
flag=1;
while(1); //原地等待
}
/********中断服务程序********/
void interrupt ISR(void)
{
if (INTF==1)
{
Delay_ms(30); //延时30ms,躲过抖动时间
INTF=0; //清中断标志位,须在延时之后!
if (flag==1)
{flag=0;LED=0;beep();}
else
{flag=1;LED=1;beep();}
}
}
|