智能车制作

标题: 超声波430控制诺基亚5110显示,显示数据总是0 [打印本页]

作者: My_EE~    时间: 2014-8-12 12:22
标题: 超声波430控制诺基亚5110显示,显示数据总是0
/*
Nokia5110 在msp430单片机上的应用

08-12-08
*/
#include  <msp430g2553.h>
#include "nokia_5110.h"
#include "HC-SR04.H"

uchar num,a;
char flag_time = 0;
long TIME0 = 0, TIME1 = 0;  //存放时间的函数
long distance=0;            //初始化超声波距离为0
uchar CSB_table[7];       //用于超声波显示函数
//uchar ge,shi,bai,qian;      //定义显示的位数
/********************************数组*********************************/   
uchar table[10]={"0123456789"};


/******************************蜂鸣器端口定义*********************************/
//#define beep0   P2DIR|=BIT5,P2OUT&=~BIT5  //BEEP=0;
//#define beep1   P2DIR|=BIT5,P2OUT|=BIT5   //BEEP=1;


/********************************时钟初始化*********************/
void CLK_Init(void)
{
      WDTCTL = WDTPW + WDTHOLD;      //关看门狗
    if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)                           
    {  
        while(1);                              
    }
          BCSCTL1 = CALBC1_8MHZ;
          DCOCTL = CALDCO_8MHZ;
          BCSCTL3 |= LFXT1S_0;
          BCSCTL2 |= DIVS_3;             //  SMCLK = DCO8M/8=1M           
}

/***********************************延时函数****************************/
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}


void uart_init()
    {
    WDTCTL = WDTPW + WDTHOLD;                    //关闭看门狗
    P1DIR |= BIT2;                    // P1.2 输出模式
    P1OUT |= BIT2;                    // P1.2 置高电平
    //P1DIR &= ~BIT1;
    P1SEL |= BIT1 + BIT2;                    // P1.1 = RXD, P1.2=TXD 串口功能选择 p1sel和p1sel2都要置位
    P1SEL2 |= BIT1 + BIT2;                    // P1.1 = RXD, P1.2=TXD
    UCA0CTL1 |= UCSSEL_1;                    // CLK = ACLK 时钟选择
    UCA0BR0 = 0x03;                    // 32kHz/9600 = 3.41
    UCA0BR1 = 0x00;                    //
    UCA0MCTL = UCBRS1 + UCBRS0;        // Modulation UCBRSx = 3
    UCA0CTL1 &= ~UCSWRST;              // **Initialize USCI state machine**
    IE2 |= UCA0RXIE + UCA0TXIE;        // 使能 USCI_A0 RX TX 中断
    }


/********************************端口初始化*********************/  
void GPIO_Init(void)
{

   P1SEL|=BIT1;            //P1.1作为捕获输入 副功能   
   P1DIR&=~BIT1;          //P1.1作为捕获输入( 上升下降都捕获)CCI1A TA1  CCRO
   P1DIR|=BIT0+BIT2;

   P1SEL|=BIT4;         //P1.4作为OUT2输出 副功能
   P1DIR|=BIT4; //1.4为输出

  // P2SEL|=BIT5;//蜂鸣器输出端口
   //P2DIR|=BIT5; //2.5为输出
}


//蜂鸣器报警
/*void beep()
{
  for(a=0;a<5;a++)
  {
    beep0;
    delay(200);
    beep1;
    delay(200);
  }
}*/


/********************************定时器TIMER初始化函数*********************/
void TIMER_Init(void)
{   
    TA1CTL |= TASSEL1 + MC_1+TACLR+TAIE;                       //SMCLK作为时钟源,连续计数模式 计数器清零 开溢出中断
    TA1CCTL1 |= CM_3 + CCIS_0 + SCS + CAP + CCIE;             //上升沿与下降沿都捕获, CCI1A    同步 输入 P2.1  使能中断
    TA1CCR0=5520;                                      
    TA1CCTL2|=OUTMOD_3;                                 //TA1CCR2  连续   p2.4  复位置位
    TA1CCR2=5510;                                      ///模式3 复位置位      
}

