特别奇怪啊!我点进入无线通讯的菜单,进入频道1接收模式,再点返回就回到了主菜单,不会出现死机现象(没有收到数据的情况下),当我收到数据开始计数的时候,再点返回就会出现死机的情况,请问原子大哥这是怎么回事呀?
本人是大二的学生,第一次发帖。
谢谢原子哥啊!
附上山寨原子哥的程序。
void Wireless_Play(void)
{
u8 a,b,d,c;
u8 key;
u8 mode;//24L01的模式设置
u8 tmp_buf[5];
u16 l;
mode=Wireless_Mode_Set();
if(mode==0)
{
SPIx_Init();//设置回原来的
SPIx_SetSpeed(SPI_SPEED_4);//18Mhz
return;//24L01检测失败,直接退出
}
if(mode==1)
{
Load_Gui_Show("清除","接收","返回");
RX_Mode();//频道1接收模式
}
if(mode==2)
{
Load_Gui_Show("清除","接收","返回");//加载界面
RX_Mode();//频道2接收模式
}
if(mode==3)
{
Load_Gui_Show("清除","接收","返回");//加载界面
RX_Mode();//频道3接收模式
}
LCD_Fill(0,0,240,296,LGRAY);//填充灰色
  OINT_COLOR=BLACK;//设置字体为蓝色
while(1)
{
if(mode==1)//接收模式
{
Show_Str(60,30,"NRF24L01 接收模式",16,1);
Show_Str(60,50,"收到的数据:",16,1);
Show_Str(60,70,"应答的数据:",16,1);
Show_Str(60,90,"标志位数据:",16,1);
Show_Str(60,110,"次数计数器:",16,1);
Show_Str(60,130,"频道数2:",16,1);
RX_Mode();
l=0;
tmp_buf[1]=0;
tmp_buf[0]=0;
  OINT_COLOR=BLUE;
while(1)
{
NRF24L01_RxPacket(tmp_buf);
if(tmp_buf[0]==0xff)
{
LED1=0;
d=tmp_buf[0];
c=d+0;
tmp_buf[0]=0;
LCD_ShowNum(148,90,c,2,16);
if(tmp_buf[1])
{
a=tmp_buf[1];
b=a+0;
tmp_buf[1]=0;
LCD_ShowNum(148,50,b,5,16);
LCD_ShowNum(148,110,l,5,16);
l=l+1;
}
}
delay_ms(50);
LED0=!LED0;
key=AI_Read_TP(30);//得到触点的状态
if(key)//触摸屏被按下
{
  en_Point.Key_Reg|=0x80;//标记按下了按键
}
else if(Pen_Point.Key_Reg&0X80)//按键松开了
{
if(Pen_Point.Key_Reg&0x03)//点动按下
{
if(Is_In_Area(203,300,32,16))//返回按钮按下了
{
  en_Point.Key_Reg=0;//清除笔状态
return ;//直接退出
}
if(Is_In_Area(5,300,32,16))
{
Pen_Point.Key_Reg=0;
LCD_ShowNum(148,50,0,5,16);
LCD_ShowNum(148,110,0,5,16);
l=0; //清屏
}
}
}
};
}
|