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

📄 健康检测系统程序(改好).c

📁 射频模块NRF9E5射频收发调试程序
💻 C
字号:
#include <reg9e5.h>
#define POWER      3                // 0=min power...3 = max power
#define HFREQ      0                // 0=433MHz, 1=868/915MHz
#define CHANNEL  351                // Channel number: f(MHz) = (422.4+CHANNEL/10)*(1+HFREQ) 




unsigned char bdata KeyValue;
unsigned char adc0,adc1;
unsigned char TxRxBuffer[2];
sbit  L0 = KeyValue^4;
sbit  L1 = KeyValue^5;
sbit  L2 = KeyValue^6;



sbit	S0	=P0^5;
sbit	S1	=P0^6;
sbit	S2	=P0^7;

sbit	LED0	=P0^0;
sbit	LED1	=P0^3;
sbit	LED2	=P0^4;




void Delay100us(volatile unsigned char n)
{
    unsigned char i;
    while(n--)
        for(i=0;i<35;i++)
            ;
}

void Delayms(volatile unsigned char n)
{
    unsigned char i;
    while(n--)
        for(i=0;i<10;i++)
        Delay100us(10);
}


void PutChar(char c)
{
    while(!TI)
        ;
    TI = 0;
    SBUF = c;
}


void PutString(const char *s)
{
	while(*s!=0)
		PutChar(*s++);
}



unsigned char SpiReadWrite(unsigned char b)
{
    EXIF &= ~0x20;                  // Clear SPI interrupt
    SPI_DATA = b;                   // Move byte to send to SPI data register
    while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting
        ;
    return SPI_DATA;
}

void  GetAD(void)
{
	RACSN=0;                         //开始进行AD转换
	SpiReadWrite(SAV|0x00);
	RACSN=1;
	while(EOC==0)                    //等待AD转换结束 
		;
	RACSN=0;                         //读AD数据寄存器,第一个NOP=0x00,第二个NOP=0x01
	SpiReadWrite(RAD);
	adc0=SpiReadWrite(0x00);
	adc1=SpiReadWrite(0x01);
	RACSN=1;
	/*result=0;
	result=(result|(adc1&0x03))<<8|adc0;*/
}


void ReceivePacket()
//unsigned char ReceivePacket()
{
    unsigned char b;
    unsigned char i;
    unsigned char k;
	TXEN=0;
    TRX_CE = 1;
    if(DR)
    {    
    	LED0=0;
		Delayms(10);
   		LED0=1;
		RACSN = 0;
    	SpiReadWrite(RRP);
    	for(i=0;i<2;i++)
    	{
    	TxRxBuffer[i]= SpiReadWrite();
    	}
    	RACSN = 1;
    	TRX_CE = 0;
		PutChar(TxRxBuffer[0]);
		PutChar(TxRxBuffer[1]);
    /*	result=b;       */
    	
    /*  if(L0) 	{  LED0=0;	}
    	if(L1) 	{  LED1=0;	}    	
    	if(L2) 	{  LED2=0;	}
    	Delayms(10);
    	LED0=1;				// LED OFF
    	LED1=1;
    	LED2=1;         */

    }

//    return b;

}



void TransmitPacket(void)
{
	TXEN=1;
    RACSN=0;			// Spi enable for write a spi command	
    SpiReadWrite(WTA);		// Write address command
    SpiReadWrite(0xE7);
    SpiReadWrite(0xE7);
    SpiReadWrite(0xE7);
    SpiReadWrite(0xE7);
    RACSN=1;			// Spi disable						
    Delay100us(1);            

    RACSN = 0;
    SpiReadWrite(WTP);
    SpiReadWrite(adc0);
    SpiReadWrite(adc1);
    RACSN = 1;
    TRX_CE = 1;
    Delay100us(10);
    
    TRX_CE = 0;
    while(DR == 0)
        ;
	LED2=0;
	Delayms(10);
   	LED2=1;
}

