[求助] 基于nios矩阵键盘双向口的请教

贺巧玲   2011-8-4 09:19 楼主

谁能帮看看我写的这个代码,是矩阵键盘的程序,编译通过,但下载到板上没效果,双向口的使用要注意些什么呢

#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;
 }

回复评论 (3)

顶,支持一下!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-8-4 16:23
我有一个4*4键盘的vhdl程序,NIos核读取键值并显示。你要的话,可以发邮件给我。大家相互学习。
1035581247@qq.com
点赞  2011-8-7 11:29
这个程序能得到预期的效果吗?
点赞  2011-8-13 10:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复