您的位置:首页 > 编程语言 > C语言/C++

ok6410 按键测试c语言版程序

2013-03-17 22:22 369 查看
直接贴代码:

/*

name:led_key

author:lvtory

硬件平台:ok6410

function:

key1:实现从0-15二进制级数点亮led

key2:实现初始化

key3-key6:按键对应点亮相应led

使用查询方式

create:2013.3.17

*/

/**** led gpio NLED1-4 -> GPM0-3 */

#define rGPMCON (*(volatile unsigned *)0x7F008820)

#define rGPMDAT (*(volatile unsigned *)0x7f008824)

#define rGPMPUD (*(volatile unsigned *)0x7f008828)

/**** key gpio KEYINT1-6 ->GPN0-5 */

#define rGPNCON (*(volatile unsigned *)(0x7F008830))

#define rGPNDAT (*(volatile unsigned *)(0x7F008834))

#define rGPNPUD (*(volatile unsigned *)(0x7F008838))

void led_run();

void init()

{

/*配置led*/

rGPMCON=0x1111 ;//配置为 OUTPOUT

rGPMPUD=0x0;

rGPMDAT=0x0f; //全灭

/*配置key*/

rGPNCON=0x00 ;//配置为 INPUT

}

void delay(int n)

{

int i=0;

int j=0;

for(i=0;i<10000;i++)

{

for(j=0;j<2000;j++)

{

}

}

}

void key()

{

int key;

while(1)

{

while((key=(rGPNDAT&0x3f))==0x3f);

switch(key)

{

case 0x3e:

led_run();

break;

case 0x3d:

init();

break;

case 0x3b:

rGPMDAT=0x0e;

break;

case 0x37:

rGPMDAT=0x0d;

break;

case 0x2f:

rGPMDAT=0x0b;

break;

case 0x1f:

rGPMDAT=0x07;

break;

}

}

}

void led_run()

{

int num=0;

int i;

for(i=0;i<16;i++)

{

if((rGPNDAT&0x3f)==0x3d)

{

i=0;

rGPMDAT=~i;

break;

}

rGPMDAT=~i;

delay(100);

}

}

void Main()

{

init();

key();

}

汇编启动代码:

IMPORT Main

AREA |C$$code|, CODE, READONLY

ENTRY

start

B Main ;跳入MAIN程序

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: