有没有学习单片机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();
}
}
}
}
}
展开
 我来答
Cindere鞡
2013-07-07 · TA获得超过7254个赞
知道大有可为答主
回答量:1148
采纳率:84%
帮助的人:513万
展开全部
我记得前天有个妹纸在GL7交流群里问这个问题,我帮她写了个程序,她要求一直按着2s才亮或灭,按一次两次甚至无数次都不行,只能一直按着不放。没猜错你就是那个妹纸么,有什么问题可以QQ交流,如果你不是我这儿有程序。
嘉铭爱
2013-07-07 · 超过34用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:69.8万
展开全部
具体是什么现象?!
追问
现在是出现了按着按键二秒会亮,再按两秒会灭!主要是这里的定时器我用的感觉不行!总觉得不是这样用的?你能看看该怎么用比较好些?
追答
我记得pic单片机和51不一样啊  貌似不用在中断重新装初值吧!  你看看它的使用手册,我这边的资料已经找不到了   你上网搜一下  看看timer那章
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式