?? 健康檢測(cè)系統(tǒng)程序(改好).c
字號(hào):
#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; //開(kāi)始進(jìn)行AD轉(zhuǎn)換
SpiReadWrite(SAV|0x00);
RACSN=1;
while(EOC==0) //等待AD轉(zhuǎn)換結(jié)束
;
RACSN=0; //讀AD數(shù)據(jù)寄存器,第一個(gè)NOP=0x00,第二個(gè)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); //寫(xiě)AD配置寄存器
SpiReadWrite(0x05); //選擇AIN0,PWR_UP=1,VFSEL=0
SpiReadWrite(0x09); //設(shè)置 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); //寫(xiě)AD配置寄存器
SpiReadWrite(0x15); //選擇AIN1,PWR_UP=1,VFSEL=0
SpiReadWrite(0x09); //設(shè)置 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); //寫(xiě)AD配置寄存器
SpiReadWrite(0x25); //選擇AIN2,PWR_UP=1,VFSEL=0
SpiReadWrite(0x09); //設(shè)置 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();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -