【TIVA C Launchpad】学习分享-GPIO之led&key

2019-08-04 18:05发布

本帖最后由 gcxzhz 于 2014-1-4 13:51 编辑

前两天在做课程设计,又回到了以前的实验室。该努力了,研究生自己没去考,2014自己马上就去工作了,可能是没找工作吧,有点忧伤。主要是实验室的同学都保研了,说实话,心里很失落。考研就那么重要吗,家里人都让考研,我感觉好累啊。  先工作吧,以后有机会一定要上研,不要被别人看不起。

言归正传吧 忙里偷闲 又看了看 TIVA C Launchpad  gpio模块  书上有点亮led的程序。都能理解,做做课后题复习一下(课后题就是使用key点亮led)
刚开始直接调用 GPIOPinRead 函数读取按键值 发现老是不对  最后又看了看 button.c的函数 发现初始化的时候不是我想的那样简单(时钟初始化,使能外设时钟,设置io模式,进入while(1)key扫描)
看完它的程序后明白了 要解锁寄存器CR     程序中//
Unlock PF0....处    才可以设置输入
运行结果是    默认全亮 即为白 {MOD}   按左键红灯亮  按右键蓝灯亮    两个键都按是绿 {MOD}亮
我是在源程序的基础上改的  加了
#include "inc/hw_gpio.h"
#define GPIO_LOCK_KEY           0x4C4F434B  // Unlocks the GPIO_CR register
程序如下
  1. #include <stdint.h>
  2. #include <stdbool.h>
  3. #include "inc/hw_types.h"
  4. #include "inc/hw_memmap.h"
  5. #include "inc/hw_gpio.h"
  6. #include "driverlib/pin_map.h"
  7. #include "driverlib/sysctl.h"
  8. #include "driverlib/gpio.h"
  9. #define GPIO_LOCK_KEY           0x4C4F434B  // Unlocks the GPIO_CR register
  10. int main(void)
  11. {

  12.         uint8_t ui8button;
  13.         SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);       //set up timer 50mhz
  14.         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);                                            //enable gpio f
  15.         GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);               //setup gpiof PIN1 PIN2 PIN3 OUTPUT

  16. // Unlock PF0 so we can change it to a GPIO input
  17. // Once we have enabled (unlocked) the commit register then re-lock it
  18. // to prevent further changes.  PF0 is muxed with NMI thus a special case.
  19.         
  20.         HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;                                    //UNLOCK CR REGISTER
  21.         HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
  22.         HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;

  23.         GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4, GPIO_DIR_MODE_IN);                //SET UP GPIO PIN0 PIN5 INPUT
  24.         GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4,
  25.                                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);                       //SET UP GPIOF weak pull-up   WITH 2MA
  26.        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0xff);

  27.         while(1)
  28.         {
  29.                 ui8button = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_4);                       //READ KEY
  30.                 if(ui8button !=0x11)                                                                                                           // IF KEY WAS RRESSED
  31.                 {
  32.                         SysCtlDelay(200);                                                                                                       //debounced
  33.                         if(ui8button !=0x11)
  34.                         {
  35.                                 if(ui8button ==0x01)                                                                                           // LEFT BUTTON WAS PRESSED
  36.                                         {GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x02);}        //RED
  37.                                         else if(ui8button ==0x10)                                                       //RIGHT BUTTON WAS PRESSED
  38.                                         {GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x04);}         //BLUD
  39.                                         else
  40.                                        {GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x08);}      // RLEFT AND RIGHA                 WARE    PRESSED       GREEN                                       
  41.                         }
  42.                 }
  43.                 SysCtlDelay(2000000);

  44.         }
  45. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。