前言

基于PMS150G操控PWM调节占空比做到呼吸灯,调节灯光亮度的作用

直接看代码吧,都有注释

代码1

呼吸灯


#include    "extern.h"void    TM2_Init(void);
void    LED_light(void);void    FPPA0 (void)
{.ADJUST_IC SYSCLK=IHRC/16     //  SYSCLK=IHRC/4clkmd.En_WatchDog =  0;      //  WatchDog Enable     看门狗//   Insert Initial CodeTM2_Init();while (1){LED_light();//      ...
//      wdreset;        看门狗复位}
}void   TM2_Init(void)//设置频率
{
//  $ TM2C SYSCLK,PB2,PWM;      //选择时钟源,输出脚,PWM模式,是否反极性输出(写Inverse为启用,不写则为停用)//根据要求时钟可选择SYSCLK, EOSC, IHRC, ILRC等,输出脚可以选择Disable(不选择), PB2, PB4, PA3//注:时钟源与输出脚位的选择请参考对应芯片的datasheet,个别芯片有些不同$ TM2S 8bit,/1,/1;            //选择分辨率,预分频,分频//分辨率可选择8bit,6bit,预分频可选择/1, /4, /16, /64,分频可选择/1 ~ /32(对应TM2S[4:0]的00000 ~ 11111)TM2B = 0;                 //1/256的亮度//    PWM模式的频率和占空比计算//频率=时钟源/(分辨率*预分频*分频)=1M / (2^8 * 1 * 1) = 3906.25Hz//占空比=(TM2B+1)/分辨率*100%=(0 + 1) / 2^8 *100% = 1/256*100% = 0.38%$ TM2C Stop;             //关闭PWM,即0%的亮度
}bit        Add_Sign;       //空占比增加标志位
byte    PWM_Num;        //调节空占比变量
void LED_light(void)
{$ TM2C SYSCLK,PA3,PWM;//打开PWMif(Add_Sign == 1)       //标志位为增加{PWM_Num++;TM2B = PWM_Num;           //将变量传入TM2B改变占空比if(PWM_Num == 255){Add_Sign = 0;     //加满标志位置0}.delay 10000;//延时10ms,控制渐变时长}else                     //标志位置0时开始减少{PWM_Num--;TM2B = PWM_Num;if(PWM_Num == 0){$ TM2C Stop;      //关闭PWM达到0亮度Add_Sign = 1;      //标志位置1}.delay 10000;//延时10ms,控制渐变时长}
}void   Interrupt (void)
{pushaf;if (Intrq.T16){ //  T16 Trig//  User can add codeIntrq.T16  =  0;//...}popaf;
}

代码2

调节亮度  3档亮度 占空比 100%,50%,10%

//********************************************************************************//
//      功能名称:   TM2/TM3产生任意频率的PWM
//      功能编号:   020101
//      适应芯片:   只有TM2的芯片:
//                  PMC系列:PMC234
//                  PMS系列:PMS234   PMS150C   PMS150G   PMS152   PMS15A
//                  TM2和TM3都有的芯片:
//                  PFC系列:PFC151   PFC154   PFC232   PFC161
//                  PFS系列:PFS154   PFS172   PFS173   PFS122   PFS123
//                  PMC系列:PMC131   PMC232
//                  PMS系列:PMS130   PMS131   PMS232   PMS164   PMS154C   PMS171B   PMS132B   PMS133   PMS134
//--------------------------------------------------------------------------------//
//程序说明:
//  设置TM2从PB2脚产生3906.25Hz的频率50%的占空比
//  设置TM3从PB5脚产生3906.25Hz的频率50%的占空比
//  占空比可以修改TM2B/TM3B进行调整
//注意事项:
//  1.案例为PMS154C,其他芯片时钟源和输出IO脚可能存在不同,其他原理都相同
//********************************************************************************//
#include    "extern.h"byte  m=255;           //调整占空比byte time_10ms;
word    reload_T16;
byte    high1=0;       //模式标志位
byte    high2=0;
byte    high3=0;
byte    low=0;         //电平标志位
byte    count=1;       //下个模式标志位void GPIO_init(void);
void mode1(void);
void mode2(void);
void mode3(void);
void TM2_PWM(void);
void Timer_init(void);/******************************/
/*主函数*/
/******************************/
void    FPPA0 (void)
{.ADJUST_IC SYSCLK=IHRC/4,VDD=5V;GPIO_init();Timer_init();while (1){mode1();mode2();mode3();  }
}/******************************/
/*GPIO初始化*/
/******************************/
void GPIO_init(void)
{pac = 0b1001_1111;
}/******************************/
/*模式3  空占比:100%*/
/******************************/
void mode1(void)
{if(high1==0&&count==1&&low==0)       //high1可拉高 已经低电平  如果是模式1{if(pa.5 == 1)            //如果高电平{m=255;             //100%空占比TM2_PWM();high1=1;            //high1拉高   low=1;             //电平已经在高位count=2;          //下个模式为模式2}         }if((high1!=1)&&low==1)      //high1排除{if(pa.5 == 0)           //如果是低电平 关灯{$ TM2C STOP;        //pwm输出停止low=0;high2=0;           //拉低后 模式2,3清零 可拉高high3=0;}}
}/******************************/
/*模式3  空占比:50%*/
/******************************/
void mode2(void)
{if(high2==0&&count==2&&low==0){if(pa.5 == 1){m=127;TM2_PWM();high2=1;low=1;count=3;}       }if((high2!=1)&&low==1){if(pa.5 == 0){$ TM2C STOP;low=0;high1=0;high3=0;}}
}
/******************************/
/*模式3  空占比:10%*/
/******************************/
void mode3(void)
{if(high3==0&&count==3&&low==0){if(pa.5 == 1){m=25;TM2_PWM();high3=1;low=1;count=1;}        }if((high3!=1)&&low==1){if(pa.5 == 0){$ TM2C STOP;low=0;high1=0;high2=0;}}
}
/******************************/
/*PWM初始化*/
/******************************/
void    TM2_PWM(void)
{TM2CT = 1;                    //计数寄存器TM2B = m;                   //上限寄存器$ TM2C SYSCLK,PA3,PWM;       //选择时钟源,输出脚,PWM模式,是否反极性输出(写Inverse为启用,不写则为停用)//根据要求时钟可选择SYSCLK, EOSC, IHRC, ILRC等,输出脚可以选择Disable(不选择), PB2, PB4, PA3//注:时钟源与输出脚位的选择请参考对应芯片的datasheet,个别芯片有些不同
//  $ TM2C STOP;                //关掉时钟,即TM2停止工作$ TM2S 8BIT,/1,/1;            //选择分辨率,预分频,分频//分辨率可选择8bit,6bit,预分频可选择/1, /4, /16, /64,分频可选择/1 ~ /32(对应TM2S[4:0]的00000 ~ 11111)// PWM模式的频率和占空比计算//频率=时钟源/(分辨率*预分频*分频)=1M / (2^8 * 1 * 1) = 3906.25Hz//占空比=(TM2B+1)/分辨率*100%=(127 + 1) / 2^8 *100% = 50%
}
/******************************/
/*定时器中断初始化*/
/******************************/
void Timer_init(void)
{$ T16M SYSCLK,/16,bit10;   //T16的时钟源选择,内部的时钟分频器,中断源选择(当选择位由低到高或者由高到低时,发生中断事件);//时钟源选择可以选择STOP, SYSCLK, PA4_F, IHRC, ILRC, PA0_F;分频器可选择/1, /4, /16, /64//中断源可选择BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15reload_T16 = 1024 - 625;   //每次进中断为10ms;//计算公式为 [1/(时钟源/分频器)]*(中断源-reload_T16)=[1/(1M/16)]*(2^10-(1024-625))=0.01sstt16 reload_T16;           //设定计数器初始值reload_T16,当计数器累加超过设定中断源时产生中断;$ INTRQ T16;             //中断请求寄存器,此位是由硬件置位并由软件清零;1:请求,0:不请求。//注:INTEN,INTRQ没有初始值,所以要使用中断前,一定要根据需要设定数据。即使INTEN为0,INTRQ还是会被中断发生源触发。$ INTEGS BIT_R;              //T16中断边缘选择,上升缘请求中断为BIT_R,下降缘请求中断为BIT_F;默认为上升缘请求。//    设定INTEN、INTRQ的初始值INTEN.T16 = 1;                //中断允许寄存器,启用从T16的溢出中断;1:启用,0:停用。
//  INTEN.T16 = 0;             //关T16中断INTRQ.T16 = 0;             //清零INTRQ寄存器。ENGINT;                        //打开全局中断time_10ms = 0;
}void   Interrupt (void)
{pushaf;if (Intrq.T16){ //  T16 Trig//  User can add codestt16 reload_T16;      //设定计数器初始值reload_T16time_10ms++;if(time_10ms > 20)     //定时两秒{time_10ms = 0;}Intrq.T16    =  0;INTEN.T16 = 1;}popaf;
}

应广单片机 PMS150G,PWM例程相关推荐

  1. 应广单片机红外发射例程

    应广单片机红外发射例程,采用PMS150G,其他的MCU型号直接修改就好 //--------------PMS150G---------- // _@ // |1vdd gnd8| // |2pa7 ...

  2. 应广单片机 PMS150G、FPC161 基础例子【GPIO设置】

    应广单片机 PMS150G.FPC161 基础例子[GPIO设置] 调试方式:仿真器5S-I-S02B 编译软件:FPPA IDE 编译语言:mini C 电脑系统:win10 软件功能:设置GPIO ...

  3. 应广单片机 PMS150G 161 171 基础例子【sleep】

    此例子可以测试sleep时候的功耗,测试的时候 要注意sleep退出时间,不能让其反复立马进去,要不然,不好测试. 参考miniC编程助手测试例子,方便自己测试验证 //=============== ...

  4. 应广单片机adc_应广单片机adc和pwm例程

    应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说 ...

  5. 应广单片机adc和pwm例程

    应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说 ...

  6. 应广单片机adc_(1条消息) 应广单片机adc和pwm例程

    应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说 ...

  7. 应广单片机PFS123按键中断控制数码管显示例程

    目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...

  8. 应广单片机_呼吸灯理解

    计数器的介绍 对于应广单片机来说,它提供了3种计数器,分别为 TM2\TM3\T16 其中对于TM2\TM3来说,是属于PWM计数器,用法是简单的,但是要求比较高,需要对应的引脚来达到它的要求 从芯片 ...

  9. 应广单片机PMS152

    今天我们来讲讲应广单片机PMS152.PMS152系列是一款IO类型,完全静态以OTP为程序基础的CMOS  8bit 微处理器.它运用RISC的架构并且所有的指令架构的执行周期都是一个指令周期,只有 ...

最新文章

  1. android中互斥的控件,Android控件之Radiobutton与RadioGroup
  2. 线程对象Android 开发之多线程处理、Handler 详解
  3. VC 6.0 + SP6 下载 及 安装详细说明
  4. 听“汉代风云”,看“晁错之死”
  5. 合泰单片机数码管c语言,合泰单片机定时器数码管显示
  6. python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码
  7. android 代码中使用dp,简单谈谈Android中SP与DP的区别
  8. leetcode刷题:火柴拼正方形
  9. 计算机智能测试与机电工程学,机电工程学院智能技术创新团队论文被国际计算机视觉顶级会议ICCV录用...
  10. Git_从远程库克隆
  11. 编码的未来是“无代码”
  12. arr数组怎么取值_【JavaScript】Array数组常规使用小结(持续更新......)
  13. torch.optim.Optimizer
  14. 安装谷歌插件,程序包无效,解决方法
  15. sass安装步骤、概述、基本语法等
  16. pwn题堆利用的一些姿势 -- IO_FILE
  17. Environment.SpecialFolder的值的含义(本地打印)
  18. 怎么设置微信公众号自动回复内容显示用户昵称
  19. 小甲鱼《零基础学习Python》课后笔记(二十三、二十四):递归——这帮小兔崽子和汉诺塔
  20. 小程序使用分包整体大小可达到20M

热门文章

  1. ios共享账号公众号_英雄联盟手游预约起来!最新2020年ios日本AppleID账号密码共享...
  2. 关于win7开热点的一些小备忘
  3. Linux 基金会发布《开源软件供应链安全报告》
  4. 复旦微FM33LE0x单片机之多通道ADC DMA
  5. docker 安装指定版本
  6. ubuntu备份苹果手机照片-- Access ihpone DCMI on Ubuntu
  7. java生成excel下载_java生成excel并下载功能
  8. nodejs linux环境设置,tnpm安装
  9. 学习笔记:ComputerShader
  10. 【批处理脚本】-1.5-目录切换命令cd