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