Tivec 마이크로컨트롤러 기본 연습 1.4 소스

이 실험 소스는 참조 코드로서 EK-TM4C123GXL에서 검증할 수 있습니다.
시범 코드는 가장 좋은 코드가 아니라 이해하기 쉬운 측면에서 가장 잘 이해할 수 있는 코드를 얻는 것이다.
//*********************************************************************************//기초연습1.4: 키로 LED 깜박임 제어///프로세스 설명://1.하드웨어 회로에서 알 수 있듯이 버튼을 누르지 않았을 때, 읽기 가이드의 값은 고전평이다.버튼을 눌렀을 때 접지에서 발을 끄는 값을 읽는 것은 저전평이다.//키와 관련된 가이드를 GPIO로 설정하고 입력하십시오.폴링 방식으로 키를 읽습니다(무중단 방식).// 2. 트랙을 GPIO, 출력으로 설정합니다.높은 레벨 및 낮은 레벨 출력을 통해 LED의 밝기와 끄기를 제어합니다.// 3. 저전기 평상시를 읽으면 사용자가 버튼을 눌렀고 수조의 하표를 바꾸어 LED의 지연 시간을 바꾸고 깜빡이는 속도와 속도를 바꾸었다는 것을 설명한다.// 4. K1->깜박임이 빨라지고 K2->깜박임이 느려진다///하드웨어 설명://LED2(파란색)--PF0//LED3(녹색)--PA4--사용//LED4(빨간색)--PD6//K1--PD7--사용//K2--PF4--사용//K3--PA3//K4--PA2/////주의사항:///PFFPPD0과 비교한 특별한 보호사항입니다.다시 프로그래밍을 하려면 먼저 잠금 해제//팁://SysConfig 도구를 통해 발을 끄는 초기 설정을 해야 합니다. 이런 요소를 고려할 필요가 없습니다.//SysConfig 사용 참조 링크:https://www.bilibili.com/read/cv6258251/////사고://1.버튼의 상응하는 속도를 자세히 체득하고 몇 번 더 누르면 매번 응답이 있지 않습니까?//LED등이 느리게 깜박일 때, 때때로 버튼이 응답하지 않을 때가 있습니다. 코드가 이 때 버튼 스캔을 실행하지 않았기 때문입니다.//어떻게 개선합니까?버튼을 누르면 인터럽트 방식을 고려할 수 있습니다.//*****************************************************************************************************
#include 
#include 
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"

//  LED     ,      ,  8          .
//  ,      ,     0         ,  index 1-8.
uint32_t const delay_tab[]={0,50000,100000,150000,200000,300000,400000,500000,800000};

void main(void)
{
    uint32_t ui32_delay;
    uint32_t ui32_delay_config;
    uint8_t index;

    //-----------    -------------
    //  PA     ,   Ready
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA))
    {
    }

    //  PD     ,   Ready
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOD))
    {
    }

    //  PF     ,   Ready
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
    {
    }

    //-----------    -------------

    //PA4->  LED, PA4   GPIO,  
    GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4);

    //PD6->  LED, PD6   GPIO,  
    GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6);

    //PF0->  LED, PF0   GPIO,  
    HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
    HWREG(GPIO_PORTF_BASE+GPIO_O_CR)   |= GPIO_PIN_0;
    HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK) = 0x0;
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);

    //PD7->K1, PD7   GPIO,  
    HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
    HWREG(GPIO_PORTD_BASE+GPIO_O_CR)   |= GPIO_PIN_7;
    HWREG(GPIO_PORTD_BASE+GPIO_O_LOCK) = 0x0;
    GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);

    //PF4->K2, PF4   GPIO,  
    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);

//    //PA3->K3, PA3   GPIO,  
//    GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_3);
//
//    //PA2->K4, PA2   GPIO,  
//    GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2);


    //-----------LED     -------------

    //PA4     ,  LED 
    GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0xFF);
    //PD6     ,  LED 
    GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0xFF);
    //PF0     ,  LED 
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0xFF);


    index = 5;
    ui32_delay_config =delay_tab[index];

    //          :
    //(1)        ,   ;      ,    
    //
    //    +-----+     +------+
    //   |     |      |      |
    // ---+     +-----+      +---------
    //

    while(1)
    {
        //               

        //PD7->K1
        //       ,          ,        
        if(0 == GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7))
        {
            //      ,        ,    ,    
            index --;
            if(0 == index) index = 8;

            ui32_delay_config =delay_tab[index];

            //      ,                  
            while(0 == GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7));
        }

        //PF4->K2
        //       ,          ,        
        if(0 == GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4))
        {
            //      ,        ,    ,    
            index ++;
            if(9 == index) index = 1;

            ui32_delay_config =delay_tab[index];

            //      ,                  
            while(0 == GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4));
        }

        //-----    LED     

        //     ,LED 
        GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0x00);
        //  ,               
        for(ui32_delay=0;ui32_delay

좋은 웹페이지 즐겨찾기