STM32F407ZET6遥控电路的设计

STM32F407ZET6遥控电路的设计
1、该设计在主函数里只写了遥控器按键无线控制其他32单片机LED的亮灭,无线收发采用NRF2401模块,外部扩展了6轴MPU6050模块与4针I2C控制的OLED模块,遥感通过32芯片的ADC采集引脚采集遥感不同方向的电压值控制。在这里插入图片描述
2、电路原理图
在这里插入图片描述
在这里插入图片描述

3、程序(基于正点原子实验33 NRF24L01无线通信实验程序修改)
main函数修改

int main(void)
{ 
	u8 key,mode;
	u16 t=0;			 
	u8 tmp_buf[33];	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组二
	delay_init(168);  //初始化延时
	uart_init(115200);	//串口波特率115200
	LED_Init();					//初始LED 
 	LCD_Init();					//LCD初始化 
 	KEY_Init();					//按键初始化
 	NRF24L01_Init();    		//初始化NRF24L01 

 	POINT_COLOR=RED;//设置为红色字体 
	LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");	
	LCD_ShowString(30,70,200,16,16,"NRF24L01 TEST");	
	LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
	LCD_ShowString(30,110,200,16,16,"2014/5/9");
	while(NRF24L01_Check())
	{
		LCD_ShowString(30,130,200,16,16,"NRF24L01 Error");
		delay_ms(200);
		LCD_Fill(30,130,239,130+16,WHITE);
 		delay_ms(200);
	}
	LCD_ShowString(30,130,200,16,16,"NRF24L01 OK"); 	 
 	while(1)
	{	
		key=KEY_Scan(0);
		if(key==KEY0_PRES)//按下K0,为接收模式
		{
			mode=0;   
			break;
		}else if(key==KEY1_PRES)//按下K1,为发送模式
		{
			mode=1;
			break;
		}
		t++;
		if(t==100)LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode  KEY1:TX_Mode"); //闪烁显示提示 
 		if(t==200)
		{	
			LCD_Fill(10,150,230,150+16,WHITE);
			t=0; 
		}
		delay_ms(5);	  
	}   
 	LCD_Fill(10,150,240,166,WHITE);//清空上面显示
 	POINT_COLOR=BLUE;//设置为蓝色字体	   
	if(mode==0)//接收模式
	{
		LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");	
		LCD_ShowString(30,170,200,16,16,"Received DATA:");	
		NRF24L01_RX_Mode();		  
		while(1)
		{	  		    		    				 
			if(NRF24L01_RxPacket(tmp_buf)==0)//显示接收消息
			{
				tmp_buf[32]=0;//加入字符串结束符
				LCD_ShowString(0,190,lcddev.width-1,32,16,tmp_buf);    
							switch(tmp_buf[0])
				{
					case 'A'://接收到A,LED都灭PF2,PF3高电平PF4,PF5低电平
						LED0 = 1;                                                                                                         
						LED1 = 1;
						GPIO_SetBits(GPIOF, GPIO_Pin_2 | GPIO_Pin_3);
						GPIO_ResetBits(GPIOF, GPIO_Pin_4 | GPIO_Pin_5);
//						delay_ms(500);
//						GPIO_ResetBits(GPIOF, GPIO_Pin_2 | GPIO_Pin_3);
						break;
					case 'B':
						LED0 = 1;
						LED1 = 0;
						GPIO_SetBits(GPIOF,  GPIO_Pin_2 | GPIO_Pin_5);
						GPIO_ResetBits(GPIOF, GPIO_Pin_3 | GPIO_Pin_4);
//						delay_ms(100);
//						GPIO_ResetBits(GPIOF, GPIO_Pin_2 | GPIO_Pin_5);
						break;
					case 'C':
						LED0 = 0;
						LED1 = 1;
						GPIO_SetBits(GPIOF, GPIO_Pin_4 | GPIO_Pin_5);
						GPIO_ResetBits(GPIOF, GPIO_Pin_2 | GPIO_Pin_3);
//						delay_ms(500);
//						GPIO_ResetBits(GPIOF, GPIO_Pin_4 | GPIO_Pin_5);
						break;
					case 'D':
						LED0 = 0;
						LED1 = 0;
						GPIO_SetBits(GPIOF, GPIO_Pin_3 | GPIO_Pin_4);
						GPIO_ResetBits(GPIOF, GPIO_Pin_2 | GPIO_Pin_5);
//						delay_ms(100);
//						GPIO_ResetBits(GPIOF, GPIO_Pin_3 | GPIO_Pin_4);
						break;
				}
				
			}
			else 
				delay_us(100);	   
		};	
	}
				else//发送模式
	{							    
		LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");	
		NRF24L01_TX_Mode();
		mode = 0;//有一段延时没有发送则为接收模式
		while(1)
		{	  
			key = KEY_Scan(1);		//获取键值
			if(key)
			{						   
				switch(key)
				{				 
					case WKUP_PRES:	//按下KEY_UP发送A
						mode='A';
						LED0=!LED0;
						break;
					case KEY0_PRES:	
						mode='D';
						LED0=!LED0;
						break;
					case KEY1_PRES:	
						mode='C'; 						
						LED1=!LED1;
						break;
					case KEY2_PRES:	
						mode='B';
						LED0=!LED0;
						LED1=!LED1;
						break;
				}
			}else 
			{
				tmp_buf[0] = mode;
				tmp_buf[31] = 0; //?????		
				if(NRF24L01_TxPacket(tmp_buf) == TX_OK)
				{
					LCD_ShowString(30,170,239,32,16,"Sended DATA:");	
					LCD_ShowString(30,190,lcddev.width-1,32,16,tmp_buf); 
				}
				else
				{										   	
					LCD_Fill(0,170,lcddev.width,170+16*3,WHITE);		   
					LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed "); 
				};
				mode = 0;
				delay_ms(10); 
			}				
		}
	}     	
}

LED函数配置

void LED_Init(void)
{    	 
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOF, &GPIO_InitStructure);
  GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
  GPIO_ResetBits(GPIOF, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);

4、网盘资源
https://pan.baidu.com/s/1v_QLGXJG1jK-urGxwdkNdg
提取码:oevj

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值