第8课 点亮第一个LED灯

8.1 点亮LED

硬件链接图,编程

 

由硬件图可知,当175引脚GPIO[0]输出为0时,LED点亮,当GPIO[0]输出为1时,LED就熄灭,GPIO寄存器的基地址为0x8000d000,下图为用到的几个寄存器的偏移地址spa

 

首先,选中GPIO引脚,blog

*((unsigned short *)(0x8000d000+0x00)) = 0x5555;开发

*((unsigned short *)(0x8000d000+0x04)) = 0x5555;it

而后,GPIO[0]做为输出,其他的引脚置为输入。io

*((unsigned short *)(0x8000d000+0x08)) = 0xfffe;入门

读取当前GPIO的状态,避免在后续操做中改变GPIO的状态,致使其余的问题,file

unsigned short val;循环

val = *((unsigned short *)(0x8000d000+0x10));硬件

最后,在输出寄存器里,将GPIO[0]置为0,具体为将GPIO当前的状态和0xfffe相与,就会将GPIO[0]置为0了,而其余引脚保持不变。并将改变后的值写入GPIO输出寄存器。

*((unsigned short *)(0x8000d000+0x0c)) = (val&0xfffe);

若是要熄灭LED,只需将最后一句换为:

*((unsigned short *)(0x8000d000+0x0c)) = (val|0x0001);

点亮LED的完整程序以下:

 

给该程序编写一个Makefile文件,能够借用第二课的hello程序的Makefile文件,修改一下,

 

接下来下载到开发板运行一下,

 

 

8.2 按键控制LED的亮灭

由硬件图可知,当按键按下的时候,GPIO[1]引脚的状态为1,当按键松开的时候,GPIO[1]引脚的状态为0,经过读取GPIO[1]引脚的状态就能够知道按键是否按下,经过一个while大循环,不断检测按键的状态。若是按键被按下,就改变一次当前led的状态。具体程序以下:

#include <stdio.h>

 

void GPIO_Init(void);

void led_on(unsigned short val);

void led_off(unsigned short val);

 

void main()

{

      

       unsigned short val;

       unsigned short flag=0;

       GPIO_Init();

      

       while(1)

       {

              val= *((unsigned short *)(0x8000d000+0x10));

              if( (val & 0x02) == 0x02 )

              {

                     if(flag==0)

                     {

                            led_on(val);

                            flag=1;

                     }

                     else

                     {

                            led_off(val);

                            flag=0;

                     }                          

              }

             

       }

 

}

 

void GPIO_Init(void)

{

       *((unsigned short *)(0x8000d000+0x00)) = 0x5555;

       *((unsigned short *)(0x8000d000+0x04)) = 0x5555;

       *((unsigned short *)(0x8000d000+0x08)) = 0xfffe;  

}

 

void led_on(unsigned short val)

{

       *((unsigned short *)(0x8000d000+0x0c)) = (val&0xfffe);

}

 

void led_off(unsigned short val)

{

       *((unsigned short *)(0x8000d000+0x0c)) = (val|0x0001);

}

8.3 总结

这一课主要是编程的内容,问题不难,通常都是嵌入式入门的第一个程序——点亮发光二极管,经过这一课,对操做寄存器来控制引脚的状态大致有了一些理解。同时也学到了一些嵌入式c语言和标准c语言之间的差别。

相关文章
相关标签/搜索