【实验内容】任选一个LED灯,4秒内从全灭到全亮,亮度变化至少20个台阶,循环往复。

1.#ifdef DEBUG 的作用

//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

 

   在工程设置里有一些设置会对该工程自动产生一系列的宏,用以控制程序的编译和运行。就好象楼上说的一样,如果你把代码夹在#ifdef DEBUG 和对应的 #endif 中间,那么这段代码只有在调试(DEBUG)下才会被编译。也就是说,如果你在RELEASE模式下,这些代码根本就不会存在于你的最终代码里头。

   你可以手动实现DEBUG的定义如:
   
   #define DEBUG

   那么你的 #ifdef DEBUG 就会是真的。夹在中间的代码会进行编译,可以说,这些宏代码本身是面向编译器使用的,不要用来实现你的业务逻辑代码,这样会带来很不好的影响。这类宏定义的一个典型应用就是产生/屏蔽调试信息,你可以把这种应用放在你希望对程序的执行过程进行跟踪的代码里,为它们加上一些‘痕迹’,方便你进行判断。而在其他模式(RELEASE)下,这个函数只不过是一个空函数,又因为它是inline的,所以它实际上不会为你产生任何代码。这样你就能为自己的代码带来一种非常实用的效果,既能在DEBUG模式下为你提供判断的依据,又能在最终的RELEASE版中方便的抛弃掉它们,而不需要你手动地删除掉那些代码。

   作为宏指令,如果定义了DEBUG宏那么编译#IF后面到#ENDIF的代码否则不编译DEBUG宏一般是编译器产生,如果编译模式是DEBUG就会产生这个宏,如果是RELEASE就不会

2.设置系统时钟

    //
    //设置系统时钟为50MHz
    //
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

因为SYSCTL_USE_PLL启用了内部的PLL,它的时钟参考源是外部晶振(16MHZ),PLL额定值是200MHz,SYSCTL_SYSDIV_4将其四分频,所以是50MHz不知道你用哪款芯片,811的话内部有内部振荡器12MHz+-30%

3.LED灯初始化

D2——蓝色——PF0(锁定状态,需要解锁)

D3——绿色——PA4

D4——红色——PD6

//*****************************************************************************
//Attention
//TM4C123 NMI unlock - To those who want to use PF0 and PD7, be reminded that these pins defaults as NMI ! ! !
//
//*****************************************************************************
    //
    // LED灯初始化
    //
    
    //1.外部设备设能,这里要用到PF0,所以使能PF端口
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    //2.PF0解锁(只有蓝灯需要)
    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0xFF;
    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;        
    //3.设置PF0管脚为输出类型    
   GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
    //4.因为蓝色的LED管脚有复用,所以初始状态是亮的,这里把它灭掉(其他灯也可以顺手灭一下)
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);

综合起来LED灯的初始化有以下几个步骤:外部设备使能,(解锁),设置管脚类型为输出,灭灯

4.主程序

while(1)
    {
        for(k=20;k>0;k--)    
          for(i=4000;i>0;i--)
            {
                GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0<<0);    //设置蓝色LED灯状态为亮
                for(j=30*(20-k);j>0;j--);                         //软件延时        
                GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);    //设置蓝色LED灯状态为灭
                for(j=30*k;j>0;j--);                              //软件延时
            }            
            
    }

 

posted on 2015-10-26 21:20  planet  阅读(4931)  评论(0编辑  收藏  举报