在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3282|回复: 1

[资料] msp430f5529的一个程序。。。

[复制链接]
发表于 2014-7-31 16:36:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
#include <msp430.h>

#define unchar unsigned char
#define uint unsigned int

uint date;
                                                      //定义数据类型
uint dispcount=0;
                                                   //中断计数
unchar times=0;
                                                 //定时器计数
uint disp=0;
                                                        //频率值
unchar str[3];
unchar *s;

#define CS        P2DIR |= BIT2
#define CS_H      P2OUT |= BIT2
#define CS_L      P2OUT &= ~BIT2
#define SID       P2DIR |= BIT3
#define SID_H     P2OUT |= BIT3
#define SID_L     P2OUT &= ~BIT3
#define SCLK      P2DIR |= BIT4
#define SCLK_H    P2OUT |= BIT4
#define SCLK_L    P2OUT &= ~BIT4
#define RST       P2OUT |= BIT5
#define RST_H     P2OUT |= BIT5
#define RST_L     P2OUT &= ~BIT5

void delay( uint t);
void sendbyte( unchar z);
void write_com( unchar cmd);
void write_data(unchar disp);
void init_lcd();
void diszfc( unchar *s);
void lcd_clear();
unchar * int2str(uint d);
void gotoxy(uint x,uint y)
;
void red() ;
void green() ;
void blue()
;
void init_clk();



void main(void)
{
    WDTCTL = WDTPW | WDTHOLD;
// Stop watchdog timer

    init_clk();

    P1DIR |= BIT3 + BIT4 + BIT5 + BIT6;

    TACTL = TASSEL_1 + ID0 + TACLR;//ACL = 32768 ,2分频
    CCTL0 = CCIE;
   
CCR0 = 819;//819 * 2 / 32768 =50ms
   
TACTL |= MC0; //增计数

    P1DIR &= ~BIT2;
    P1SEL |= BIT2;

    TACCTL1 |= CM_2 + SCS + CAP + CCIE;//捕获模式,同步捕获,中断打开,下降沿捕获


    _EINT();
    __bis_SR_register(LPM3_bits);
    delay(200);


init_lcd();

lcd_clear();

while(1)

   {

   gotoxy(1,00); diszfc("R:"); red();
//调用红色通道并显示色彩值

       gotoxy(1,02);
s = int2str(date);      diszfc(s);

       gotoxy(1,05); diszfc("  ");

       gotoxy(1,07); diszfc("G:"); green();//调用绿色通道并显示色彩值

       gotoxy(1,011);   s = int2str(date);       diszfc(s);

       gotoxy(1,014); diszfc("  ");

       gotoxy(2,00);  diszfc("B:"); blue();
//调用蓝色通道并显示色彩值

       gotoxy(2,02);    s = int2str(date);         diszfc(s);

       gotoxy(2,05);  diszfc("  ");

   }
}



#pragma vector =TIMERA0_VECTOR
__interrupt void TimerA0(void)
{

times ++;

if(times == 20)

{

    disp = dispcount;

times = 0;

dispcount = 0;

}

#pragma vector =TIMERA1_VECTOR
__interrupt void  TimerA1_ISR(void)
{

switch(TAIV)                              //向量查询

  { case 2:  dispcount ++;                              //捕获中断

  
  
  
  CCIFG1 = 0;

  
  
  
  break;

  default:    break;

  }

}


void delay( uint t)
{

uint i , j ;

for(i = 0; i < t ;i ++)

for (j = 0; j < 10; j++);
}

void init_clk()//时钟初始化
{
   unchar i;
   BCSCTL1 = 0X86 ; // XT2OFF , XTS = 0
   do
   {
     IFG1 &= ~OFIFG;//清振荡器失效标志
     for(i=0xff;i>0;i--);
   }while((IFG1 & OFIFG)!=0);//若振荡器失效标志有效
   BCSCTL2 = 0X00 ; // MCLK = DCOCLK, DIVM = 0,SMCLK = DCOCLK,DIVS = 0

}

/**************************************************
* RGB三种颜色通道选择模块
**************************************************/
void red()                                                          //红色通道
{
P1OUT |= BIT3; delay(1100);

date=disp/100;date=(255.0/153)*date;
    //153是在纯白情况下测得的红色通道频率值
}
void green()                                                       //绿色通道
{
P1OUT |=BIT3 + BIT5 + BIT6; delay(1100);

date=disp/100;date=(255.0/145)*date;
    //145是在纯白情况下测得的绿色通道频率值
}
void blue()
                                                    //蓝色通道
{
P1OUT |= BIT3 + BIT6; delay(1100);

date=disp/100;date=(255.0/183)*date;
    //183是在纯白情况下测得的蓝色通道频率值
}


/**************************************************
         整型数转化成字符串,以便LCD输出显示
**************************************************/
unchar * int2str(uint d)
{
if(d>=255)

{ d=255;
str[0]='0'+d/100;
str[1]='0'+d%100/10;
      str[2]='0'+d%10;
}

else

{ str[0]='0'+d/100;

  str[1]='0'+d%100/10;
      str[2]='0'+d%10; }

return str;
}

/**************************************************
                LCD显示模块
**************************************************/
void init_lcd()                                                // 初始化lcd
{

RST_L; //前提是复位脚接P1.5口

delay(100);

RST_H;


P2DIR |= BIT6;

P2OUT &= ~(BIT6);


write_com(0x30);                               // lcd为两行显示8位数据线有效
    write_com(0x0e);                              // 显示字符  关闭光标  0000 0111
    write_com(0x06);                             // 输入方式设置 光标向右移动一位 ac-1
}

void sendbyte( unchar z)
{

uint i;

for(i = 0; i < 8; i ++)

{

if ((z<<i) & 0x80)

{

SID_H;

}

else

{

SID_L;

}

SCLK_L;

SCLK_H;


}
}

void write_com( unchar cmd)  //写串口指令
{

CS_H;

sendbyte (0xf8);  //输指令

sendbyte (cmd & 0xf0);

sendbyte ((cmd << 4) & 0xf0);

delay(2);

}

void write_data(unchar disp)  //写数据
{

CS_H;

sendbyte(0xfa);//传数据

sendbyte(disp & 0xf0);

sendbyte((disp << 4) & 0xf0);

delay(2);

}


void diszfc( unchar *s)   //显示字符串
{

while ( *s > 0)

{

write_data(*s);

s++;

delay(50);

}
}
void lcd_clear()
{

write_com(0x01); //清屏指令

write_com(0x02); //光标归位 即光标置于左上位置

}

void gotoxy(uint x,uint y)
                      //定位  ,x为行,y为列
{

if(x==1)

write_com(0x80+y);
   else

    write_com(0xC0+y);
}



编译出现3个error QQ图片20140730095924.jpg
哪位大神能帮忙看看啊。。。
 楼主| 发表于 2014-7-31 16:44:38 | 显示全部楼层
第一个error 是在
#pragma vector =TIMERA1_VECTOR
__interrupt void  TimerA1_ISR(void)
{   
这后面,说是少了';'

第二个error是在最后,说是少了‘’}‘’
第三个error不懂什么意思。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 05:18 , Processed in 0.028213 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表