Board logo

标题: 大家帮我看一下为什么P0.7的灯为什么闪烁 [打印本页]

作者: 军仔电器    时间: 2011-9-5 21:03     标题: 大家帮我看一下为什么P0.7的灯为什么闪烁

大家帮我看一下为什么P0.7的灯为什么闪烁

#include <AT89X52.H>
sbit  dykg=P3^0;
sbit  jpd=P0^0;
sbit  xyd=P0^1;
sbit  pxd=P0^2;
sbit  tsd=P0^3;
sbit  bzd=P0^4;
sbit  ksd=P0^5;
sbit  dfd=P0^6;
sbit  psd=P2^0;
sbit  jsd=P0^7;
sbit  swkg=P1^0;
sbit  aqkg=P1^1;
void jpdd(void);
void jp(void);
void delay20ms(void);
void delay500ms(void);
main()
{
  jpdd ();
  
        {
          if(swkg==0)
           {
              delay20ms();
              jp ();
              {
                  xy ();
                  px ();
                  ts ();
               }
              }
         }
}

void delay20ms(void)   //误差 0us
{
    int i;
    for(i=0; i<2400; i++);
}
void jpdd(void)
{
     jpd=0;
     xyd=0;
     pxd=0;
     tsd=0;
     bzd=0;
     jsd=0;
     delay500ms();
     jpd=1;
     xyd=0;
     pxd=0;
     jsd=0;
     bzd=0;
     delay500ms();
}
void jp(void)
{
     jpd=0;
     xyd=0;
     pxd=0;
     tsd=0;
     bzd=0;
     jsd=1;
     delay500ms();
     jpd=1;
     xyd=0;
     pxd=0;
     tsd=0;
     bzd=0;
     jsd=1;
     delay500ms();
}
void delay500ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=23;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
}
作者: 胡海峰    时间: 2011-9-17 20:56

先不说你的p0.7为什么闪烁,光你的程序就看得我头大。程序一定要按标准格式来写,像下面这样,
/*****************************************************************************\
文件名:main.c
描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。
      不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。
      保留中断函数,编译器将会为BSL密码填充所有的字节。
版本:1.0        2005-1-13
\*****************************************************************************/

//头文件
#include <MSP430x14x.h>

//函数声明
void InitSys();


int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;                     //关闭看门狗

  InitSys();                                        //初始化

start:
  //以下填充用户代码


        LPM3;                        //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句
        goto start;

}

/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
   unsigned int iq0;

        //使用XT2振荡器
   BCSCTL1&=~XT2OFF;                                             //打开XT2振荡器
   do
   {
                IFG1 &= ~OFIFG;                                        // 清除振荡器失效标志
                for (iq0 = 0xFF; iq0 > 0; iq0--);                // 延时,等待XT2起振
        }
        while ((IFG1 & OFIFG) != 0);                                // 判断XT2是否起振

        BCSCTL2 =SELM_2+SELS;                                        //选择MCLK、SMCLK为XT2

        //以下填充用户代码,对各种模块、中断、外围设备等进行初始化

   _EINT();        //打开全局中断控制,若不需要打开,可以屏蔽本句
}

/*****************************************************************************
端口2中断函数
******************************************************************************/
#pragma vector=PORT2_VECTOR
__interrupt void Port2()
{
        //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
        if((P2IFG&BIT0) == BIT0)
        {
                //处理P2IN.0中断
                P2IFG &= ~BIT0; //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT1) ==BIT1)
        {
                //处理P2IN.1中断
                P2IFG &= ~BIT1;        //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT2) ==BIT2)
        {
                //处理P2IN.2中断
                P2IFG &= ~BIT2;        //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT3) ==BIT3)
        {
                //处理P2IN.3中断
                P2IFG &= ~BIT3;        //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT4) ==BIT4)
        {
                //处理P2IN.4中断
                P2IFG &= ~BIT4;        //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT5) ==BIT5)
        {
                //处理P2IN.5中断
                P2IFG &= ~BIT5;        //清除中断标志
                //以下填充用户代码

        }
        else if((P2IFG&BIT6) ==BIT6)
        {
                //处理P2IN.6中断
                P2IFG &= ~BIT6;        //清除中断标志
                //以下填充用户代码

        }
        else
        {
                //处理P2IN.7中断
                P2IFG &= ~BIT7;        //清除中断标志
                //以下填充用户代码

        }

        LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}

/*****************************************************************************
USART1发送中断函数
******************************************************************************/
#pragma vector=USART1TX_VECTOR
__interrupt void Usart1Tx()
{
        //以下填充用户代码


        LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}

/*****************************************************************************
USART1接收中断函数
******************************************************************************/
#pragma vector=USART1RX_VECTOR
__interrupt void Ustra1Rx()
{
        //以下填充用户代码


        LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}

/*****************************************************************************
作者: 胡海峰    时间: 2011-9-17 20:58

至于你的p0.7为什么闪烁,程序里你用单步调试很容易就可以找到问题,或者设个断点也行。




欢迎光临 『家电维修论坛 163DZ.COM』 (http://wy.163dz.com/bbs/) Powered by Discuz! 7.0.0