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

📄 ad-jieshou.c

📁 MSP430F149-RF905案例参考代码.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
    {  
      TxRxBuf[i]=SpiRead();		// Read data and save to buffer    
    }
    CSN_1;
    NRF905_Delay(10);
    TRX_CE_1;							
}
//=========DR检测,当 收到数据后DR置1,当把数据读出来后DR清0=====================
unsigned char CheckDR(void)		//检查是否有新数据传入 Data Ready
{
	if ((P2IN&0x40))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
//==============================================================================
void SetRxMode(void)
{
	TXEN_0;
	TRX_CE_1;
	NRF905_Delay(1); 		// delay for mode change(>=650us)
}
//==========================NRF905数据接收流程================================
void  RX(void)
{
    SetRxMode();			// Set nRF905 in Rx mode
    while (CheckDR()==0);
    NRF905_Delay(10);
    RxPacket();		// Recive data by nRF905
    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) ; // now : XX.X 度
     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) ;
}
//=================================== AD电压 显示 ================================
void dy_xianshi()
{
     DisoneChar(1,3,0x4e) ; // now : X.XX V
     DisoneChar(1,4,0x4f) ;
     DisoneChar(1,5,0x57) ;
     DisoneChar(1,6,0x20) ;
     DisoneChar(1,7,0x20) ;
     DisoneChar(1,8,seg[TxRxBuf[0]]) ;
     DisoneChar(1,9,0x2e) ;
     DisoneChar(1,10,seg[TxRxBuf[1]]) ;
     DisoneChar(1,11,seg[TxRxBuf[2]]) ;
     DisoneChar(1,12,0x56) ;

}
//=================================主函数======================================
void main(void)
{
   char i;
   WDTCTL = WDTPW + WDTHOLD; //禁止看门狗
   InitSys();         // 时钟初始化
   nRF905_IO_set();   // NRF905端口设置
   LED_IO_set();      //LED端口设置
   LCD_IO_set();      //LCD端口设置
   Config905();       //NRF905寄存器配置
   init_uart0();      //串口0初始化
   LcdReset();        //LCD初始化  
   NewmsgJASK3000();
   LED1_0;LED2_0;
while(1)
   {
       RX();  //接收数据
    if(TxRxBuf[3])              //软件检验一下
      {
        LED1_1;
	for(i=0;i<4;i++)
	{
	R_S_Byte(TxRxBuf[i]);     //串口上传温度
        NRF905_Delay(10);
	}
	}
      LED1_0;
      dy_xianshi();   //LCD电压显示
   }
}

⌨️ 快捷键说明

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