大家帮我看看这个程序吧

2019-03-24 11:35发布

#include "msp430x14x.h"

#define CLK165_UP     P3OUT|=BIT0
#define CLK165_DOWN   P3OUT&=~BIT0
//#define CLK          P3DIR = BIT0
#define SL165_UP      P3OUT|=BIT1
#define SL165_DOWN    P3OUT&=~BIT1
//#define SL        P3DIR = BIT1
#define OUT165        P3OUT |= BIT2;//(P3IN&BIT2)>>2
//#define Qh        P3DIR = BIT2
#define uchar         unsigned char

/*#define SL     RC0
#define QH     RC1
#define CLK    RC2    //移位寄存器时钟*/

unsigned char hc74_165(void);
void Delay(unsigned int);        //延时函数
void delay();
void SysClockInit(void);
  
int i;

//*************** 主程序 ********************
void main(void)
{       
  WDTCTL = WDTPW + WDTHOLD;     //关狗
  SysClockInit();
  
  
  P3DIR = 0XFF;
  P1DIR = 0xFF;
// P1OUT = 0xFF;
  P4DIR = 0xFF;
// P4OUT = 0xFF;
/* TRISC0=0;      //引脚设为输出
  TRISC1=1;      //引脚设为输出
  TRISC2=0;      //引脚设为输出
  TRISD=0;      //引脚设为输出
  TRISB=0;      //引脚设为输出*/
  //Qh=0;
  CLK165_DOWN;
  SL165_UP;
// PORTA=0Xff;
        while(1)
        {
               
                for(i = 0;i < 8;i++) //LED流水显示
                {
                        P1OUT= ~(0x01<<i);//P1口数据送74HC165的并口输入端A-H
                        delay( );
                        SL165_DOWN;
                        P4OUT= hc74_165();//P4口接收74HC165的输出数据,并利用LED灯显示出来当前值。
                        delay( );
                }
               

        }
}       

//***********************74595发送函数************************
unsigned char hc74_165(void)
{
        unsigned char m,p;
       
        SL165_DOWN;//当移位/置入控制端S/L为低电平时,并行数据(A-H)被置入寄存器.而时钟(CLK,CLK INH)及串行数据(SER)均无关

        delay();
        SL165_UP;//当S/L为高电平时,并行置数功能被禁止
        delay();

        CLK165_DOWN;

        p=0;
        for(m=0;m<8;m++)
        {  
                p<<=0;
                p|=OUT165;
                CLK165_DOWN;
                delay();
                CLK165_UP;//时钟输入端(上升沿有效)
                delay();
       
                 
        }

        return(p);
               

       
}
//延时函数
void Delay(unsigned int m)
{
        while(m--);
}

//延时子程序
void delay()
{
        unsigned char i,j;       
        for(i=0;i<10;i++)
        for(j=0;j<5;j++);                 
}

/*******************************************************/
/*函数名称:SysClockInit                               */
/*函数用途:初始化系统时钟,MCLK:8MHz; SMCLK:4MHz; ACLK:32.768kHz*/
/*入口参数:无                                         */
/*返回参数:无                                         */
/*备    注:时钟需要根据应用来配置                     */
/*******************************************************/
void SysClockInit(void)
{
    unsigned char i;
   
    BCSCTL1 &= ~XT2OFF;                             //开启XT2高速晶振(8MHz),DCO采用默认设置;
                                                    //XT1为低速晶振(32.768kHz),低功耗可以将DCO的频率选择为最低                                                     //MCLK默认1分频,SMCLK选择2分频(4MHz)        
   
    do
    {
      IFG1 &= ~OFIFG;                                    //清除震荡器失效标志
      for(i=0xFF; i>0; i--);                              //短时等待时间
    }
    while ((IFG1&OFIFG) != 0);                      //等待晶振起振
   
    BCSCTL2 =   SELM_2 + SELS + DIVM_0 + DIVS_1;    //MCLK选择XT2CLK,SMCLK选择XT2CLK
                                                    //MCLK默认1分频,SMCLK选择2分频(4MHz)

}


功能是通过74HC165的并转串,然后实现流水灯现象。不知道为啥,这个程序实现不了,而且仿真器的mode灯也不亮。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
651076842
2019-03-25 07:43
digitaltek 发表于 2014-4-29 22:13
确认一下仿真器选的对不对,不要选成模拟器了

恩恩,仿真器的事情已经解决了,现在是要解决的是程序问题。

一周热门 更多>

相关问题

    相关文章