久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2010|回復: 0
打印 上一主題 下一主題
收起左側

STM8寄存器PWM

[復制鏈接]
跳轉到指定樓層
樓主
ID:369924 發表于 2018-7-12 09:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "iostm8s208mb.h"//主控芯片的頭文件
/************************常用數據類型定義******************/
#define u8  uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char    uint8_t;
typedef unsigned short   uint16_t;
typedef unsigned long    uint32_t;
/*************************函數聲明區域*********************/

#define KEY4    PI_IDR_IDR0      // PWM檔位控制


void GPIO_init();
void delay(u16 Count);//延時函數聲明
void TIM1_PWM_SET(unsigned long F_PWM_SET);
//TIM1輸出比較功能初始化函數聲明
void CH1_PWM_SET(unsigned long F_SET_CH1,float Duty_CH1);
//TIM1_CH1通道PWM信號輸出配置函數聲明
void CH2_PWM_SET(unsigned long F_SET_CH2,float Duty_CH2);
//TIM1_CH2通道PWM信號輸出配置函數聲明
void CH3_PWM_SET(unsigned long F_SET_CH3,float Duty_CH3);
//TIM1_CH3通道PWM信號輸出配置函數聲明
void CH4_PWM_SET(unsigned long F_SET_CH4,float Duty_CH4);
//TIM1_CH4通道PWM信號輸出配置函數聲明
/**************************主函數區域**********************/
int main(void)
{
  GPIO_init();
  CLK_CKDIVR=0x00;//設置系統時鐘為HSI內部高速16MHz時鐘
  delay(10);//延時等待穩定

  TIM1_PWM_SET(16000);//TIM1輸出比較功能初始化配置
  while(1)
  {
    //添加用戶自定義代碼
  }
}
/****************************************************************/
//延時函數delay(),有形參Count用于控制延時函數執行次數,無返回值
/****************************************************************/
void delay(u16 Count)
{
  u8 i,j;
  while (Count--)//Count形參控制延時次數
  {
    for(i=0;i<50;i++)
      for(j=0;j<20;j++);
  }
}
/****************************************************************/
//TIM1輸出比較功能初始化函數TIM1_init(),有形參F_PWM_SET,無返回值
/****************************************************************/
void TIM1_PWM_SET(unsigned long F_PWM_SET)  //用于控制功率 高中低
{
    double PWM_abc[]={0.9,0.6,0.3};
      u16 num;

        TIM1_ARRH=F_PWM_SET/256; //配置自動重裝載寄存器高位“ARRH”
        TIM1_ARRL=F_PWM_SET%256; //配置自動重裝載寄存器低位“ARRL”
        TIM1_CR1&=0x8F;          //向上計數模式邊沿對齊
        while(1)
      {   

        if(KEY4==0)
        {
          delay(20);
          if(KEY4==0)
          {
             while(!KEY4);
            num++;
          }
            switch(num)
            {
            case 1:    TIM1_ARRH=F_PWM_SET/256; //配置自動重裝載寄存器高位“ARRH”
                        TIM1_ARRL=F_PWM_SET%256; //配置自動重裝載寄存器低位“ARRL”
                        TIM1_CR1&=0x8F;

                        CH1_PWM_SET(F_PWM_SET,PWM_abc[0]);//配置通道1輸出信號占空比20%


                        TIM1_CR1|=0x01;//使能TIM1計數器功能“CEN=1”
                        TIM1_BKR=0x80;//打開“主輸出”開關輸出PWM信號“MOE=1”

                        break;

            case 2:    TIM1_ARRH=F_PWM_SET/256; //配置自動重裝載寄存器高位“ARRH”
                        TIM1_ARRL=F_PWM_SET%256; //配置自動重裝載寄存器低位“ARRL”
                        TIM1_CR1&=0x8F;

                         CH1_PWM_SET(F_PWM_SET,PWM_abc[1]);//配置通道2輸出信號占空比40%


                         TIM1_CR1|=0x01;//使能TIM1計數器功能“CEN=1”
                         TIM1_BKR=0x80;//打開“主輸出”開關輸出PWM信號“MOE=1”

                         break;


            case 3:      TIM1_ARRH=F_PWM_SET/256; //配置自動重裝載寄存器高位“ARRH”
                         TIM1_ARRL=F_PWM_SET%256; //配置自動重裝載寄存器低位“ARRL”
                         TIM1_CR1&=0x8F;

                         CH1_PWM_SET(F_PWM_SET,PWM_abc[2]);//配置通道2輸出信號占空比40%
                         //CH2_PWM_SET(F_PWM_SET,0);//配置通道1輸出信號占空比20%
                         //CH3_PWM_SET(F_PWM_SET,0);//配置通道1輸出信號占空比20%

                         TIM1_CR1|=0x01;//使能TIM1計數器功能“CEN=1”
                         TIM1_BKR=0x80;//打開“主輸出”開關輸出PWM信號“MOE=1”

                         num=0;
                         break;


            default:   break;

            }
          }

        }


}
/****************************************************************/
//TIM1_CH1通道PWM信號輸出配置函數CH1_PWM_SET(),有形參F_SET_CH1、
//Duty_CH1,F_SET_CH1用于配置捕獲/比較寄存器1高低位,Duty_CH1用于
//配置PWM信號占空比,無返回值
/****************************************************************/
void CH1_PWM_SET(unsigned long F_SET_CH1,float Duty_CH1)
{
  float a;//變量用于占空比計算
  a=Duty_CH1*F_SET_CH1;//計算占空比參數
  TIM1_CCR1H=((u16)(a))/256;//配置捕獲/比較寄存器1高位“CCR1H”
  TIM1_CCR1L=((u16)(a))%256;//配置捕獲/比較寄存器1低位“CCR1L”
  TIM1_CCMR1=0x60;//配置為PWM模式1
  TIM1_CCER1&=0xFD;//配置CC1P=0,OC1信號高電平有效
  TIM1_CCER1|=0x01;//配置CC1E=1,使能OC1輸出
  TIM1_OISR|=0x01;//空閑狀態時OC1為高電平
}
/****************************************************************/
//TIM1_CH2通道PWM信號輸出配置函數CH2_PWM_SET(),有形參F_SET_CH2、
//Duty_CH2,F_SET_CH2用于配置捕獲/比較寄存器2高低位,Duty_CH2用于
//配置PWM信號占空比,無返回值
/****************************************************************/
void CH2_PWM_SET(unsigned long F_SET_CH2,float Duty_CH2)
{
  float b;//變量用于占空比計算
  b=Duty_CH2*F_SET_CH2;//計算占空比參數
  TIM1_CCR2H=((u16)(b))/256;//配置捕獲/比較寄存器2高位“CCR2H”
  TIM1_CCR2L=((u16)(b))%256;//配置捕獲/比較寄存器2低位“CCR2L”
  TIM1_CCMR2=0x60;//配置為PWM模式1
  TIM1_CCER1&=0xDF;//配置CC2P=0,OC2信號高電平有效
  TIM1_CCER1|=0x10;//配置CC2E=1,使能OC2輸出
  TIM1_OISR|=0x04;//空閑狀態時OC2為高電平
}
/****************************************************************/
//TIM1_CH3通道PWM信號輸出配置函數CH3_PWM_SET(),有形參F_SET_CH3、
//Duty_CH3,F_SET_CH3用于配置捕獲/比較寄存器3高低位,Duty_CH3用于
//配置PWM信號占空比,無返回值
/****************************************************************/
void CH3_PWM_SET(unsigned long F_SET_CH3,float Duty_CH3)
{
  float c;//變量用于占空比計算
  c=Duty_CH3*F_SET_CH3;//計算占空比參數
  TIM1_CCR3H=((u16)(c))/256;//配置捕獲/比較寄存器3高位“CCR3H”
  TIM1_CCR3L=((u16)(c))%256;//配置捕獲/比較寄存器3低位“CCR3L”
  TIM1_CCMR3=0x60;//配置為PWM模式1
  TIM1_CCER2&=0x3D;//配置CC3P=0,OC3信號高電平有效
  TIM1_CCER2|=0x01;//配置CC3E=1,使能OC3輸出
  TIM1_OISR|=0x10;//空閑狀態時OC3為高電平
}
/****************************************************************/
//TIM1_CH4通道PWM信號輸出配置函數CH4_PWM_SET(),有形參F_SET_CH4、
//Duty_CH4,F_SET_CH4用于配置捕獲/比較寄存器4高低位,Duty_CH4用于
//配置PWM信號占空比,無返回值
/****************************************************************/
void CH4_PWM_SET(unsigned long F_SET_CH4,float Duty_CH4)
{
  float d;//變量用于占空比計算
  d=Duty_CH4*F_SET_CH4;//計算占空比參數
  TIM1_CCR4H=((u16)(d))/256;//配置捕獲/比較寄存器4高位“CCR4H”
  TIM1_CCR4L=((u16)(d))%256;//配置捕獲/比較寄存器4低位“CCR4L”
  TIM1_CCMR4=0x60;//配置為PWM模式1
  TIM1_CCER2&=0x1F;//配置CC4P=0,OC4信號高電平有效
  TIM1_CCER2|=0x10;//配置CC4E=1,使能OC4輸出
  TIM1_OISR|=0x40;//空閑狀態時OC4為高電平
}

