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