Board logo

标题: 麻烦帮忙看看一个程序:) [打印本页]

作者: xuexiacao    时间: 2006-5-29 15:09     标题: 麻烦帮忙看看一个程序:)

麻烦各位帮我看看一个函数。想在实验板上实现四个按键分别控制四个led。分别按键1、键2、键3、键4时分别是led1、led2、led3、led4其中一个亮。


可我的程序运行结果却是:第一次按了其中一个键,对应的led亮了;但是随后不管按哪个键,都一直是那个led亮。检查了多次,还是没有发现问题所在。帮帮忙:)


#include "excalibur.h"
int main(void)
{
   int buttons,buttonsLast=0x000F;  //按键变量
   int price,cost,number=1;         //默认购买一张票
   np_pio *pio1=na_button_pio;         //按键指针
   np_pio *pio2=na_led_pio;             //得到LED指针
   pio1->np_piodirection=0;          //设置按键端口全为输入端口
  
   while(1)
         {
           buttons=pio1->np_piodata;      //读取按键数据输入码
           if(buttons!=buttonsLast && buttonsLast==0x000F)  //判断是否有按键按下
             {
                switch(buttons & 0x000F)
                   {
                     case 0x000E:                  //站点1 led1亮
                        pio2->np_piodata=0x01;
                        price=2;
                        //液晶显示车票单价
                     break;


                     case 0x000D:                    //站点2 led2亮
                        pio2->np_piodata=(0x01<<1);
                        price=3;
                     break;
                   
                     case  0x000B:                    //站点3,led3亮
                        pio2->np_piodata=(0x01<<2);
                        price=5;
                     break;


                     case  0x0007:                 //站点4,led4亮
                        pio2->np_piodata=(0x01<<3);
                        price=6;
                     break;


                     case  0x000F:              //没有按键按下
                        buttons=buttonsLast=0x000F;
                     break;
                    default:
                    break;
                  }
              buttonsLast=buttons;           //保存当前按键值到buttonsLast变量
           }
      }
}


作者: kzw    时间: 2006-5-29 15:41

在pio的建立过程中有没有用edge capture寄存器。
作者: xuexiacao    时间: 2006-5-29 23:24

已经解决了 把最后一条语句去掉就可以了.
谢谢kzw
作者: kzw    时间: 2006-5-30 19:23

呵呵,是应该除掉最后一句阿
作者: zhangxj    时间: 2006-5-31 13:55

请问xuexiacao,你是在nios下编程的吧?
如果在nios2下编程,应该没有
np_pio *pio2=na_led_pio;//得到LED指针 这样的函数吧?
在nios2中定义指针该如何弄?
作者: xuexiacao    时间: 2006-5-31 16:19

我是在SDK Shell下编程的。
你说得没有错,同样的程序在IDE下连编译都通不过。
作者: meling    时间: 2006-5-31 19:13

nios2 都不用np-pio这样的结构提了
作者: kzw    时间: 2006-6-1 09:36

nios2下面pio都封装好了函数,直接操作就行,可以看看hello_led的工程。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0