LPC1114,16位定时器PWM呼吸灯

在Keil MDK 4.74上编写一段程序:

(1)利用16位定时器1实现定时1s,控制LPC1114微控制器的GPIO引脚PIO1_9上的LED灯状态反转(可以用中断方式也可以用匹配输出功能);

(2)设置16位定时器1工作在PWM模式,利用另外一个定时器定时增大或者减小占空比,实现PIO1_9上的LED灯渐亮渐灭的呼吸灯效果,改变呼吸的频率观察效果。

写出主程序、各子程序和完整注释,并在LPC1114 DevKit口袋开发板上调试运行通过。

要求:参考所提供子程序,写出主程序、初始化子程序和中断服务子程序,并进行完整注释;建立工程项目,编译通过后并在LPC1114 DevKit口袋开发板上调试运行。

作业提交方式:直接输入完整程序文本(带注释),并插入编译通过的图片和调试运行结果的小视频。

提示:LED灯状态反转可以用定时器中断方式也可以用匹配输出功能但不能两个同时用。

相关寄存器:


源码:

#include <LPC11xx.h>
int flag=0;                                // 定义标志变量,代表占空比是否越界
float dc=0;                               //定义变量,代表占空比
void TMR16B1_PWM_Init(void)
{
	LPC_SYSCON->SYSAHBCLKCTRL |= (1UL << 8);  // 16位定时器1时钟使能
	LPC_SYSCON->SYSAHBCLKCTRL |= (1UL << 16);  //IO配置块时钟使能
	LPC_IOCON->PIO1_9 |= 0x01;  //    MAT0匹配IO1.9
	LPC_TMR16B1->PR = 0;        //      分频系数;
	LPC_TMR16B1->PWMC= 0x01;    //开通道MAT0;
	LPC_TMR16B1->MCR = 0x02 <<9;  //设置MR3匹配后复位TC;
	LPC_TMR16B1->MR3 = SystemCoreClock/100;  //PWM周期设置为100HZ
	LPC_TMR16B1->MR0 = LPC_TMR16B1->MR3/2;//PWM占空比
	LPC_TMR16B1->TCR = 0x01;  // 启动定时器
}
void SysTick_Handler(void) 
{ 
	if (dc>=1 | dc<=0)                    //当占空比越界
		{
			flag = ~flag;                   
		}
		if(flag==0)                        //渐亮
		{
			LPC_TMR16B1->MR0 = dc*LPC_TMR16B1->MR3;      
			dc=dc+0.0001;                                      //占空比++
		}
		else                               //渐暗
		{
			LPC_TMR16B1->MR0 = dc*LPC_TMR16B1->MR3;
			dc=dc-0.0001;                                      //占空比--
		}	
}
int main()
{
	TMR16B1_PWM_Init();            //初始化
	SysTick_Config(SystemCoreClock / 10000);//节拍定时器改变占空比
	while(1);                          
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值