经过一个星期对交叉编译环境的学习,已经懂得如何编写简单的裸机程序。
今天分享的程序是通过按键控制LED,按键按下LED亮,松开LED灭。
首先看原理图中GPIO的描述:
配置按键的GPIO管脚为输入,并且设置为上拉,然后通过判断管脚的电压值来控制LED。
下面是程序:
#define MP0_4CON (*(vola
tile unsigned long *)0xE0200340)
#define MP0_4DAT (*(volatile unsigned long *)0xE0200344)
#define MP0_4PUD (*(volatile unsigned long *)0xE0200348)
#define GPH0CON (*(volatile unsigned long *)0xE0200C00)
#define GPH0DAT (*(volatile unsigned long *)0xE0200C04)
#define GPH0PUD (*(volatile unsigned long *)0xE0200C08)
static void Delay(int count)
{
volatile int i, j = 0;
volatile static int loop = 800000000/10000;
for(;count > 0;count--)
for(i=0;i < loop; i++) { j++; }
}
int main(void)
{
int i=0;
MP0_4CON |= (MP0_4CON & ~0xFFFF0000) | 0x11110000; //设置高4为管脚为输出方式
GPH0CON |= (GPH0CON &~0xFFFF0000) | 0X00000000;//设置高4为管脚为输入方式
GPH0PUD |=0xAA00;
MP0_4DAT |= 0xff;
GPH0DAT |= 0xff;
while(1)
{
if((GPH0DAT & 0x80) == 0)
MP0_4DAT &= ~( 1<< 4);
else
MP0_4DAT |= 1<< 4;
if((GPH0DAT & 0x40) == 0)
MP0_4DAT &= ~( 1<< 5);
else
MP0_4DAT |= 1<< 5;
if((GPH0DAT & 0x20) == 0)
MP0_4DAT &= ~( 1<< 6);
else
MP0_4DAT |= 1<< 6;
if((GPH0DAT & 0x10) == 0)
MP0_4DAT &= ~( 1<< 7);
else
MP0_4DAT |= 1<< 7;
}
return 0;
}
演示:
光线不好,请原谅。
这是我id第一个裸机程序,如果有不对的地方,请大家支持,谢谢。