求教430F149为什么这个报错

2019-07-15 15:42发布

目的是制作一个通过按键来改变亮度的小灯用占空比做
代码如下
#include <msp430x14x.h>
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息



#define KEY_IN    (P1IN & 0xF0)
int KEY_VAL = 0;

//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8SEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8PORT = 0xFF;                      //P2口初始设置为FF

  DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  DATADIR  = 0xFF;                      //设置IO口方向为输出
  DATAPORT = 0xFF;                      //P4口初始设置为FF

  CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  CTRPORT =  0xFF;                      //P6口初始设置为FF  

  P1IES = 0xF0;                         //P14~P17选择下降沿中断
  P1IE  = 0xF0;                         //打开中断使能
  P1IFG = 0x00;                         //中断标志位清零
}

//***********************************************************************
//             PWM初始化
//***********************************************************************
void PWM_Init1(void)                     //产生10KHZ、占空比为50%的PWM信号
{
  P1SEL |= BIT2;                        //P12口输出PWM信号
  P1DIR |= BIT2;                        //P12口接入一个LED发光二极管
  TACCR0 = 800;                         //CCR0
  TACCR1 = 200;                         //CCR1,占空比50%,可以更改,LED灯亮度会变化
  TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位
  TACTL |= TASSEL1 + MC0;               //SMCLK做时钟源,1分频,增加计数模式
}
void PWM_Init2(void)                     //产生10KHZ、占空比为50%的PWM信号
{
  P1SEL |= BIT2;                        //P12口输出PWM信号
  P1DIR |= BIT2;                        //P12口接入一个LED发光二极管
  TACCR0 = 800;                         //CCR0
  TACCR1 = 400;                         //CCR1,占空比50%,可以更改,LED灯亮度会变化
  TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位
  TACTL |= TASSEL1 + MC0;               //SMCLK做时钟源,1分频,增加计数模式
}
void PWM_Init3(void)                     //产生10KHZ、占空比为50%的PWM信号
{
  P1SEL |= BIT2;                        //P12口输出PWM信号
  P1DIR |= BIT2;                        //P12口接入一个LED发光二极管
  TACCR0 = 800;                         //CCR0
  TACCR1 = 600;                         //CCR1,占空比50%,可以更改,LED灯亮度会变化
  TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位
  TACTL |= TASSEL1 + MC0;               //SMCLK做时钟源,1分频,增加计数模式
}
void PWM_Init4(void)                     //产生10KHZ、占空比为50%的PWM信号
{
  P1SEL |= BIT2;                        //P12口输出PWM信号
  P1DIR |= BIT2;                        //P12口接入一个LED发光二极管
  TACCR0 = 800;                         //CCR0
  TACCR1 = 800;                         //CCR1,占空比50%,可以更改,LED灯亮度会变化
  TACCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2;//复位/置位
  TACTL |= TASSEL1 + MC0;               //SMCLK做时钟源,1分频,增加计数模式
}
//*************************************************************************
//     pwm选择函数
//*************************************************************************
void pwm_sel(int unm)
{
    if(unm == 1)
      {void PWM_Init1();}
    else if(unm == 2)
      {void PWM_Init2();}
    else if(unm == 3)
      {void PWM_Init3();}
    else if(unm == 4)
      {void PWM_Init4();}
}







//*************************************************************************
//        中断服务函数
//*************************************************************************
#pragma vector=PORT1_VECTOR
__interrupt void  PORT1_ISR(void)
{
  if(P1IFG & 0xF0)
  {
    switch(P1IFG&0xF0)                   //进行一个与操作,避免判断值出现其他影响
    {
    case 0x10:
    if(KEY_IN == 0xE0)                   //如果是第一个按键被按下
    {
      delay_ms(20);                      //20ms的消抖时间
      if(KEY_IN == 0xE0)
      {
        while(KEY_IN != 0xF0);           //等待键释放

          KEY_VAL = 1;


        P1IFG = 0;
        return;
      }
    }

    case 0x20:
      if(KEY_IN == 0xD0)                 //如果是第二个按键被按下
      {
        delay_ms(20);
        if(KEY_IN == 0xD0)
        {
          while(KEY_IN != 0xF0);         //等待键释放

            KEY_VAL = 2;


          P1IFG = 0;
          return;
        }
      }

    case 0x40:
      if(KEY_IN == 0xB0)                //如果是第三个按键被按下
      {
        delay_ms(20);
        if(KEY_IN == 0xB0)
        {
          while(KEY_IN != 0xF0);       //等待键释放

            KEY_VAL = 3;

          P1IFG = 0;
          return;
        }
      }

    case 0x80:
    if(KEY_IN == 0x70)                 //如果是第四个按键被按下
    {
      delay_ms(20);
      if(KEY_IN == 0x70)
      {
        while(KEY_IN != 0xF0);        //等待键释放

          KEY_VAL = 4;


        P1IFG = 0;
        return;
      }
    }

    default:
      while(KEY_IN != 0xF0);          //等待键释放
      P1IFG = 0;
      return;
        }
    }
}



//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{



  WDT_Init();                           //看门狗设置
  Clock_Init();                         //系统时钟设置
  Port_Init();                          //端口初始化
  Close_LED();                          //关闭数码管显示

  _EINT();
  while(1)                              //无限循环
    {
     void pwm_sel(KEY_VAL);
    }
}
然后就在最后的选择程序里报这个错
12.png


时间很紧,求大神们指教,多谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
尹子慕
2019-07-15 21:27
while(1)                              //无限循环
    {
     void pwm_sel(KEY_VAL);
    }

把pwm_sel(KEY_VAL);前面的 void 去掉,你是调用函数,不是定义函数,不能加void 最佳答案

一周热门 更多>