⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Proteus在MCS-51%26ARM7系统中的应用百例 Proteus在MCS-51%26ARM7系统中的应用百例
💻 C
字号:
/*******************************************************************************
*File: Main.c
*功能: 使用PWM6输出PWM信号,由KEY1控制PWM占空比,每按一次
*      按键将会改变一次PWM的占空比
*******************************************************************************/
#include "config.h"
#define   KEY1   0x00004000        /*P0.14引脚连接KEY1*/
#define  TASK_STK_SIZE                  64

OS_STK        Main_TaskStk[TASK_STK_SIZE];
OS_STK        Task0Stk[TASK_STK_SIZE];
void Main_Task(void *data);
void Task0(void *data);
/*******************************************************************************
*名称: main()
*功能: 主函数,包括任务初始化及任务建立
*******************************************************************************/
  int main (void)
{
    OSInit();

    OSTaskCreate(Main_Task, (void *)0, &Main_TaskStk[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;
}
/*******************************************************************************
*名称: Main_Task()
*功能: 主任务,输出PWM
*******************************************************************************/
 void  Main_Task(void *pdata)
{ uint32  pwmdata;       //PWM占空比控制变量
  pdata=pdata;                      
  PINSEL0=0x00080000;                     //设置PWM6连接到P0.9引脚
  PINSEL1=0x00000000;                     //其他引脚设置为GPIO
  TargetInit();                           //目标板初始化
  OSTaskCreate(Task0, (void *)0, &Task0Stk[TASK_STK_SIZE - 1],2);
  pwmdata=1382;
  while(1)
  {  PWMMR0=2765;                         //设置PWM周期
     PWMMR6=pwmdata;                      //设置PWM占空比
     PWMLER=0x41;                         //PWMMR0,PWMMR6锁存,更新PWM占空比
                            
     pwmdata+=100;                        //改变PWM占空比控制变量
     if(pwmdata>=2764)pwmdata=0;
   OSTaskSuspend(OS_PRIO_SELF);  }
  
}
/*******************************************************************************
*名称: Task0()
*功能: 按键控制
*******************************************************************************/
void Task0(void *pdata)
{ uint32 i;
  pdata=pdata;
  while(1)
  { while((IOPIN&KEY1)!=0);                 //等待KEY1键按下
    for(i=0;i<50;i++);                      //延时去抖
    if((IOPIN&KEY1)==0)break;
  }
    
    while((IOPIN&KEY1)==0);                   //等待KEY1键放开
OSTaskResume(0);}
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -