TiveC微控制器基础练习1.2源码

//*****************************************************************************
// 基础练习1.2: 软件延时实现LED灯亮度控制
//
// 硬件描述:
//    LED2(蓝色) --PF0
//    LED3(绿色) --PA4
//    LED4(红色) --PD6
//
// 注意事项:
// 引脚PF0和PD7比较特殊,默认是保护的。要重新编程操作的话,需要先解锁
// 小技巧:
//  通过SysConfig工具进行引脚的初始配置,就不用考虑这些因素了.
//  SysConfig的使用可参考链接: https://www.bilibili.com/read/cv6258251
//
// 过程描述:
//  把引脚配置成GPIO,输出。 通过输出高电平和低电平来控制LED的亮和灭。
//  亮/灭的速度如果很快,人眼就识别不出来.此时改变亮/灭的时间比,就可以改变亮度.
//
// 思考:
//  1. 怎么用宏定义来实现延时?方便修改
//
//*****************************************************************************

#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"

void main(void)
{
    //0-2的32次方-1, 4294967295
    uint32_t ui32_delay;

    //使能PA外设的时钟
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    //等待外设Ready
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA))
    {
    }

    //将PA4配置成GPIO,方向为输出
    GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4);


    //PF0,蓝色LED引脚也初始化
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
    {
    }
    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);
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0xFF);

    //可能出现的错误:
    //(1) 要在两个地方加软件延时,点亮LED后延时,熄灭LED后也要加延时;
    //    LED亮的时间长,亮度就大;
    //    +-----+      +------+
    //    |     |      |      |
    // ---+     +------+      +---------
    // 重点在于延时参数的调整, 间隔太久, 会出现闪烁的效果.
    // 先按照50%张开空比,调整时间, 到看不出闪烁的效果; 然后再调整高低电平的占比;
    while(1)
    {
        //PA4输出低电平,LED亮
        GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0x00);
        //此处要加延时,延时越长,表示亮的时间越久.亮度高
        //例如,此处的延时分别为  30,300,3000, 下载代码,可以看到亮度有明显区别;
        for(ui32_delay=0;ui32_delay<3000;ui32_delay++);

        //PA4输出高电平,LED灭
        GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0xFF);
        //此处要加延时,延时越长,表示灭的时间越久,亮度低
        for(ui32_delay=0;ui32_delay<5000;ui32_delay++);
    }

}


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HappyShengxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值