#include "msp430x41x.h"
#include "main.h"
#include "string.h"
#include "math.h"
#include "stdio.h"
#include "nRF905_Config.h"
#include "nrf905.h"
char *LCD = LCDMEM;
unsigned char DISP_BUFFER[6];
volatile unsigned char test=0;
extern unsigned char ReceiveBuffer[BUF_SIZE];
extern unsigned char SendBuffer[BUF_SIZE];
void main(void)
{
unsigned char i=0,s[20];
_DINT();
WDTCTL = WDTPW+WDTHOLD;
Setup_SystemClock();
Setup_BasicTimer();
Setup_TimerA();
Setup_Port();
Setup_LCD();
memset(s,0,sizeof(s));
memcpy(s,"rec",3);
DisplayChar(s,3);
nRF905_Init(TX_ADDRESS); //TX_ADDRESS 为本机地址
_EINT(); // Enable interrupts
while(1)
{
if (nRF905_ReceivePacket())
{
F_ClearlcdRam();
memset(s,0,sizeof(s));
Hex2ASC(ReceiveBuffer,s,3);
DisplayChar(s,3*2);
}
}
}
void Setup_SystemClock(void)
{
SCFQCTL = SCFQ_2M; //MCLK=32*ACLK=1024KHz,DCO Modulation Enable
SCFI0 = 0; //FLLDx =0, fDCOCLK = 0.65-6.1MHz
SCFI1 = 0;
FLL_CTL0 |= XCAP18PF; //XCAP0PF, XCAP10PF, XCAP14PF
}
void Setup_BasicTimer(void)
{
BTCTL = BTSSEL + BTDIV + BTFRFQ0 + BTIP2 + BTIP1; //16-Bit Counter Mode, fCLK2 = fACLK/256 ,fLCD = fACLK/64 ,BasicTimer is hold
//Interrupt=fCLK2/16
BTCNT1 = 0;
BTCNT2 = 0;
IE2 &= ~BTIE; //Disnable interrupt of BasicTimer
IFG2 &= ~BTIE;
}
void Setup_TimerA(void)
{
TACTL = TASSEL_1+ID_3+TACLR; /* Timer A clock source select: 1 - ACLK */
/* Timer A input divider: 3 - /8 */
/* Timer A mode control: 0 - Stop */
TAR =0;
TACCTL0 =CCIE; /* Capture/compare interrupt enable */
CCR0 = C_Ms; //62.5ms
TACTL|=MC_1;
}
void Setup_LCD(void)
{
LCDCTL = LCDSG0_1+LCD4MUX+LCDON; // Enable LCD 4COM
F_ClearlcdRam();
}
void F_ClearlcdRam(void)
{
unsigned char i;
for (i=0;i<12;i++)
LCD[i] = 0;
}
void Setup_Port(void)
{
P1SEL = 0; //P1.0~P1.7设置为I/O
P1DIR=BIT5+BIT6+BIT7;
P1IES=BIT2+BIT3;
P1IE=BIT0+BIT1+BIT2+BIT3+BIT4;
P1IFG=0;
P1OUT=0X1F;
P2SEL = 0;
P2DIR=BIT6+BIT5+BIT4;
P2IES=BIT7;
P2IE=BIT7;
P2IFG=0;
P2OUT=0xff;
P3SEL = BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; //P3.2~P3.7设置为液晶专用端口
P3DIR = BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; //P3.0~P3.7设为输出
P4SEL = BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; //P4.0~P4.7设置为液晶专用端口
P4DIR = BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; //P4.0~P4.7设为输出
P5SEL=0xff;
P6SEL = 0;
P6DIR = BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; //P6.0~P6.7设为输出
P6OUT = 0xf4;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
_DINT();
_EINT();
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1_Int(void)
{
_DINT();
P1IFG=0;
_EINT();
}
#pragma vector=PORT2_VECTOR
__interrupt void Port2_Int(void)
{
_DINT();
P2IFG=0;
_EINT();
}
void DisplayChar(unsigned char *Buffer,unsigned char Len)
{
unsigned char i;
LCDCTL |=LCDSON;
for(i=0;i<Len;i++)
{
if (((*Buffer)>='0')&&((*Buffer)<='9'))
LCD[6-Len+i]=DigitTAB[*Buffer-'0'];
else if (((*Buffer)>='A')&&((*Buffer)<='Z'))
LCD[6-Len+i]=DigitTAB[*Buffer-'A'+10];
else if (((*Buffer)>='a')&&((*Buffer)<='z'))
LCD[6-Len+i]=DigitTAB[*Buffer-'a'+10];
else if ((*Buffer)=='-')
LCD[6-Len+i]=DigitTAB[36];
else if ((*Buffer)=='<')
LCD[6-Len+i]=DigitTAB[37];
else if ((*Buffer)=='>')
LCD[6-Len+i]=DigitTAB[38];
else
LCD[8-Len+i]=0X00;
Buffer++;
};
}
void Hex2ASC(unsigned char *Hex,unsigned char *ASC,unsigned int Len)
{
unsigned int i;
for (i = 0; i < Len; i++)
{
ASC[i*2] = "0123456789ABCDEF"[Hex[i]>>4];
ASC[i*2+1] = "0123456789ABCDEF"[Hex[i]&0x0F];
}
}
void asc2hex(unsigned char *asc, unsigned char *hex, signed int len)
{
signed int i;
unsigned char ch;
for(i=0;i < len;i++)
{
ch= asc[i * 2];
if(ch>= 'A' && ch<= 'F')
ch= ch - 'A' + 10;
else if(ch >= 'a' && ch <= 'f')
ch= ch- 'a' + 10;
else
ch&= 0x0f;
hex[i] = ch<< 4;
ch= asc[i * 2 + 1];
if(ch>= 'A' && ch<= 'F')
ch = ch - 'A' + 10;
else if(ch >= 'a' && ch <= 'f')
ch = ch - 'a' + 10;
else
ch &= 0x0f;
hex[i] += ch;
}
}
/**********************************************************/
/* BCD Dec */
/**********************************************************/
void BCDDec(unsigned char *PBu, unsigned char Len)
{
while (Len) {
(*PBu)--;
if (((*PBu) & 0x0f)>0x09) (*PBu)-=0x06;
if (((*PBu) & 0xf0)>0x90) (*PBu)-=0x60; else return;
PBu++;
Len--;
}
}
/**********************************************************/
/* BCD Inc */
/**********************************************************/
void BCDInc(unsigned char *PBu, unsigned char Len)
{
while (Len) {
(*PBu)++;
if (((*PBu) & 0x0f)>0x09) (*PBu)+=0x06;
if (((*PBu) & 0xf0)>0x90) (*PBu)+=0x60; else return;
PBu++;
Len--;
}
}
int float2str(char *s,float a)
{
signed long int b,c,d;
int i,j,len=0,len2=0;
if (a>999999) return 0;
c=b=(signed long int)a; //得到浮点数的整数部分
j=1;
while(c/=10) //得到整数部分的长度
j++;
for(i=0,len=j;i <len;i++)
s[i]='0'+(b/power(10,len-i-1))%10;
s[len]='.';
len2=6-len;
d=(signed long int)((a-b)*power(10,len2)+0.5);
if (d==0)
{
s[len+1]='0';
s[len+2]='\0';
}
else
{
for(i=0;i <len2;i++)
s[i+len+1]='0'+(d/power(10,len2-i-1))%10;
for(i=0;i <len2;i++)
{
if (s[len+len2-i]=='0')
s[len+len2-i]='\0';
else break;
}
s[len+len2+1]='\0';
}
return 1;
}
unsigned long int power(int base ,int n )
{
unsigned long int k=1;
if(n<=0) return 1;
while(n--)
{
k = k * base;
}
return k;
}
unsigned char DisplayDigit(float digit)
{
}