直接贴代码:
/*
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