有没有学习单片机pic的高手帮我解决一下这个问题呢?
//**依据中断做一个按键控制V0灯,//**就是当Key1按下时,延时2s后V0点亮,//***再按一下Key1,延时2s后,V0灯灭,如此循环操作,#include<...
//**依据中断做一个按键控制V0灯,
//**就是当Key1按下时,延时2s后V0点亮,
//***再按一下Key1,延时2s后,V0灯灭,如此循环操作,
#include<pic.h>
__CONFIG(HS&WDTDIS&LVPDIS);
#define P1 RC0
#define LE RD0
#define uint unsigned int
unsigned int q;
unsigned char h;
int keybit;
//中断程序
void interrupt ISR(void) //PIC单片机的所有中断都是这一个入口
{
if(TMR1IF==1) //需要进一步判断是否是T1中断
{
TMR1H=0x0B; //重置初值,设的定时间为0.5s
TMR1L=0xE9; //重置初值
TMR1IF=0; //清中断标志位,以备下次中断
//***此处用户自行添加定时器T1中断处理程序***
if(++h>3)
{
h=0;
if(P1==0)
{
LE=!LE;
TMR1ON=!TMR1ON;
}
}
}
}
//
//定时器TMR1初始化
void TMER1_uint()
{
TMR1CS=0;
T1CKPS0=1;
T1CKPS1=1;
TMR1H=0X0B;
TMR1L=0XE9;
TMR1ON=1;
TMR1IF=0;
TMR1IE=1;
PEIE=1;
GIE=1;
}
//主函数
void main(void)
{
TRISC=0XFF;
TRISD=0XFE;
PORTC=0X00;
PORTD=0X00;
while(1)
{
if(P1==0XFF)
{
//if(++q>200) //消抖,keybit同时也起到微分的作用,即按下一次键无论多长时间,都只处理一次
{
TMER1_uint();
//q=0;
keybit=1;
}
}
else
{
if(keybit==1)
{
keybit=0;
if(P1==1) //如果是K1键按下,则进行处理
{
TMER1_uint();
}
}
}
}
} 展开
//**就是当Key1按下时,延时2s后V0点亮,
//***再按一下Key1,延时2s后,V0灯灭,如此循环操作,
#include<pic.h>
__CONFIG(HS&WDTDIS&LVPDIS);
#define P1 RC0
#define LE RD0
#define uint unsigned int
unsigned int q;
unsigned char h;
int keybit;
//中断程序
void interrupt ISR(void) //PIC单片机的所有中断都是这一个入口
{
if(TMR1IF==1) //需要进一步判断是否是T1中断
{
TMR1H=0x0B; //重置初值,设的定时间为0.5s
TMR1L=0xE9; //重置初值
TMR1IF=0; //清中断标志位,以备下次中断
//***此处用户自行添加定时器T1中断处理程序***
if(++h>3)
{
h=0;
if(P1==0)
{
LE=!LE;
TMR1ON=!TMR1ON;
}
}
}
}
//
//定时器TMR1初始化
void TMER1_uint()
{
TMR1CS=0;
T1CKPS0=1;
T1CKPS1=1;
TMR1H=0X0B;
TMR1L=0XE9;
TMR1ON=1;
TMR1IF=0;
TMR1IE=1;
PEIE=1;
GIE=1;
}
//主函数
void main(void)
{
TRISC=0XFF;
TRISD=0XFE;
PORTC=0X00;
PORTD=0X00;
while(1)
{
if(P1==0XFF)
{
//if(++q>200) //消抖,keybit同时也起到微分的作用,即按下一次键无论多长时间,都只处理一次
{
TMER1_uint();
//q=0;
keybit=1;
}
}
else
{
if(keybit==1)
{
keybit=0;
if(P1==1) //如果是K1键按下,则进行处理
{
TMER1_uint();
}
}
}
}
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询