打印

请教单片机键盘的问题

[复制链接]
1863|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nedonho|  楼主 | 2010-6-18 15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾:
      我最近用PIC单片机写了一个按键控制步进电机程序,利用的是RB口的电平变化中断,程序基本上是按照一本教材上的写的,可是写完后用键盘的时候发现第一个按键和第三个按键功能是一样的(就是K5和K7),因为键盘是自己焊的,以为是键盘的问题,可检查后也没发现什么问题,希望各位能够指导一下。

//低优先级中断子程序
void interrupt low_priority LOW_ISR()
{
         if(RBIF==1)                        //PORTB端口电平变化中断
         {
                                                //按键扫描子程序
                  keyscan_portb1_interrupt();
                  RBIF=0;                      //清中断标志
         }
}
//PORTB(RB5)端口电平变化中断查询键值子程序,K5为手动模式启动按键,K6为手动模式停止按键,K7,K8为电机方向控制按键
void keyscan_portb1_interrupt()
{
         if(RB5==0)                                    //有键按下
         {
                  delay(100);                       //若有键按下,则软件延时100MS防抖动
                  if(RB5==1)return;                    //防抖动后无键按下,判定为抖动,不做按键处理
                  //以下为防按键抖动后仍有键按下的查键值
                  RD0=0;                  //设置K5为低电平
                  RD1=0;                  //设置K6为低电平
                  RD2=1;                  //设置K7为低电平
                  RD3=1;                  //设置K8为低电平
                  if(RB5==0)             // 按键是K5,K6中一个
                  {
                           RD1=1;           //只有K5为低电平输出
                           if(RB5==0)        //仅当K5为低电平时,RB5被下拉,则为K5键按下
                           {
                                    key=5;        //K5启动TMR2,系统开始快速运行
                           }
                           else key=6;        //K6关闭TMR2,系统停止运行
                           portb_keyflag=1;      //新建按下标志=1,表示有新键按下
                           RD0=0;                //设置电平变化产生中断的初始条件
                           RD1=0;
                           RD2=0;
                           RD3=0;
                           PORTB=PORTB;
                           return;
                  }
                  RD0=1;                  //不是K5,K6键按下,则查找K7,K8,设K5,K6为高电平,不查K5,K6
                  RD1=1;
                  RD2=0;
                  RD3=0;  
                  if(RB5==0)
                  {
                           RD3=1;
                           if(RB5==0)
                           {
                                  key=7;
                           }
                           else key=8;
                           portb_keyflag=1;
                           RD0=0;
                           RD1=0;
                           RD2=0;
                           RD3=0;
                           PORTB=PORTB;
                   }                                 
         }
}

void main()
{
      initial();                    //系统初始化子程序
      tm1int();                     //TMR1初始化
      portb_interrupt_initial();   //PORTB端口电平变化中断初始化
      IPEN=1;                      //使能中断高优先级和低优先级
      INTCON=INTCON|0xC0;          //开总中断,开外围模块中断
      while(1)
      {  
                shoudong_qidong_move();
                if(portb_keyflag==1)              //若有按键按下
                {
       //                    anjian_deal();        //按键处理子程序
                           portb_keyflag=0;      //清按键按下标志
                           if(key==5)
                           {
                                   TMR1ON=1;
                           }
                           else if(key==6)
                           {
                                   TMR1ON=0;                                 
                                 
                           }
                           else if(key==7)
                           {
                                   RD5=0;
                           }
                           else if(key==8)
                           {
                                  RD5=1;
                           }
                           
                }
       }
}
沙发
Mary_luo| | 2010-6-19 20:48 | 只看该作者
楼主用的哪个型号啊?

使用特权

评论回复
板凳
nedonho|  楼主 | 2010-6-20 18:31 | 只看该作者
用的是 PIC18F458

使用特权

评论回复
地板
nedonho|  楼主 | 2010-6-21 10:26 | 只看该作者
有没有人给点帮助啊?我又焊了4个按键,还是老样子,第一个和第三个按键还是同样的功能,按键的上拉电压时5V,上拉电阻为10K。请斑竹能不能给点建议啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

31

帖子

1

粉丝