【cc2541历程】按键控制PWM调光
来源:互联网 发布:知之深爱之切原文阅读 编辑:程序博客网 时间:2024/06/05 10:09
一、简介
本文将介绍如何用S1按键,控制相应的PWM.控制相应的LED.
二、开发平台
编译环境:IAR820.02
协议栈:BLE-CC254x-1.40
代码查看器:Source Insight 3.5
硬件平台:SmartRf 开发板
三、编写声明
作者:爱已oО欠费
相关CC2541群:606444519
淘宝小店:https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4023-16306486995.5.hdKUUO&id=548576956486
四、实验前提完成以下博文
【cc2541历程】按键:http://blog.csdn.net/wangjiawu7/article/details/71075395
五、相关硬件:
六、实验步骤
1)创建pwm.c文件和一个Pwm.h文件
(存放在“F:\2541学习历程\cc2541\按键控制PWM\BLE-CC254x-1.4.0\Projects\ble\SimpleBLEPeripheral\Source”路径下)
2)编辑pwm.c文件,代码如下:
#include <ioCC2540.h>#include "bcomdef.h"#include "OSAL.h"#include "pwm.h"//PWM设定void PWM_Set(uint8 pwm_p11, uint8 pwm_p10, uint8 pwm_p07, uint8 pwm_p06){ //uint16 radio; uint16 Pwm_Rate; uint32 pwm_value[4]; if(pwm_p11 == 0 && pwm_p10 == 0 && pwm_p07 == 0 && pwm_p06 == 0) {Set_General_Out();}else{ EA=0; Set_Pwm_Out(); //100Hz Pwm_Rate = 32000000L / 32L / 100L;//// pwm_value[0] = pwm_p11; pwm_value[0] = pwm_value[0]*Pwm_Rate/255; pwm_value[1] = pwm_p10; pwm_value[1] = pwm_value[1]*Pwm_Rate/255; pwm_value[2] = pwm_p07; pwm_value[2] = pwm_value[2]*Pwm_Rate/255; pwm_value[3] = pwm_p06; pwm_value[3] = pwm_value[3]*Pwm_Rate/255; T1CC0L = Pwm_Rate%256; T1CC0H = Pwm_Rate/256; T1CC1L = pwm_value[0]%256; T1CC1H = pwm_value[0]/256; //P1_1 T1CC2L = pwm_value[1]%256; T1CC2H = pwm_value[1]/256; //P1_0 T1CC3L = pwm_value[2]%256; T1CC3H = pwm_value[2]/256; //P0_7 T1CC4L = pwm_value[3]%256; T1CC4H = pwm_value[3]/256; //P0_6 EA=1; }}//设置IO口为普通输出功能 void Set_General_Out(void){ P1SEL &= ~(BV(0)|BV(1)); //设置P1_0,P1_1为GPIO功能 P1DIR |= (BV(0)|BV(1)); //设置P1_0,P1_1为输出管脚 P1 &= ~(BV(0)|BV(1)); //设置P1_0,P1_1输出为0 P0SEL &= ~(BV(6)|BV(7)); // 设置P1_0,P1_1为gpio功能 P0DIR |= ~(BV(6)|BV(7)); // 设置P1_0,P1_1为输出管脚 P0 &= ~(BV(6)|BV(7)); // 设置P1_0,P1_1输出为0}//设置IO口为PWM外设功能voidSet_Pwm_Out(void){ P1DIR|= BV(0)|BV(1);//设置P1_0,P1_1为外设功能 P1SEL|= BV(0)|BV(1);//设置P1_0,P1_1为输出为PWM P0DIR|= BV(6)|BV(7);//设置P0_6,P0_7为外设功能 P0SEL|= BV(6)|BV(7);//设置P0_6,P0_7为输出为PWM PERCFG |= 0x40;// Select Timer 1 Alternative 2 location , p88/* 00: Tick frequency/1 01: Tick frequency/8 10: Tick frequency/32 11: Tick frequency/128 mode: modulo bit[1:0]=10, div: tick/128 bit[3:2]=11 *///Clear output on compare-up, set on compare-down in up-down mode. Otherwise clear output//on compare, set on 0.//Compare mode T1CTL = 0x0a; //0x0e T1CCTL0 = 0x3c; T1CCTL1 = 0x24;//P1_1 T1CCTL2 = 0x24;//P1_0 T1CCTL3 = 0x24; T1CCTL4 = 0x24; T1CNTH = 0xff;//P0_7 T1CNTL = 0xff;//P0_6}
3)编辑pwm.h文件,代码如下:
#ifndef _PWM_H_#define _PWM_H_/*pwm_p11 表示p1.1 输出pwm信号占空比, 注意这个占空比是相对于 0xff的占空比pwm_p10 表示p1.0 输出pwm信号占空比, 注意这个占空比是相对于 0xff的占空比pwm_p07 表示p0.7 输出pwm信号占空比, 注意这个占空比是相对于 0xff的占空比pwm_p06 表示p0.6 输出pwm信号占空比, 注意这个占空比是相对于 0xff的占空比*/void PWM_Set(uint8 pwm_p11, uint8 pwm_p10, uint8 pwm_p07, uint8 pwm_p06);void Set_General_Out(void);voidSet_Pwm_Out(void);#endif
4)在工程中添加相应的pwm.c文件和pwm.h
单击左上角工程SimpleBLEPeripheral.ewp->App->右键->Add->
然后选择路径(F:\2541学习历程\cc2541\6.按键控制PWM\BLE-CC254x-1.4.0\Projects\ble\SimpleBLEPeripheral\Source)中添加
2.定义pwm相关事件1)定义PWM相关事件(SimpleBLEPeripheral.c中)
添加相应的头文件pwm.h
2)定义一个pwm数组 uint8 pwm[4];
3)在按键S1函数simpleBLEPeripheral_HandleKeys( uint8 shift, uint8 keys )函数中(SimpleBLEPeripheral.c文件中)添加一下代码 //由定时器1产生的8位PWM数值,取值范围为0~255 if ( keys & HAL_KEY_SW_6 ) { pwm[0] = pwm[0]+50;//每次数值增加50pwm[1] = pwm[1]+50;//每次数值增加50pwm[2] = pwm[2]+50;//每次数值增加50pwm[3] = pwm[3]+50;//每次数值增加50if(pwm[0] ==250)//如果等于250,则清0{pwm[0] = 0;pwm[1] = 0;pwm[2] = 0;pwm[3] = 0;}#if (defined HAL_LCD) && (HAL_LCD == TRUE) HalLcdWriteStringValue( "Key_Plus[0]:", (uint16)(pwm[0] ), 16, HAL_LCD_LINE_5 ); HalLcdWriteStringValue( "Key_Plus[1]:", (uint16)(pwm[1] ), 16, HAL_LCD_LINE_6 ); HalLcdWriteStringValue( "Key_Plus[2]:", (uint16)(pwm[2] ), 16, HAL_LCD_LINE_7 ); HalLcdWriteStringValue( "Key_Plus[3]:", (uint16)(pwm[3] ), 16, HAL_LCD_LINE_8 ); #endif // (defined HAL_LCD) && (HAL_LCD == TRUE) PWM_Set(pwm[0], pwm[1], pwm[2], pwm[3]); }
七、实验结果
编译,下载 ok.
通过按Smart RF板上的S1键,LED0,LED1由暗到亮逐渐累加.
2.定义pwm相关事件
1)定义PWM相关事件(SimpleBLEPeripheral.c中)
添加相应的头文件
pwm.h
2)定义一个pwm数组
uint8 pwm[4];
3)在按键S1函数simpleBLEPeripheral_HandleKeys( uint8 shift, uint8 keys )函数中(SimpleBLEPeripheral.c文件中)
添加一下代码
//由定时器1产生的8位PWM数值,取值范围为0~255 if ( keys & HAL_KEY_SW_6 ) { pwm[0] = pwm[0]+50;//每次数值增加50pwm[1] = pwm[1]+50;//每次数值增加50pwm[2] = pwm[2]+50;//每次数值增加50pwm[3] = pwm[3]+50;//每次数值增加50if(pwm[0] ==250)//如果等于250,则清0{pwm[0] = 0;pwm[1] = 0;pwm[2] = 0;pwm[3] = 0;}#if (defined HAL_LCD) && (HAL_LCD == TRUE) HalLcdWriteStringValue( "Key_Plus[0]:", (uint16)(pwm[0] ), 16, HAL_LCD_LINE_5 ); HalLcdWriteStringValue( "Key_Plus[1]:", (uint16)(pwm[1] ), 16, HAL_LCD_LINE_6 ); HalLcdWriteStringValue( "Key_Plus[2]:", (uint16)(pwm[2] ), 16, HAL_LCD_LINE_7 ); HalLcdWriteStringValue( "Key_Plus[3]:", (uint16)(pwm[3] ), 16, HAL_LCD_LINE_8 ); #endif // (defined HAL_LCD) && (HAL_LCD == TRUE) PWM_Set(pwm[0], pwm[1], pwm[2], pwm[3]); }
七、实验结果
编译,下载 ok.
通过按Smart RF板上的S1键,LED0,LED1由暗到亮逐渐累加.
阅读全文
0 0
- 【cc2541历程】按键控制PWM调光
- STM8S的按键PWM调光灯历程
- 【cc2541历程】APPPWM调光
- 【cc2541历程】按键
- PWM 调光
- 【cc2541历程】APP控制LED
- 【BLE】CC2541之PWM控制直流电机
- 6.PWM调光
- nucle LED 调光PWM
- cc2541智能调光蓝牙模块
- 【cc2541历程】按键发送键值到APP端
- 51单片机PWM波调光
- 【BLE】CC2541之PWM
- cc2541之pwm笔记
- cc2541之pwm笔记
- CC2541/CC2530 pwm
- 51单片机 小车 L298N pwm调速 串口控制 按键控制
- 可编程控制的调光
- C#网络编程(二、.Net网络编程基本概念)
- Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- 冒泡法对数排列(由小到大)
- easyui treegrid 获取子节点
- Visio画任意曲线
- 【cc2541历程】按键控制PWM调光
- Windows下amp平台搭建(图文教程)
- 问题:struct和class的区别,struct能否包含成员函数
- charles使用
- 研究生阶段如何学习、做研究
- js控制图片自动缩放,实现铺满盒子,不变形,完全局中
- oracle数据中记录被另一个用户锁住
- JQuery中的id选择器含有特殊字符时,不能选中dom元素!
- ajax开发:基于 Token 的身份验证