[MSP430] 新人求助贴

[复制链接]
 楼主| noora 发表于 2017-8-5 22:14 | 显示全部楼层 |阅读模式
msp430f149,想通过按键在1602上显示一个值,按一下,值变化,再按一下又变化。但是我写出来,烧录出来后,直接显示了一串字符,求帮助,谢谢大神们
  1. #include "io430.h"
  2. #include "TLC5615.h"
  3. #include "Lcd1602.h"


  4. void Init_CLK(void)
  5. {
  6.    int index;
  7.    BCSCTL1&=~0X00;   //打开XT2振荡器
  8.    do
  9.    {
  10.       IFG1 &= ~OFIFG;       // 清除振荡器失效标志
  11.       for (index = 0xFF; index > 0; index--)// 延时,等待XT2起振
  12.     {
  13.         ;
  14.     }
  15.     } while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
  16.    
  17.     BCSCTL2 =SELM_2+SELS;   //选择MCLK、SMCLK为XT2   
  18. }
  19. void Tlc5615_port()
  20. {
  21.     //将P6口所有的管脚设置为一般I/O口
  22.     P6SEL = 0;
  23.     P1SEL = 0;
  24.   
  25.     //P6.5 6.6 1.0作为输出管脚
  26.     P6DIR |= BIT5;
  27.     P6DIR |= BIT6;
  28.     P1DIR |= BIT0;

  29.     SET_SPI_CS;
  30. }
  31. void Delay1ms(UINT count)
  32. {
  33.     UINT i,j;
  34.     for(i = 0;i<count;i++)
  35.     {
  36.         for(j=0;j<120;j++)
  37.         {
  38.             ;
  39.         }

  40.     }
  41. }


  42. void lcd1602_port(void)
  43. {
  44.    
  45.    // 将P5设置为I/O口
  46.     P5SEL = 0;
  47.     // 将P4设置为I/O口
  48.     P4SEL = 0;
  49.     // 将P4设置为输出方向
  50.     P4DIR |= 0xFF;
  51.     // 将P5.0 P5.1 P5.2 设置为输出方向
  52.     P5DIR |= BIT0;
  53.     P5DIR |= BIT1;
  54.     P5DIR |= BIT2;
  55.    
  56.     P5DIR |= BIT3;//LED+
  57.     P5DIR |= BIT4;//LED-
  58.     P5OUT |= BIT3;
  59.     P5OUT &=~BIT4;

  60. }

  61. void Tlc5615_test(dac_out)
  62. {
  63.    //unsigned short dac_out;
  64.    Tlc5615_port();
  65.    
  66.    Delay1ms(2000);
  67.     DA_Conver(dac_out);
  68.    /*for(dac_out=0; dac_out<4095;dac_out++)
  69.       {
  70.         DA_Conver(dac_out);
  71.         Delay1ms(1);
  72.       }
  73.    for(dac_out=4095; dac_out>0;dac_out--)
  74.       {
  75.         DA_Conver(dac_out);
  76.         Delay1ms(1);
  77.       }*/
  78.    

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

  81. }

  82.    
  83.    

  84.    

  85. UCHAR GetKey(void)
  86. {
  87.     P1DIR =0xf0;
  88.     P1OUT = 0xef;//扫描第一列
  89.     //_NOP();
  90.     //_NOP();
  91.     //P1DIR &= 0x0f;//读列
  92.     if((P1IN & 0x0f)==0x0e)return '1';
  93.     if((P1IN & 0x0f)==0x0d)return '5';
  94.     if((P1IN & 0x0f)==0x0b)return '9';
  95.     if((P1IN & 0x0f)==0x07)return 'D';

  96.     //P1DIR =0x0f;
  97.     P1OUT = 0xdf;//扫描第二行
  98.     //_NOP();
  99.    // _NOP();
  100.     //P1DIR &= 0x0f;//读列
  101.     if((P1IN & 0x0f)==0x0e)return '2';
  102.     if((P1IN & 0x0f)==0x0d)return '6';
  103.     if((P1IN & 0x0f)==0x0b)return 'A';
  104.     if((P1IN & 0x0f)==0x07)return 'E';


  105.     //P1DIR =0xff;
  106.     P1OUT = 0xbf;//扫描第三行
  107.    // _NOP();
  108.     //_NOP();
  109.     //P1DIR &= 0x0f;//读列
  110.     if((P1IN & 0x0f)==0x0e)return '3';
  111.     if((P1IN & 0x0f)==0x0d)return '7';
  112.     if((P1IN & 0x0f)==0x0b)return 'B';
  113.     if((P1IN & 0x0f)==0x07)return 'F';


  114.     //P1DIR =0xff;
  115.     P1OUT = 0x7f;//扫描第四行
  116.     //_NOP();
  117.    // _NOP();
  118.     //P1DIR &= 0x0f;//读列
  119.     if((P1IN & 0x0f)==0x0e)return '4';
  120.     if((P1IN & 0x0f)==0x0d)return '8';
  121.     if((P1IN & 0x0f)==0x0b)return 'C';
  122.     if((P1IN & 0x0f)==0x07)return '0';
  123.     return 0;
  124. }
  125. void Lcd1602_test()
  126. {
  127.   lcd1602_port();
  128.   lcd_init();
  129.   

  130.   
  131.   //display_char(8,0,'v');
  132.   //display_char(9,0,'=');
  133.   display_string(8,0,"mv=(unsigned char *)s");
  134. }


  135.   


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

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

  148.    
  149.    // P1DIR = 0xf0;
  150.    // P1SEL = 0x00;
  151.         while(1)
  152.         {  key=GetKey();
  153.             if(key=='1')
  154.             {  
  155.               i++;
  156.             }
  157.             if(key=='2')
  158.             {  
  159.               i--;
  160.             }
  161.             
  162.             Tlc5615_test(a[i]);
  163.             Lcd1602_test();
  164.             
  165.            
  166.             
  167.             if(i==11)
  168.             { i=0;    }
  169.             if(i==-1)
  170.             { i=0;     }
  171.         }

  172. }
  173. void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s)
  174. {
  175.   display_xy(x,y);
  176.   while(*s)
  177.   {
  178.    WriteDataLcd(*s);
  179.    s++;
  180.   }
  181. }
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的例程一大把,照猫画虎就可以了
dirtwillfly 发表于 2017-8-7 08:23 | 显示全部楼层
 楼主| noora 发表于 2017-8-7 22:23 | 显示全部楼层
dirtwillfly 发表于 2017-8-7 08:23
网上有很多这类程序https://wenku.baidu.com/view/4643c306ba1aa8114431d9a4.html

谢谢啦
 楼主| noora 发表于 2017-8-7 22:23 | 显示全部楼层
xyz549040622 发表于 2017-8-6 21:55
msp430加1602的例程一大把,照猫画虎就可以了

好的,了解啦,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部