1 #include "sys.h" 2 #include "usart.h" 3 #include "delay.h" 4 #include "led.h" 5 #include "key.h" 6 #include "24l01.h" 7 8 int main(void) 9 { 10 u8 tmp_buf[5]={0,0,0,0,0}; 11 Stm32_Clock_Init(9);//系统时钟设置 12 delay_init(72); //延时初始化 13 uart_init(72,9600); //串口1初始化 14 KEY_Init(); //按键初始化 15 LED_Init(); //LED初始化 16 NRF24L01_Init(); //初始化NRF24L01 17 while(NRF24L01_Check())//检测不到24L01 18 { 19 LED1=0; 20 delay_ms(300); 21 LED1=1; 22 delay_ms(300); 23 } 24 TX_Mode(); //设置为发送模式 25 delay_ms(10); 26 while(1) 27 { 28 tmp_buf[1]=0x00; 29 if(KEY0==0) 30 tmp_buf[1]=0x01; 31 else if(KEY1==0) 32 tmp_buf[1]=0x02; 33 else if(KEY2==0) 34 tmp_buf[1]=0x03; 35 else if(KEY3==0) 36 tmp_buf[1]=0x04; 37 else if(KEY4==0) 38 { 39 //按下时 40 tmp_buf[1]=0x05; 41 if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 42 { 43 LED1=0; 44 delay_ms(5); 45 LED1=1; 46 delay_ms(5); 47 tmp_buf[1]=0x00; 48 } 49 while(!KEY4); 50 //松开时 51 tmp_buf[1]=0x15; 52 if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 53 { 54 LED1=0; 55 delay_ms(5); 56 LED1=1; 57 delay_ms(5); 58 tmp_buf[1]=0x00; 59 } 60 } 61 else if(KEY5==0) 62 { 63 //按下时 64 tmp_buf[1]=0x06; 65 if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 66 { 67 LED1=0; 68 delay_ms(5); 69 LED1=1; 70 delay_ms(5); 71 tmp_buf[1]=0x00; 72 } 73 while(!KEY5); 74 //松开时 75 tmp_buf[1]=0x16; 76 if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 77 { 78 LED1=0; 79 delay_ms(5); 80 LED1=1; 81 delay_ms(5); 82 tmp_buf[1]=0x00; 83 } 84 } 85 if(tmp_buf[1]!=0x00) 86 { 87 if(NRF24L01_TxPacket(tmp_buf)==TX_OK) 88 { 89 LED1=0; 90 delay_ms(5); 91 LED1=1; 92 delay_ms(5); 93 tmp_buf[1]=0x00; 94 } 95 } 96 } 97 98 } 99 100 101
跪求大神帮我解释一下程序大概执行的意思
一大堆哪里知道程序是干嘛的.
猜测是用来维护几个按钮的状态的.
tmp_buf这个数组应该就是用来保存按钮状态.然后发送出去的
这个程序是实现无线鼠标的通信的,只不过我不清楚它是如何执行的,所以想请教一下,如何程序执行的,如何实现无线鼠标的通信
@唯爱霞: 看他那样子.就是不停的将鼠标的状态发送的出去而已.这种做法很耗电的.肯定是随便写的.
正经的情况还有好多要考虑的情况.比如如果静止一段时间就要进入休眠状态.
至于通讯代码肯定在NRF24L01_TxPacket里面
@吴瑞祥: 确实是随便弄的,板子都是随便做的,主要是欺负我看不懂,所以我才来咨询大家的
@唯爱霞: 所以新人入行有同事好也不好..我当时就是自己一个人做.就没这些事.自己想怎么做就怎么做.
@吴瑞祥: 请问一下,这里面的像ox00,ox01之类的,是单纯意义上的赋值吗
tmp_buf[1]=0x00; if(KEY0==0) tmp_buf[1]=0x01; else if(KEY1==0) tmp_buf[1]=0x02; else if(KEY2==0) tmp_buf[1]=0x03; else if(KEY3==0) tmp_buf[1]=0x04;
@唯爱霞: 是的...就是赋值而已.这段代码就是将鼠标当前的状态(几个按键是否处于按下状态.)保存到tmp_buf数组里.
然后把tmp_buf发送出去.
@吴瑞祥: 好的,谢谢
@吴瑞祥: 请问一下,这句话怎么去解释,是不是如果NRF24L01发射成功的话
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
@唯爱霞: 猜是的
@吴瑞祥: 好的,能解释一下这句话意思吗
while(!KEY5); //松开时 tmp_buf[1]=0x16;
OX16换成二进制不是0001 0110吗?在按键中怎么去实现?下面是按键的标注
#define KEY0 PBin(14) //上 #define KEY1 PBin(11) //下 #define KEY2 PBin(12) //左 #define KEY3 PBin(13) //右 #define KEY4 PAin(8) //左击 #define KEY5 PBin(15) //右击 void KEY_Init(void);//IO初始化 u8 KEY_Scan(void); //按键扫描函数 #endif
@唯爱霞: 就是PBin(15)没你想的那么复杂.
OX16换成二进制不是0001 0110吗?在按键中怎么去实现
并不是这个思路.是右键按下的时候他给数组的第二个数赋值0x16 然后电脑上接到之后第二数是0x16就是按下了右键.应该只是一种约定
@吴瑞祥: 好的,谢谢你耐心的解答
@吴瑞祥: 那之前我提问的像OX00,OX01之类,也应该是按接下来你说的这种思路来解释吧,而并非是我所理解的换成二进制吧
@唯爱霞: 是的.所以我说他这个代码是随便写的..正经不会这么干的.
@吴瑞祥:谢谢解惑,没办法谁让我不懂呢
数组初始化
好的,谢谢