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

📄 wirelessplay.c

📁 STM32不完全手册 例程源码 29个
💻 C
字号:
#include "wirelessplay.h"
#include "24l01.h"
#include "gui.h"			   
#include "lcd.h"			 
#include "delay.h"
#include "text.h"
#include "touch.h"		   
#include "usart.h"	 
#include "led.h"    
#include "key.h"
#include "spi.h"	     
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//综合实验 驱动代码		 					    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/6/6
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////	 


//设置24L01的模式,TX/RX
//返回值:2,发送模式
//       1,接收模式
u8 Wireless_Mode_Set(void)
{
	u8 key,t=0;	   
	LCD_Clear(LGRAY);					  
	NRF24L01_Init();    //初始化NRF24L01 
	BACK_COLOR=LGRAY;//设置字体为蓝色   	   
	POINT_COLOR=BLUE;//设置字体为蓝色    	  			 
	while(NRF24L01_Check())//检测不到24L01
	{
 		POINT_COLOR=RED;//设置字体为红色	   
		Show_Str(60,130,"24L01检测失败",16,0);
		delay_ms(500);
		Show_Str(60,130,"请检查       ",16,0);
		delay_ms(500);
		LED0=!LED0;//DS0闪烁
		t++;
		if(t>5)return 0;//失败了
	}				  
	LCD_Fill(60,130,240,160,LGRAY);//清除显示	     
	Load_Gui_Show("","","返回");//加载界面 
	LCD_Fill(0,0,240,296,LGRAY);//填充灰色 
	GUI_Draw_Button(40,60,160,40,"设置为发送模式",BLACK);
 	GUI_Draw_Button(40,140,160,40,"设置为接收模式",BLACK);	   
	while(1)//等待模式选择
	{
		key=AI_Read_TP(20);//得到触点的状态
		if(key)//触摸屏被按下						  
		{	
			Pen_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))//返回按钮按下了
				{
					Pen_Point.Key_Reg=0;//清除笔状态			   
					return 0;//直接退出
				}
                if(Is_In_Area(40,60,160,40))//发送模式
				{
					Pen_Point.Key_Reg=0;//清除笔状态			   
					return 2; 
				} 
                if(Is_In_Area(40,140,160,40))//接收模式
				{
					Pen_Point.Key_Reg=0;//清除笔状态			   
					return 1;//直接退出
				}    
			}
			Pen_Point.Key_Reg=0;//清除笔状态	  	 
		}else delay_ms(1);	
		t++;
		if(t==200)
		{
			LED0=!LED0;
			t=0;
		}				   
	}  	
}
						 
//触摸画板功能演示函数   
void Wireless_Play(void)
{				  	
	u8 err=0,i;		 
	u8 key;	 
	u8 mode;//24L01的模式设置
	u8 tmp_buf[5];//低4个字节,传递坐标值,最高一个字节:0,正常画图,1清除;2,退出;  
	  
	mode=Wireless_Mode_Set();
	if(mode==0)
	{
		SPIx_Init();//设置回原来的				 
		SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
		return;//24L01检测失败,直接退出
	}	 			
	if(mode==2)
	{			    
		Load_Gui_Show("清除","发送","返回");//加载界面 
		TX_Mode();//发送模式
	}else
	{
		Load_Gui_Show("清除","接收","返回");//加载界面 
		RX_Mode();//接收模式
	}
	LCD_Fill(0,0,240,296,LGRAY);//填充灰色 
	POINT_COLOR=BLUE;//设置字体为蓝色  	 
	while(1)
	{	  		   				 
		key=AI_Read_TP(20);//得到触点的状态
		if(mode==1)//接收模式
		{
			if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
			{
				Pen_Point.X=tmp_buf[0];
				Pen_Point.X=(Pen_Point.X<<8)+tmp_buf[1];
 				Pen_Point.Y=tmp_buf[2];
				Pen_Point.Y=(Pen_Point.Y<<8)+tmp_buf[3];
				switch(tmp_buf[4])
				{
					case 0://正常画点
						Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
						break;
					case 1://清除
						LCD_Fill(0,0,240,296,LGRAY);//填充灰色
						break;
					case 2://退出
						Pen_Point.Key_Reg=0;//清除笔状态
						SPIx_Init();//设置回原来的				 
						SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
						return; 
				}	  
			}
		}
		if(key)//触摸屏被按下						  
		{	
			Pen_Point.Key_Reg|=0x80;//标记按下了按键    
			if(Pen_Point.Y<296&&mode==2)//在画图区域内,且为发送模式
			{
				tmp_buf[0]=Pen_Point.X>>8;
				tmp_buf[1]=Pen_Point.X&0xFF;
				tmp_buf[2]=Pen_Point.Y>>8;	 
				tmp_buf[3]=Pen_Point.Y&0xFF; 
				tmp_buf[4]=0;//功能为0,正常画图  
				Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
				err=0;	      
				while(NRF24L01_TxPacket(tmp_buf)!=TX_OK)//等待发送完成
				{
					err++;
					if(err>10)return;//连续超过10次错误,则返回
				}
			}      
		}else if(Pen_Point.Key_Reg&0X80)//按键松开了 
		{
			if(Pen_Point.Key_Reg&0x02)//点动按下
			{	    
                if(Is_In_Area(203,300,32,16))//返回按钮按下了
				{
					if(mode==2)
					{
						tmp_buf[4]=2;//功能为2,退出
						NRF24L01_TxPacket(tmp_buf);//发送一次
					} 
					Pen_Point.Key_Reg=0;//清除笔状态
					SPIx_Init();//设置回原来的				 
					SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 			   
					return;
				}
				if(Is_In_Area(5,300,32,16))//清除按钮按下了
				{
					if(mode==2)
					{
						tmp_buf[4]=1;//功能为1,清屏
						NRF24L01_TxPacket(tmp_buf);//发送一次
					} 									   	  
					LCD_Fill(0,0,239,296,WHITE);//清屏
				}   
			}
			Pen_Point.Key_Reg=0;//清除笔状态	  	 
		}else delay_ms(1);
		i++;
		if(i==200)
		{
			i=0;
			LED0=!LED0;
		}					 			    
	}     
}






⌨️ 快捷键说明

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