目标是每次唤醒STEP加1,从而改LED闪烁次数,现在是每次唤醒都得1,尝试过声明全局变量和“易变”变量都不行,有哪需要修改的请指点一下
#include <htc.h>
#include <pic.h>
// 加溶丝配置
__CONFIG (INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BOREN);
#define iOut GPIO0
#define iKey GPIO3
volatile unsigned int STEP=0;//默认一直闪
void interrupt isr();
//抖动延时
void delayms()
{
int t=50;
while(t--){;}
}
void delay(unsigned char ti)
{
while(ti--) {
int i;
for(i=1150;i>0;i--){
if(iKey==0){
iOut=0;
delayms(); //防抖动延时
if(iKey==0) //是否需要变模,再次检测按键闭合情况
{
SLEEP(); //按键闭合,则
NOP();
}
}
}
}
}
void interrupt isr(void)//中断函数。
{
if(GPIF==1){
STEP++;//改变LED次数
iOut=1;delay(1);iOut=0;delay(2);//唤醒标志快闪1下
GPIF=0;//清标志
}
}
//主函数
void main()
{
OSCCAL =_READ_OSCCAL_DATA();
CMCON = 0x07; // 关闭比较器
ANSEL=0x00;
OPTION=0b00001111;
TRISIO = 0b11111110; // GP0输出
INTCON=0b10001000;
IOCB = 0b00001000; // GP3引脚电平变化引起中断
unsigned int i;
//WPU = 0; // 禁止弱上拉
while(1)
{
switch(STEP){//默认一直闪CLRWDT();
case 0:
iOut=1;
delay(1);
iOut=0;
delay(2);
break;
default:
for(i=0;i<=STEP;i++){//几次唤醒闪几次
iOut=0;delay(20);
iOut=1;delay(20);
}
iOut=0;delay(35);
break;
}
}
} |