/******************************************************************************/
void main(void)
{
       
        CLK_Init();        //时钟初始化  
        WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
        //P2DIR = 0xff;
        GPIO_Init();       //端口初始化
        TIMER_Init();      //定时器TIMER初始化函数

        //uart_init();                    //串口初始化
        LCD_init();                           //初始化液晶   
        LCD_clear();

        while(1)
        {
           //LCD_write_english_string(10,3,"--------");
           //LCD_write_english_string(1,1,CSB_table);
           //LCD_set_XY(3,3);
           //LCD_write_byte(CSB_table[3]);
          //这是昨天我自己写的驱动函数,倒着看数据
           LCD_write_shuju(10,2,CSB_table[0]);
           LCD_write_shuju(11,2,CSB_table[1]);
           LCD_write_shuju(12,2,CSB_table[2]);
           LCD_write_shuju(13,2,CSB_table[3]);

           LPM0;
        }       

        _EINT();           //CSB中断使能()
}


#pragma vector = TIMER1_A0_VECTOR
__interrupt void TIMER1_A0(void)
{   

    if (flag_time == 0)    //时间标志位
    {   
        TIME0 = TA1CCR0;  //数据等于定时器捕获比较寄存器0  
        flag_time ++;     //时间标志位++
    }
    else
    {
        TIME1 = TA1CCR0;   //数据等于定时器捕获比较寄存器0
        flag_time = 0;     //再赋为0
        if (TIME1 > TIME0)
        {
            TIME1 = TIME1 - TIME0;
        }
        else
        {
            TIME1 = TIME1 + (65535 - TIME0);
        }

        //将数据赋给distance
        //distance = TIME1*170/1000000*100;      // 数据 CM 为单位
        distance = TIME1*170/1000000*100;      // 数据 mm 为单位  

        //=======这里确定精度==================
        //========这里显示=====================
        //if(distance>=1)     //精确度为1CM                    
        //{   
           //beep();
           CSB_table[0]=distance % 10+48;
           CSB_table[1]=(distance/10) % 10+48;
           CSB_table[2]=(distance/10000) % 10+48;         
           CSB_table[3]=(distance/100000) % 10+48;


           //init();
           //LCD_init();                           //初始化液晶   
           //LCD_clear();
           //LCD_set_XY(0,0);
           //LCD_write_char('n');
           //LCD_write_chinese_string(0,4,12,7,4,0);         //宁波单片机开发
           /*write_com(0x80);
           write_date('L');
           write_date('=');        
           write_date(table[qian]);
           write_date(table[bai]);
           write_date(table[shi]);
           write_date(table[ge]);
           write_date('C');
           write_date('M');*/
        }
         /*if(distance<1)
          {
           //LCD_init();                           //初始化液晶   
           //LCD_clear();
           //LCD_set_XY(1,1);
           //LCD_write_char('M');

         init();
         write_com(0x80);
         write_date('L');
         write_date('=');
         write_date(table[0]);
         write_date(table[0]);
         write_date(table[0]);
         write_date(table[0]);
         write_date('C');
         write_date('M');
        //}*/
        //}
}


作者: 竹音清影    时间: 2014-8-12 12:36
你先用串口把数据采集回来看看到底采集到数据了没有
作者: My_EE~    时间: 2014-8-12 12:39
竹音清影 发表于 2014-8-12 12:36
你先用串口把数据采集回来看看到底采集到数据了没有

好,我试试

作者: My_EE~    时间: 2014-8-12 12:47
My_EE~ 发表于 2014-8-12 12:39
好,我试试

没有

作者: ⊙Lin⊙    时间: 2014-8-12 20:34
将心比心,别人算法思路不说,光贴了这么一大段代码,你会看吗?关键是说思路!
作者: My_EE~    时间: 2014-9-22 22:55
⊙Lin⊙ 发表于 2014-8-12 20:34
将心比心,别人算法思路不说,光贴了这么一大段代码,你会看吗?关键是说思路!

发问题不久久自己解决了,嘿嘿





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2