void GPIO_init(void)
{
  PI_DDR_DDR0=0;//配置PI2端口為輸入模式
  PI_CR1_C10=1;//配置PI2端口為帶上拉的輸入模式
  PI_CR2_C20=0;//配置PI2端口外中斷禁止

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区 | 国产精品久久久久aaaa九色 | 欧美日韩成人影院 | 国产麻豆乱码精品一区二区三区 | 亚洲精品视频免费观看 | 国产精品1区 | 日韩中文字幕在线观看 | 97在线观看 | 欧美极品少妇xxxxⅹ免费视频 | 日韩中文欧美 | 欧美区在线 | 香蕉视频一区二区 | 99热热热| 色一级片| 99婷婷| 精品综合| 91久久久久 | 羞羞视频在线观看免费观看 | www.免费看片.com | 天堂久久久久久久 | 毛片免费在线观看 | 亚洲欧美日韩在线不卡 | 午夜精品久久久久久久久久久久久 | 无码日韩精品一区二区免费 | 亚洲日韩中文字幕 | 黄网站免费入口 | 蜜桃久久 | 日本免费一区二区三区四区 | 日韩精品免费播放 | 精品欧美一区二区精品久久 | 在线精品亚洲欧美日韩国产 | 毛片网站在线观看 | 一区二区三区免费在线观看 | 精品久久久久久久久久久久久久 | 成年人网站在线观看视频 | 亚洲一区二区三区免费观看 | 手机三级电影 | 日本小视频网站 | 亚洲欧美日韩中文在线 | 91精品国产色综合久久不卡98口 | 亚洲最新网址 |