#include<reg52.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<intrins.h>
#include"2401_driver.h"
#define baud_rate 9600 //波特率
#define fosc 11059200 //晶振频率
#define uart_mode 0x50 //串口工作方式1*/
#define uchar unsigned char
#define uint unsigned int
/*******************************************************************/
//AsCII设置
uchar code ascii[]={
0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,
0X38,0X39,0X41,0X42,0X43,0x44,0X45,0X46};
uchar InitData[15];
uchar TXData[20]; //20
uchar RXData[16];//16
uchar Temp;
uchar ByteCnt;
uchar Data1=0xff;
bdata uchar tempi;
uchar buff[15];
uchar buff1[15];
uchar command=0x00;
uchar command1=0x00;
uchar command_status=0X00;
uchar command_status1=0X00;
uchar key2401=0x00;
/******************************************************************/
sbit PWR_UP=P2^6;
sbit DR1=P3^7;
sbit CLK1=P2^2;
sbit CS=P2^3;
sbit CE=P2^5;
sbit Data=P2^0;
sbit CTRL485=P3^2;
sbit bflag=tempi^7;
bit retry_status;
/****************************************************************/
void init_cup(uchar SET_TIMER);
//void nrf2401_power_on();
void buildinitword();
void WRITE();
void nrf2401_init();
void rxen_high();
void txen_low();
void buildshockword();
void TX_packet();
void delay(uchar);
uchar read();
void Rx_packet();
void serial_command1();
//chuankou
uchar uart_receive_data();
uchar Receive_one();
void send_Data(uchar send_data);
void TXA_INT(uchar s);
void serial_command();
void revertright();
void reverterro();
void revert();
/***************************************************************/
void main()
{
//char i;
retry_status=1;
init_cup(0xFD);//*初始化串口
IP = 0X10; //*将串口中断设置成高优先级
IE = 0X80 | 0X10; //*开串口中断 开CPU中断 */
key2401=P0;//读按键值
nrf2401_power_on();
buildinitword();
nrf2401_init();
rxen_high();
//delay(10);
delay(100);
/* for(i=0;i<30;i++) //ysm2401测试
{
command1=i+1;
txen_low();
buildshockword();
TX_packet();
delay(200);
rxen_high();
}*/
while(1)
{
DR1=1;
if(DR1==1)
Rx_packet(); //接收数据2401
serial_command1();
serial_command();
}
}
void init_cup(uchar SET_TIMER)
{
TMOD=0X21;//*设定T1工作于方式2
TH1=SET_TIMER;//*设定定时器1初值
TL1=SET_TIMER;//*设定定时器1初值
TH0=0XEC;
TL0=0X78;
SCON=uart_mode; //*设定工作方式
PCON=0X00;//*SMOD=0 波特率不加倍
TR1=1; //*启动定时器T1
CTRL485=0; //485确定接收状况
}
/******************串口接收************************/
//接收一个字节,
uchar uart_receive_data()
{
uchar receivedata;
//RI=0;
while(!RI);
RI=0;
receivedata=SBUF;
return (receivedata);
}
//接收一帧字节,非信号返回0,命令字符(6字节)正确返回1、错误返回2
//**************************上下键信息(21字节)正确返回4、错误返回5
//**************************其他键信息(11字节)正确返回3、错误返回6
uchar Receive_one()
{
uchar cs=0xf0,serial_data,ada,bda=0,datah,datal;
uint i;
uchar data11,data12;
//RI=0;
serial_data=uart_receive_data();
while(serial_data!=0xf0)
{
return 0;
}
ada=serial_data=uart_receive_data();
cs^=serial_data;
command=serial_data=uart_receive_data();
cs^=serial_data;
switch (ada){
case 0x06:
bda=1;
break;
case 0x0b:
for(i=0;i<5;i++)
{
buff[i]=uart_receive_data();
cs^=buff[i];
}
bda=3;
break;
case 0x15:
for(i=0;i<15;i++)
{
buff[i]=uart_receive_data();
cs^=buff[i];
}
bda=4;
break;
default:
break;
}
datah=ascii[cs/16];
datal=ascii[cs%16];
data11=uart_receive_data();
data12=uart_receive_data();
if(datah!=data11|datal!=data12)
{
if(bda==1)
bda=2;
else if(bda==4)
bda=5;
else if(bda==3)
bda=6;
}
if(uart_receive_data()!=0x9c)
{
if(bda==1|bda==2)
bda=2;
else if(bda==4|bda==5)
bda=5;
else if(bda==3|bda==6)
bda=6;
}
retry_status=0; //ysm
return bda;
}
//串口接收中断程序
void RXD_INT(void) interrupt 4
{
EA=0;
command_status=Receive_one();
//ssss=uart_receive_data(); //ysm测试
//command_status++; //ysm测试
//TXA_INT(0x91);
//delay(200);
//retry_status=0; //ysm08-12-23
//serial_command(); //ysm
EA=1;
}
//TIME0 INTERRUPT
void time0(void) interrupt 1
{
}
/*串口发送*/
//串口发送一个字节
void send_Data(uchar send_data)
{
//TI=0;
SBUF=send_data;
while(TI!=1);
TI=0;
}
//串口发送一桢数据
void TXA_INT(uchar s)
{
uchar cs=0x0f^0x06;
uchar datah,datal;
TI=0;
CTRL485=1;
EA=0;
send_Data(0x0f);
send_Data(0x06);
cs^=s;
send_Data(s);
datah=ascii[cs/16];
send_Data(datah);
datal=ascii[cs%16];
send_Data(datal);
send_Data(0x3d);
RI=0;
TI=0;
delay(1);
CTRL485=0;
EA=1;
}
void serial_command()
{
uint i;
delay(50); //ysm增加
switch(command_status)
{
case 0:
break;
case 1:
revertright();
break;
case 2:
reverterro();
break;
case 3:
revert();
break;
case 4:
revert();
break;
case 5:
TXA_INT(0xf3); //ysm0x0a
break;
case 6:
if(command==0xa8) //ysm
{
for(i=0;i<15;i++)
{
buff1[i]=buff[i];
}
command1=command;
txen_low();
buildshockword();
TX_packet();
delay(1); //ysm
rxen_high();
}
else TXA_INT(0xf3); //ysm0x0a
break;
default :
break;
}
command_status=0;
}
void revertright()
{
if(command==0xf3)
TXA_INT(command1);
else if(command!=0x0c)
{
TXA_INT(command);
command1=command;
txen_low();
buildshockword();
TX_packet();
delay(1); //ysm
rxen_high();
}
}
void reverterro()
{
if(command==0xf3)
TXA_INT(command1);
else if(command!=0x0c)
{
TXA_INT(0xf3); //ysm0a
}
}
void revert()
{
uint i;
command1=command;
if(command!=0xa8)
{
TXA_INT(command1);
}
for(i=0;i<15;i++)
{
buff1[i]=buff[i];
}
txen_low();
buildshockword();
TX_packet();
delay(1); //ysm
rxen_high();
}
//file end
没有合适的资源?快使用搜索试试~ 我知道了~
The-top-of-the-remote-control.rar_remote_手持
共18个文件
c:2个
hex:2个
lst:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 69 浏览量
2022-09-24
04:24:22
上传
评论
收藏 39KB RAR 举报
温馨提示
用nRF2401实现手持工业无线遥控器接收
资源推荐
资源详情
资源评论
收起资源包目录
The-top-of-the-remote-control.rar (18个子文件)
遥控器上端
wireless_receiver.hex 4KB
2401_driver.LST 7KB
wireless_receiver 24KB
dowm1.hex 4KB
wireless_receiver.M51 33KB
wireless_receiver.Opt 1KB
wireless_receiver_Uv2.Bak 2KB
wireless_receiver.Uv2 2KB
wireless_receiver_Opt.Bak 1KB
receiver_main.OBJ 19KB
receiver_main.LST 14KB
wireless_receiver.lnp 67B
2401_driver.c 3KB
wireless_receiver.plg 236B
2401_driver.OBJ 9KB
vssver.scc 304B
2401_driver.h 824B
receiver_main.c 6KB
共 18 条
- 1
资源评论
我虽横行却不霸道
- 粉丝: 71
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功