打印
[MSP430]

新人求助贴

[复制链接]
657|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
noora|  楼主 | 2017-8-5 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
msp430f149,想通过按键在1602上显示一个值,按一下,值变化,再按一下又变化。但是我写出来,烧录出来后,直接显示了一串字符,求帮助,谢谢大神们
#include "io430.h"
#include "TLC5615.h"
#include "Lcd1602.h"


void Init_CLK(void)
{
   int index;
   BCSCTL1&=~0X00;   //打开XT2振荡器
   do
   {
      IFG1 &= ~OFIFG;       // 清除振荡器失效标志
      for (index = 0xFF; index > 0; index--)// 延时,等待XT2起振
    {
        ;
    }
    } while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
   
    BCSCTL2 =SELM_2+SELS;   //选择MCLK、SMCLK为XT2   
}
void Tlc5615_port()
{
    //将P6口所有的管脚设置为一般I/O口
    P6SEL = 0;
    P1SEL = 0;
  
    //P6.5 6.6 1.0作为输出管脚
    P6DIR |= BIT5;
    P6DIR |= BIT6;
    P1DIR |= BIT0;

    SET_SPI_CS;
}
void Delay1ms(UINT count)
{
    UINT i,j;
    for(i = 0;i<count;i++)
    {
        for(j=0;j<120;j++)
        {
            ;
        }

    }
}


void lcd1602_port(void)
{
   
   // 将P5设置为I/O口
    P5SEL = 0;
    // 将P4设置为I/O口
    P4SEL = 0;
    // 将P4设置为输出方向
    P4DIR |= 0xFF;
    // 将P5.0 P5.1 P5.2 设置为输出方向
    P5DIR |= BIT0;
    P5DIR |= BIT1;
    P5DIR |= BIT2;
   
    P5DIR |= BIT3;//LED+
    P5DIR |= BIT4;//LED-
    P5OUT |= BIT3;
    P5OUT &=~BIT4;

}

void Tlc5615_test(dac_out)
{
   //unsigned short dac_out;
   Tlc5615_port();
   
   Delay1ms(2000);
    DA_Conver(dac_out);
   /*for(dac_out=0; dac_out<4095;dac_out++)
      {
        DA_Conver(dac_out);
        Delay1ms(1);
      }
   for(dac_out=4095; dac_out>0;dac_out--)
      {
        DA_Conver(dac_out);
        Delay1ms(1);
      }*/
   

    //display_string(2,1,"DAC Test Over");        
    return ;

}

   
   

   

UCHAR GetKey(void)
{
    P1DIR =0xf0;
    P1OUT = 0xef;//扫描第一列
    //_NOP();
    //_NOP();
    //P1DIR &= 0x0f;//读列
    if((P1IN & 0x0f)==0x0e)return '1';
    if((P1IN & 0x0f)==0x0d)return '5';
    if((P1IN & 0x0f)==0x0b)return '9';
    if((P1IN & 0x0f)==0x07)return 'D';

    //P1DIR =0x0f;
    P1OUT = 0xdf;//扫描第二行
    //_NOP();
   // _NOP();
    //P1DIR &= 0x0f;//读列
    if((P1IN & 0x0f)==0x0e)return '2';
    if((P1IN & 0x0f)==0x0d)return '6';
    if((P1IN & 0x0f)==0x0b)return 'A';
    if((P1IN & 0x0f)==0x07)return 'E';


    //P1DIR =0xff;
    P1OUT = 0xbf;//扫描第三行
   // _NOP();
    //_NOP();
    //P1DIR &= 0x0f;//读列
    if((P1IN & 0x0f)==0x0e)return '3';
    if((P1IN & 0x0f)==0x0d)return '7';
    if((P1IN & 0x0f)==0x0b)return 'B';
    if((P1IN & 0x0f)==0x07)return 'F';


    //P1DIR =0xff;
    P1OUT = 0x7f;//扫描第四行
    //_NOP();
   // _NOP();
    //P1DIR &= 0x0f;//读列
    if((P1IN & 0x0f)==0x0e)return '4';
    if((P1IN & 0x0f)==0x0d)return '8';
    if((P1IN & 0x0f)==0x0b)return 'C';
    if((P1IN & 0x0f)==0x07)return '0';
    return 0;
}
void Lcd1602_test()
{
  lcd1602_port();
  lcd_init();
  

  
  //display_char(8,0,'v');
  //display_char(9,0,'=');
  display_string(8,0,"mv=(unsigned char *)s");
}


  


int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

          //UCHAR key;
        Init_CLK();
        int i=-1;
     UCHAR key;
        int a[11]={0,165,330,495,660,825,990,1155,1320,1485,1650};
        unsigned char h[11]={0,2,4,6,8,10,12,14,16,10,20};
        unsigned char *s=h;
        

   
   // P1DIR = 0xf0;
   // P1SEL = 0x00;
        while(1)
        {  key=GetKey();
            if(key=='1')
            {  
              i++;
            }
            if(key=='2')
            {  
              i--;
            }
            
            Tlc5615_test(a[i]);
            Lcd1602_test();
            
           
            
            if(i==11)
            { i=0;    }
            if(i==-1)
            { i=0;     }
        }

}
void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s)
{
  display_xy(x,y);
  while(*s)
  {
   WriteDataLcd(*s);
   s++;
  }
}

相关帖子

沙发
xyz549040622| | 2017-8-6 07:32 | 只看该作者
display_string的第二个参数是字符串,你没有把你需要显示的值转化为字符串,实际显示的是固定的字符串。
display_string(8,0,"mv=(unsigned char *)s");用双括号包起来的都是固定字符串。

使用特权

评论回复
板凳
noora|  楼主 | 2017-8-6 15:16 | 只看该作者
xyz549040622 发表于 2017-8-6 07:32
display_string的第二个参数是字符串,你没有把你需要显示的值转化为字符串,实际显示的是固定的字符串。
d ...

那我应该怎么转换呢?

使用特权

评论回复
地板
xyz549040622| | 2017-8-6 21:55 | 只看该作者
noora 发表于 2017-8-6 15:16
那我应该怎么转换呢?

msp430加1602的例程一大把,照猫画虎就可以了

使用特权

评论回复
5
dirtwillfly| | 2017-8-7 08:23 | 只看该作者

使用特权

评论回复
6
noora|  楼主 | 2017-8-7 22:23 | 只看该作者
dirtwillfly 发表于 2017-8-7 08:23
网上有很多这类程序https://wenku.baidu.com/view/4643c306ba1aa8114431d9a4.html

谢谢啦

使用特权

评论回复
7
noora|  楼主 | 2017-8-7 22:23 | 只看该作者
xyz549040622 发表于 2017-8-6 21:55
msp430加1602的例程一大把,照猫画虎就可以了

好的,了解啦,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