void Init(void)
{
    unsigned char tmp;

    TH1 = 243;                      // 19200@16MHz (when T1M=1 and SMOD=1)
    CKCON |= 0x10;                  // T1M=1 (/4 timer clock)
    PCON = 0x80;                    // SMOD=1 (double baud rate)
    SCON = 0x52;                    // Serial mode1, enable receiver
    TMOD = 0x20;                    // Timer1 8bit auto reload 
    TR1 = 1;                        // Start timer1

    P0_ALT |= 0x06;                 // Select alternate functions on pins P0.1 and P0.2   
    P0_DIR = 0xE2;        	    // P0.0 out,P0.1 input(RXD),P0.2 P0.3 P0.4 output,P0.5 P0.6 P0.7 input
    				    // 11100010
//	P0_ALT |= 0x00;
//	P0_DIR=0xaa;

    SPICLK = 1;
    SPI_CTRL = 0x02;                // Connect internal SPI controller to Radio

    LED0 = 1;
    LED1 = 1;
    LED2 = 1;    

    // Switch to 16MHz clock:
    RACSN = 0;
    SpiReadWrite(RRC | 0x09);
//    tmp = SpiReadWrite(0) | 0x04;
    tmp = SpiReadWrite(0) | 0x0C;
    RACSN = 1;

    RACSN = 0;
    SpiReadWrite(WRC | 0x09);
    SpiReadWrite(tmp);
    RACSN = 1;

    // Configure Radio:
    /*RACSN = 0;
    SpiReadWrite(WRC | 0x03);       // Write to RF config address 3 (RX payload)
    SpiReadWrite(0x02);             // 2 byte RX payload
    SpiReadWrite(0x02);             // 2 byte TX payload
    RACSN = 1;*/

    RACSN = 0;
    SpiReadWrite(RRC | 0x01);       // Read RF config address 1
    tmp = SpiReadWrite(0) & 0xf0;   // Clear the power and frequency setting bits
    RACSN = 1;

    RACSN = 0;
    SpiReadWrite(WRC);              // Write RF config address 0
	SpiReadWrite(0x6C);
    /*SpiReadWrite(CHANNEL & 0xff);*/   // CHANNEL bit7..0
    // Change power defined by POWER above, to 433 or 868/915MHz defined by HFREQ and
    // bit8 of CHANNEL:
    /*SpiReadWrite(tmp | (POWER<<2) | (HFREQ << 1) | ((CHANNEL >> 8) & 0x01));*/
    SpiReadWrite(0x0C);
	SpiReadWrite(0x44);  	    //2004.11.13
    SpiReadWrite(0x02);             // 2 byte RX payload
    SpiReadWrite(0x02);             // 2 byte TX payload
    SpiReadWrite(0xE7); 
    SpiReadWrite(0xE7); 
    SpiReadWrite(0xE7); 
    SpiReadWrite(0xE7); 
    
    RACSN = 1;

    //InitTimer();
    EA = 1;
}

void ScanKey()
{    
    KeyValue=0x00;
    
    if(S0==0)  
    {	
    L0=1;
    LED0=0;
 	Delayms(10);
 	LED0=1;
 	
 	RACSN=0;
	SpiReadWrite(WAC);               //写AD配置寄存器
	SpiReadWrite(0x05);			     //选择AIN0,PWR_UP=1,VFSEL=0
	SpiReadWrite(0x09);              //设置 Res_CTRL=1,Right justified
	RACSN=1;
	
 	GetAD();


	PutChar(adc0);
	PutChar(adc1);
 	
 	TXEN = 1;
 	TransmitPacket();
 	TXEN = 0;
 	Delayms(10);
     }
     
     
    if(S1==0)  
    {
    	L1=1; 
   	LED1=0;
 	Delayms(10);
 	LED1=1; 
 	
 	RACSN=0;
	SpiReadWrite(WAC);               //写AD配置寄存器
	SpiReadWrite(0x15);			     //选择AIN1,PWR_UP=1,VFSEL=0
	SpiReadWrite(0x09);              //设置 Res_CTRL=1,Right justified
	RACSN=1;
	
 	GetAD();

	PutChar(adc0);
	PutChar(adc1);
 	
 	TXEN = 1;
 	TransmitPacket(); 
 	TXEN = 0;
 	Delayms(10); 	
    }
    
    
    if(S2==0)
    {
	L2=1;
	LED2=0;
	Delayms(10);
	LED2=1;
	
	RACSN=0;
	SpiReadWrite(WAC);               //写AD配置寄存器
	SpiReadWrite(0x25);			     //选择AIN2,PWR_UP=1,VFSEL=0
	SpiReadWrite(0x09);              //设置 Res_CTRL=1,Right justified
	RACSN=1;
	
 	GetAD();

	PutChar(adc0);
	PutChar(adc1);
 	
 	TXEN = 1;
 	TransmitPacket();
 	TXEN = 0;
 	Delayms(10);
    }   
    
    
   /* if(KeyValue!=0x00)
    {
    PutChar(KeyValue);
	TransmitPacket();*/
 /*	TXEN = 1;
 	TransmitPacket(KeyValue);
 	TXEN=0;                      */
// 	Delayms(10);
// 	LED0=1;
//	LED1=1;
// 	LED2=1;
   // } 
}


void main(void)
{
    Init();

    LED0 = 0;
    Delayms(10);

    
    LED1 = 0;
    Delayms(10);   
    
    LED2 = 0;
    Delayms(10);   

    //PutString("Hello World!\n");

    LED0 = 1;		//off led
    LED1 = 1;
    LED2 = 1;    
	
	while(1)
    	{
			ScanKey();
			ReceivePacket();	        	      	
    	}
}

⌨️ 快捷键说明

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