📄 双工改进.c
字号:
#include "hal.h"
#include "app_ex.h"
#include "cul.h"
//////////////////////////////////////////////////////////////////
//传输版
#define AUDIO_SEND 0
#define AUDIO_RECEIVE 1
#define ADDRESS_0 0x01
#define ADDRESS_1 0x02
#define RECEIVE_TIMEOUT 4
#define SENDLENGTH 85
UINT8 audio_mode;
UINT8 myAddr;
UINT8 remoteAddr;
BOOL remoteAddressSet = FALSE;
BOOL myAddressSet = FALSE;
BYTE sendbuffer[SENDLENGTH];
BYTE* receiveBuffer;
BYTE* ReceiveBuffer;
UINT8 adc_value;
UINT8 adc_num;
UINT8 pulse_length;
UINT16 pulse_length_num;
void initAudio(void);
void sendAudio(void);
void receiveAudio(void);
void printRSSI(INT8 rssi);
UINT32 getFrequency(void);
UINT8 getAddress(UINT8 a);
////////////////////////////////////////////////////////////////
void initAudio(void)
{
char *menuText[] = {(char *)" Client?", (char *)" Host?", (char *)" Set Freq?", (char *)" Set MyAddr?", (char *)" SetRemoteAddr"};
BYTE result;
UINT32 frequency = 2405000;
initLcd();
INIT_JOYSTICK();
INIT_BUTTON();
SET_MAIN_CLOCK_SOURCE(CRYSTAL);
INIT_GLED();
INIT_YLED();
remoteAddressSet = FALSE;
myAddressSet = FALSE;
TXCTRLL=0xff;//cywu set txpwr to max
while((result = lcdMenu(menuText, 5)) > 1)
{
if(result == 2)
{
frequency = getFrequency();
}
else if(result == 3)
{
lcdUpdate((char *)"Set myAddress",(char *)"");
myAddr = getAddress(myAddr);
myAddressSet = TRUE;
}
else if(result == 4)
{
lcdUpdate((char *)"Set remoteAddr",(char *)"");
remoteAddr = getAddress(remoteAddr);
remoteAddressSet = TRUE;
}
else{ // ABORT_MENU
return;
}
}
if(result == 1) // Host
{
audio_mode = AUDIO_RECEIVE;
if(myAddressSet == FALSE)
{
myAddr = ADDRESS_1;
}
if(remoteAddressSet == FALSE)
{
remoteAddr = ADDRESS_0;
}
lcdUpdate((char *)"Host",(char *)"");
}
else // Client
{
audio_mode = AUDIO_RECEIVE;
if(myAddressSet == FALSE)
{
myAddr = ADDRESS_0;
}
if(remoteAddressSet == FALSE)
{
remoteAddr = ADDRESS_1;
}
lcdUpdate((char *)"Client",(char *)"");
}
waitVisible(CLEARLY_VISIBLE);
radioInit(frequency, myAddr);
}
////////////////////////////////////////////////////////////////
void main()
{
adc_num = 0;
pulse_length_num = 0;
pulse_length = 0xff;
for(int i=0;i<SENDLENGTH;i++)
sendbuffer[i] = 0;
while(getJoystickDirection() != CENTRED);
initAudio();
P0SEL=0x00;
P1SEL=0x00;
IO_DIR_PORT_PIN(0, 0, IO_IN);
IO_ADC_PORT0_PIN(0, IO_ADC_EN);
IO_DIR_PORT_PIN(1, 1, IO_OUT);
TIMER1_INIT();
halSetTimer1Period(128);
TIMER34_INIT(4);
halSetTimer34Period(4,128);
TIMER34_PWM_CONFIG(4);
ADC_ENABLE_CHANNEL(0);
INT_GLOBAL_ENABLE(INT_ON);
INT_ENABLE(INUM_T1, INT_ON);
TIMER1_ENABLE_OVERFLOW_INT(TRUE);
// Starting timer 1
TIMER1_RUN(TRUE);
TIMER4_RUN(TRUE);
while(1)
{
if(audio_mode == AUDIO_SEND)
{
sendAudio();
audio_mode = AUDIO_RECEIVE;
}
else//(audio_mode == AUDIO_RECEIVE)
{
receiveAudio();
}
}
}
///////////////////////////////////////////
#pragma vector=T1_VECTOR
__interrupt void T1_IRQ(void)
{
if(T1CTL & 0x10)
{
ADC_ENABLE_CHANNEL(0);
ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN0);
while(!ADC_SAMPLE_READY());
ADC_DISABLE_CHANNEL(0);
adc_value = ADCH;
sendbuffer[adc_num] = adc_value*2;
if(adc_num<SENDLENGTH-1)
adc_num++;
else
{
adc_num=0;
audio_mode = AUDIO_SEND;
}
if(pulse_length_num<SENDLENGTH-1)
{
pulse_length = receiveBuffer[pulse_length_num];
pulse_length_num++;
}
else
{
pulse_length_num=0;
pulse_length = 0xff;
}
TIMER34_SET_PWM_PULSE_LENGTH(4,pulse_length);
}
T1CTL &= ~0x10;
}
//////////////////////////////////////////////
void sendAudio(void)
{
radioSend(sendbuffer, sizeof(sendbuffer), remoteAddr, DO_NOT_ACK);
}
//////////////////////////////////////////////////
void receiveAudio(void)
{
BYTE length;
BYTE res;
BYTE sender;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT,&sender);
if(res == TRUE)
{;
// GLED = LED_ON;
// printRSSI(receiveBuffer[0]);
// for(int i=0;i<length&&i+store_num<STORESPACE;i++)
// storedata[i+store_num] = receiveBuffer[i];
// store_num=length-1;
}
/* else
{
lcdUpdate((char *)"Waiting",(char *)"");
GLED = LED_OFF;
}
GLED = LED_OFF;*/
}
/////////////////////////////////////////////////////////////////////////////////////
UINT8 getAddress(UINT8 a)
{
UINT8 address = a;
char line[16];
JOYSTICK_DIRECTION jsv;
while(getJoystickDirection() != CENTRED);
while((jsv = getJoystickDirection()) != RIGHT)
{
while(getJoystickDirection() != CENTRED);
if(jsv == UP)
{
address++;
}
else if (jsv == DOWN)
{
address--;
}
sprintf(line,(char *)"Address: %d ",address);
lcdUpdateLine(LINE2, line);
}
return address;
}
////////////////////////////////////////////////////////////////////////////////////////
UINT32 getFrequency(void)
{
UINT8 selection;
char *menuText[] = {(char*)" 2405", (char*)" 2410", (char*)" 2415", (char*)" 2420", (char*)" 2425", (char*)" 2430", (char*)" 2435", (char*)" 2440", (char*)" 2445", (char*)" 2450", (char*)" 2455", (char*)" 2460", (char*)" 2465", (char*)" 2470", (char*)" 2475", (char*)" 2480", (char*)" 2485"};
selection = lcdMenu(menuText, 17);
if(selection != ABORT_MENU)
{
return (2405000 + 5000*selection);
}
else
{
return (2405000);
}
}
///////////////////////////////////////////////////////////////////////
void printRSSI(INT8 rssi)
{
char rssiString[16];
sprintf(rssiString, (char const *)"%d dBm", (rssi-45));
lcdUpdateLine(LINE2, rssiString);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -