⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcu-jieshou.c

📁 MSP430F149-RF905案例参考代码.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
    {  
      RxBuf[i]=SpiRead();		// Read data and save to buffer    
    }
    CSN_1;
    Delay(10);
    TRX_CE_1;							
}

//==========================NRF905数据接收流程================================
void  RX(void)
{
    SetRxMode();			// Set nRF905 in Rx mode
    while (CheckDR()==0);
    Delay(10);
    RxPacket();		// Recive data by nRF905
    Delay(10);
}

//========================延时约5ms=============================================
void Delay5ms(void)
{ 
    uint i=40000;
    while (i != 0)
    {
        i--;
    }
}
//========================等待1602液晶完成内部操作==============================
void WaitForEnable(void) 
{
    P4DIR &= 0x00;  //将P4口切换为输入状态
    CLR_RS;
    SET_RW;
    _NOP();
    SET_EN; 
    _NOP();
    _NOP();
    while((P4IN & Busy)!=0);  //检测忙标志
    CLR_EN;
    P4DIR |= 0xFF;  //将P4口切换为输出状态
}	                  
//==========================向液晶模块写入命令==================================
//=================cmd--命令,chk--是否判忙的标志,1:判忙,0:不判=============
void LcdWriteCommand(uchar cmd,uchar chk) 
{

    if (chk) WaitForEnable();   // 检测忙信号?
    
    CLR_RS;	
    CLR_RW; 
    _NOP();

    DataPort = cmd;             //将命令字写入数据端口 
    _NOP();					
    
    SET_EN;                     //产生使能脉冲信号
    _NOP();
    _NOP();
    CLR_EN;			
}
//=====================向液晶显示的当前地址写入显示数据=========================
void LcdWriteData( uchar data ) 
{
    WaitForEnable();        //等待液晶不忙
    SET_RS;
    CLR_RW; 
    _NOP();
    DataPort = data;        //将显示数据写入数据端口
    _NOP();
    SET_EN;                 //产生使能脉冲信号
    _NOP(); 
    _NOP(); 
    CLR_EN;		
}
//==================向液晶输入显示字符位置的坐标信息============================
void LocateXY(uchar x,uchar y) 
{
    uchar temp;
    x&= 0x01;
    temp = y&0x0f;
    if(x)   temp |= 0x40;  //如果在第2行
    temp |= 0x80;
    LcdWriteCommand(temp,0);
}
//==========================在某个位置显示一个字符==============================
//============x--位置的列坐标   y--位置的行坐标data--显示的字符数据=============
void DisoneChar(uchar x,uchar y,uchar data) 
{
    LocateXY( x, y );			
    LcdWriteData( data );		
}
//==============================让液晶从某个位置起连续显示一个字符==============
//==============================y--位置的列坐标  x--位置的行坐标================
void DispStr(uchar x,uchar y,uchar *ptr) 
{
    uchar *temp;
    uchar i,n = 0;
    
    temp = ptr;
    while(*ptr++ != '\0')   n++;    //计算字符串有效字符的个数
    
    for (i=0;i<n;i++)
    {
        DisoneChar(x++,y,temp[i]);
        if (x == 0x0f)
        {
           x  = 0; 
           y ^= 1;
        }
    }
}
//让液晶从某个位置起连续显示N个字符
void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) 
{
    uchar i;
    
    for (i=0;i<n;i++)
    {
        DisoneChar(x++,y,ptr[i]);
        if (x == 0x0f)
        {
           x = 0; 
           y ^= 1;
        }
    }
}
//========================对1602液晶模块进行复位操作============================
void LcdReset(void) 
{
    LcdWriteCommand(0x38, 0);	    //规定的复位操作
    Delay5ms();
    LcdWriteCommand(0x38, 0);		
    Delay5ms();
    LcdWriteCommand(0x38, 0);
    Delay5ms();
    LcdWriteCommand(0x38, 1);		//显示模式设置
    LcdWriteCommand(0x08, 1);		//显示关闭
    LcdWriteCommand(0x01, 1);	        //显示清屏
    LcdWriteCommand(0x06, 1);		//写字符时整体不移动
    LcdWriteCommand(0x0c, 1);		//显示开,不开游标,不闪烁
   
}
//==================================NEWMSG-JASK3000=============================
void NewmsgJASK3000()
{
     DisoneChar(0,1,0x4e) ;
     DisoneChar(0,2,0x45) ;
     DisoneChar(0,3,0x57) ;
     DisoneChar(0,4,0x4d) ;
     DisoneChar(0,5,0x53) ;
     DisoneChar(0,6,0x47) ;
     DisoneChar(0,7,0x2d) ;
     DisoneChar(0,8,0x2d) ;
     DisoneChar(0,9,0x4a) ;
     DisoneChar(0,10,0x41) ;
     DisoneChar(0,11,0x53) ;
     DisoneChar(0,12,0x4b) ;
     DisoneChar(0,13,0x33) ;
     DisoneChar(0,14,0x30) ;
     DisoneChar(0,15,0x30) ;
     DisoneChar(0,16,0x30) ;
     Delay5ms();
     DisoneChar(1,2,0x41) ;
     DisoneChar(1,3,0x3a); 
     DisoneChar(1,4,0x42 );
     DisoneChar(1,5,0x20);
     DisoneChar(1,6,0x20);
     DisoneChar(1,7,seg[bai1] );
     DisoneChar(1,8,seg[shi1]);
     DisoneChar(1,9,seg[ge1]);
     DisoneChar(1,10,0x3a); 
     DisoneChar(1,11,seg[bai2]);
     DisoneChar(1,12,seg[shi2]);
     DisoneChar(1,13,seg[ge2]);
}
//=============================比赛计分显示=====================================
void display()
{
     DisoneChar(1,7,seg[bai1] );
     DisoneChar(1,8,seg[shi1]);
     DisoneChar(1,9,seg[ge1]);
     DisoneChar(1,10,0x3a); 
     DisoneChar(1,11,seg[bai2]);
     DisoneChar(1,12,seg[shi2]);
     DisoneChar(1,13,seg[ge2]);
}
//==================================主函数=====================================
void main(void)
{
   WDTCTL = WDTPW + WDTHOLD; 
   InitSys();
   nRF905_IO_set();
   LED_IO_set();        //LED端口设置
   KEY_IO_set();       //KEY端口设置
   LCD_IO_set();      //LCD端口设置
   Config905();
   LcdReset();        //LCD初始化  
   NewmsgJASK3000();
   LED1_1;LED2_1;
while(1)
   {
    RX();                     //接收数据后判断
    if(RxBuf[0]==0x11)          //A队+1
	{ 
          count1=count1+1;LED1_0;
        }
    if(RxBuf[0]==0x21)             //A队+2
	{ 
          count1=count1+2;LED1_1;
        }
    if(RxBuf[0]==0x31)            //A队+3
	{
	count1=count1+3; LED1_0;
	}
    if(RxBuf[0]==0x41)           //B队+1
	{
	count2=count2+1;LED2_0;
	}
    if(RxBuf[0]==0x51)          //B队+2
	{
	count2=count2+2;LED2_1;
	}
    if(RxBuf[0]==0x61)         //B队+3
	{
	count2=count2+3;LED2_0;
	}
    if(RxBuf[0]==0x71)        //A队-1
	{
	count1=count1-1;LED1_1;
	}
    if(RxBuf[0]==0x91)       //B队-1
	{
	count2=count2-1; LED2_1;
	}
       RxBuf[0]=0;
        bai1=count1/100;shi1=count1%100/10; ge1=count1%10;      
	bai2=count2/100;shi2=count2%100/10; ge2=count2%10;
    if(count1>=909)
        {
         count1=0;
        }
     if(count2>=909)
        {
        count2=0;
         }
    display();
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -