找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2008|回复: 0
收起左侧

CC1101主从机 收发 绑定 源程序

[复制链接]
ID:449458 发表于 2019-10-7 14:26 | 显示全部楼层 |阅读模式
工程采用KEIL4环境。采用国产51芯片。主机长按绑定键后进入绑定状态,此时显示会闪烁提示。当从机上也长按绑定键时,从机会将芯片的UID码发送给主机。主机收到UID码后保存到主机的FALSH中实现掉电保存,完成绑定。显示器变为常亮。
后期主机发送数据串时会连同UID一起发送。从机只有收到了和自己UID相匹配的数据时才解析。本样例中是主机控制从机三个继电器。

0.png

单片机源程序如下:
  1. #ifndef _MAIN_C_
  2. #define _MAIN_C_

  3. /*********************************************************************************************************************/
  4. #include "ca51f_config.h"
  5. #include "ca51f2sfr.h"
  6. #include "ca51f2xsfr.h"
  7. #include "gpiodef_f2.h"
  8. #include "system.h"
  9. #include "uart.h"
  10. #include "irc.h"
  11. #include "key.h"
  12. #include "timer.h"
  13. #include "uid.h"
  14. #include "adc.h"
  15. #include "delay.h"
  16. #include "exint.h"
  17. #include "pwm.h"
  18. #include  "gpio.h"
  19. #include "co2.h"
  20. #include "led.h"
  21. #include "flash.h"
  22. #include "process.h"
  23. #include "wdt.h"
  24. #include"cc1101.h"
  25. #include <intrins.h>
  26. #define data_len 8
  27. extern xdata char light_time;
  28. extern xdata unsigned char FLZ_TIME,MOT_TIME;
  29. extern char i,j;
  30. extern unsigned int M_speed,F_speed;
  31. unsigned char IRC_KEY_VOLUE;
  32. xdata char wind_leve=1,SART_FLAG=0,WORK_MOD=0,WORK_TIME=0;
  33. unsigned int CO2;
  34. extern unsigned int FANG_pluse;
  35. extern unsigned int works_time;
  36. extern xdata int CO2_VOLUE;
  37. extern char time_flag;
  38. extern xdata unsigned int detection_time;
  39. char CO2_falg=0;        
  40. extern code unsigned char num[10];
  41. extern xdata unsigned char error;
  42. unsigned char lw_static=3;
  43. extern signed int   temperature;
  44. extern xdata unsigned char co2_error;
  45. extern char Voltage_P;   
  46. xdata unsigned char rx_buffer[data_len]={0,0,0,0,0,0,0,0};//rx data
  47. xdata unsigned  char Tx_SUID[data_len]={0,0,0,0,0,0,0,0};
  48. xdata unsigned char  binding[data_len]={0xfe,0xbb,0,0,0,0,0xff,0xEF};
  49. xdata unsigned char binding_flag;
  50. extern xdata char tx_cc1101;
  51. extern xdata char binding_EN;
  52. extern char flash_write_en;               
  53. xdata unsigned char flash_read_buff[11]={0};                               //用于读写FLASH中间缓存
  54. xdata start_time=0;
  55. void main(void)
  56. {
  57.         
  58. //         unsigned long int UID;
  59.          PADRD        = FLASH_SIZE*4 - 1;                //划分FLASH最后256字节为数据空间,注意:不同型号芯片FLASH容量不同,定义的FLASH_SIZE也不同,应用时要根据实际FLASH容量定义
  60.          
  61.          
  62. //        LCD_LED_WriteLram(4,lw_static);
  63.         Timer0_init();
  64.         Timer1_init();
  65. #ifdef UART0_EN
  66.         Uart0_Initial(UART0_BAUTRATE);
  67. #endif
  68. #ifdef UART1_EN
  69.         Uart1_Initial(UART1_BAUTRATE);
  70. #endif
  71. #ifdef UART2_EN
  72.         Uart2_Initial(UART2_BAUTRATE);
  73. #endif

  74.         EA = 1;
  75. //    UID=Read_32bit_UID();
  76. #ifdef PRINT_EN
  77. //        uart_printf("Remote control example!\n");
  78. //        Delay_ms(200);
  79. //        uart_printf ("UID = %ld\n",UID);                //打印UID?
  80.         Delay_ms(200);
  81. #endif
  82.         ADC_init();
  83.         INT0_init();
  84.         INT2_init();
  85.           //LED_init(LEN_IRCH,COM_L,COM_L,7,30);
  86.         IO_init();
  87.         ADC_read_AD4();
  88.         Delay_ms(200);
  89.         ADC_read_AD5();
  90.         Delay_ms(200);
  91.         BELL=0;
  92.         SYEN=1;
  93.         FLZ=0;
  94.         light_time=0;
  95.   read_co2();
  96. //        LCD_RamCo2();
  97.         PWM_init();
  98.         Delay_ms(200);
  99.         LED_init(LEN_IRCH,COM_L,COM_L,7,30);
  100.         LCD_RamAll();
  101.         Delay_ms(1000);
  102.         LCD_RamClear();
  103.         IRC_init();
  104.         CC1101_Init();                                                   //无线模块初始化
  105.         WDT_init(WDTS_IRCH,WDRE_int,0x708);                                              //看门狗初始化
  106.         Data_Area_Mass_Read(0,binding,8);
  107.         lw_static= Data_Area_Read_Byte(8);
  108.    CO2_VOLUE= Data_Area_Read_Byte(9)*256+Data_Area_Read_Byte(10);
  109.         // CO2_VOLUE=
  110. //        PWM_set(12);
  111.         while(1){
  112.                     WDT_FeedDog();                                                                                         //喂狗
  113.                          if(j>45&& SART_FLAG!=0)
  114.                         {         
  115.                     if (co2_error==1)
  116.                            error=1;
  117.                            else if(F_speed==0)
  118.                            error=2;
  119.                            else if(M_speed==0)
  120.                            error =5;
  121.                            else if(temperature<-20 || temperature>60)
  122.                             error =3;
  123.                                 else
  124.                                 error =0;
  125.                           ADC_read_AD4();        
  126.                           Delay_ms(10);
  127.                                 j=0;
  128.                   }

  129.        process_IRC();                                                             //遥控功能
  130.                          WDT_FeedDog();                                                                                           //喂狗
  131.        process_timer();                                                                       //定时功能
  132.          
  133.            if(SART_FLAG!=0)                                                                                           //运行状态
  134.             {
  135.                      proecss_lw();                                                                 //滤网功能
  136.                             proecss_light();                                             //显示背光功能
  137.                                  WDT_FeedDog();                                                                             //喂狗
  138.                            proecss_FLZ();                                                           //负离子功能
  139.                                  if(start_time>8)
  140.                          process_co2();
  141.                            proecss_MOTO();
  142.                            process_err();                                                                                    
  143.          process_flash();               
  144.                 if(detection_time==5)
  145.                  {  
  146.                            ADC_read_AD5();         
  147.                      PWM_set(12);
  148.                      Delay_ms(3000);
  149.                          if(F_speed<1000)
  150.                    {
  151.         lw_static=1; LCD_LED_WriteLram(2,((LCD_LED_ReadLram(2)&0xfc)|0x02)); LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)&0xfb); }
  152.                     else if(F_speed<2000)
  153.                          {
  154.          lw_static=2;LCD_LED_WriteLram(2,(LCD_LED_ReadLram(2)|0x03));  LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)&0xfb); }  
  155.                         else
  156.                         {
  157.          lw_static=3;LCD_LED_WriteLram(2,(LCD_LED_ReadLram(2)|0x03)); LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)|0x04); }
  158.                       // Data_Area_Sector_Erase(0);                //擦除数据扇区0
  159.                // Data_Area_Write_Byte(0,lw_static);
  160.                     detection_time=0;
  161.                           flash_write_en=1;                        
  162.      }
  163.                          proecss_cc1101();
  164.                         
  165.            }
  166.            else                                                                                                                //停止时
  167.                      {
  168.                             FLZ=0;                                                                                           //负离子关
  169.                                   LCD_RamClear();
  170.                                   Delay_ms(200);
  171.                                   wind_leve=0;
  172.                                   PWM_set(0);
  173.           WORK_MOD=0;
  174.                         }
  175.                         
  176.             
  177.                
  178.         
  179.         }
  180. }
  181. #endif
复制代码

所有资料51hei提供下载:
CC1101从机.zip (162.1 KB, 下载次数: 34)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表