基于nios矩阵键盘双向口的请教

2019-03-25 10:10发布

谁能帮看看我写的这个代码,是矩阵键盘的程序,编译通过,但下载到板上没效果,双向口的使用要注意些什么呢 #include <unistd.h>
#include "system.h"
/*/最基本的文件,有nios软件为用户生成。包括设备名称,属性,基地址,中断优先级等*/
#include "altera_avalon_pio_regs.h"
/*/包括映射端口的4种读写寄存器:1、数据寄存器读写函数2、方向寄存器读写函数
//3、中断屏蔽寄存器读写函数4、边沿捕获寄存器读写函数*/
#include "alt_types.h"
/*/数据类型定义
#include "basekeyaddress.h"
int main(void) __attribute__ ((weak,alias("alt_main")));
alt_u8 keyscan()
{
    alt_u8 date;
    alt_u8 num;
    alt_u8 n,m;
    IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0xff);//方向寄存器函数写入0,为输入模式(读),写入1,为输出模式(写)
    IOWR_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE,0x0f);
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
    date=IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
    while(date!=0x0f)
    {
       usleep(50000);
      // IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
       date=IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
       while(date!=0x0f)
       {
            //IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
            m=IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
          
            IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0xff);
            IOWR_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE,0xf0);
          
            IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
            n=IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
        
            m|=n;
            switch(m)
            {
                case 0x7e:num=0xef;break;
                case 0xbe:num=0xdf;break;
                case 0xde:num=0xbf;break;
                case 0xee:num=0x7f;break;
                case 0x7d:num=0xee;break;
                case 0xbd:num=0xed;break;
                case 0xdd:num=0xeb;break;
                case 0xed:num=0xe7;break;
                case 0x7b:num=0xde;break;
                case 0xbb:num=0xdd;break;
                case 0xdb:num=0xdb;break;
                case 0xeb:num=0xd7;break;
                case 0x77:num=0x7e;break;
                case 0xb7:num=0x7d;break;
                case 0xd7:num=0x7b;break;
                case 0xe7:num=0x77;break;
                default:break;           
            }
        IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0xff);   
        IOWR_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE,0x0f);
        usleep(20000);
        IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
        date=IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
        while(date!=0x0f);
       } 
    }
    //IOWR_ALTERA_AVALON_PIO_DATA(KEYVALUE_PIO_BASE,num);
    return num;
}
int alt_main(void)
 {
 
    alt_u8 data;
    IOWR_ALTERA_AVALON_PIO_DATA(KEYVALUE_PIO_BASE,0xff);
     usleep(200000);
      while(1)
   {
     data=keyscan();
     IOWR_ALTERA_AVALON_PIO_DATA(KEYVALUE_PIO_BASE,data);
     usleep(200000);
   }
   return 0;
 } 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。