标题:
CC1101主从机 收发 绑定 源程序
[打印本页]
作者:
shaoyuanfu
时间:
2019-10-7 14:26
标题:
CC1101主从机 收发 绑定 源程序
工程采用KEIL4环境。采用国产51芯片。主机长按绑定键后进入绑定状态,此时显示会闪烁提示。当从机上也长按绑定键时,从机会将芯片的UID码发送给主机。主机收到UID码后保存到主机的FALSH中实现掉电保存,完成绑定。显示器变为常亮。
后期主机发送数据串时会连同UID一起发送。从机只有收到了和自己UID相匹配的数据时才解析。本样例中是主机控制从机三个继电器。
0.png
(9.04 KB, 下载次数: 42)
下载附件
2019-10-7 15:49 上传
单片机源程序如下:
#ifndef _MAIN_C_
#define _MAIN_C_
/*********************************************************************************************************************/
#include "ca51f_config.h"
#include "ca51f2sfr.h"
#include "ca51f2xsfr.h"
#include "gpiodef_f2.h"
#include "system.h"
#include "uart.h"
#include "irc.h"
#include "key.h"
#include "timer.h"
#include "uid.h"
#include "adc.h"
#include "delay.h"
#include "exint.h"
#include "pwm.h"
#include "gpio.h"
#include "co2.h"
#include "led.h"
#include "flash.h"
#include "process.h"
#include "wdt.h"
#include"cc1101.h"
#include <intrins.h>
#define data_len 8
extern xdata char light_time;
extern xdata unsigned char FLZ_TIME,MOT_TIME;
extern char i,j;
extern unsigned int M_speed,F_speed;
unsigned char IRC_KEY_VOLUE;
xdata char wind_leve=1,SART_FLAG=0,WORK_MOD=0,WORK_TIME=0;
unsigned int CO2;
extern unsigned int FANG_pluse;
extern unsigned int works_time;
extern xdata int CO2_VOLUE;
extern char time_flag;
extern xdata unsigned int detection_time;
char CO2_falg=0;
extern code unsigned char num[10];
extern xdata unsigned char error;
unsigned char lw_static=3;
extern signed int temperature;
extern xdata unsigned char co2_error;
extern char Voltage_P;
xdata unsigned char rx_buffer[data_len]={0,0,0,0,0,0,0,0};//rx data
xdata unsigned char Tx_SUID[data_len]={0,0,0,0,0,0,0,0};
xdata unsigned char binding[data_len]={0xfe,0xbb,0,0,0,0,0xff,0xEF};
xdata unsigned char binding_flag;
extern xdata char tx_cc1101;
extern xdata char binding_EN;
extern char flash_write_en;
xdata unsigned char flash_read_buff[11]={0}; //用于读写FLASH中间缓存
xdata start_time=0;
void main(void)
{
// unsigned long int UID;
PADRD = FLASH_SIZE*4 - 1; //划分FLASH最后256字节为数据空间,注意:不同型号芯片FLASH容量不同,定义的FLASH_SIZE也不同,应用时要根据实际FLASH容量定义
// LCD_LED_WriteLram(4,lw_static);
Timer0_init();
Timer1_init();
#ifdef UART0_EN
Uart0_Initial(UART0_BAUTRATE);
#endif
#ifdef UART1_EN
Uart1_Initial(UART1_BAUTRATE);
#endif
#ifdef UART2_EN
Uart2_Initial(UART2_BAUTRATE);
#endif
EA = 1;
// UID=Read_32bit_UID();
#ifdef PRINT_EN
// uart_printf("Remote control example!\n");
// Delay_ms(200);
// uart_printf ("UID = %ld\n",UID); //打印UID?
Delay_ms(200);
#endif
ADC_init();
INT0_init();
INT2_init();
//LED_init(LEN_IRCH,COM_L,COM_L,7,30);
IO_init();
ADC_read_AD4();
Delay_ms(200);
ADC_read_AD5();
Delay_ms(200);
BELL=0;
SYEN=1;
FLZ=0;
light_time=0;
read_co2();
// LCD_RamCo2();
PWM_init();
Delay_ms(200);
LED_init(LEN_IRCH,COM_L,COM_L,7,30);
LCD_RamAll();
Delay_ms(1000);
LCD_RamClear();
IRC_init();
CC1101_Init(); //无线模块初始化
WDT_init(WDTS_IRCH,WDRE_int,0x708); //看门狗初始化
Data_Area_Mass_Read(0,binding,8);
lw_static= Data_Area_Read_Byte(8);
CO2_VOLUE= Data_Area_Read_Byte(9)*256+Data_Area_Read_Byte(10);
// CO2_VOLUE=
// PWM_set(12);
while(1){
WDT_FeedDog(); //喂狗
if(j>45&& SART_FLAG!=0)
{
if (co2_error==1)
error=1;
else if(F_speed==0)
error=2;
else if(M_speed==0)
error =5;
else if(temperature<-20 || temperature>60)
error =3;
else
error =0;
ADC_read_AD4();
Delay_ms(10);
j=0;
}
process_IRC(); //遥控功能
WDT_FeedDog(); //喂狗
process_timer(); //定时功能
if(SART_FLAG!=0) //运行状态
{
proecss_lw(); //滤网功能
proecss_light(); //显示背光功能
WDT_FeedDog(); //喂狗
proecss_FLZ(); //负离子功能
if(start_time>8)
process_co2();
proecss_MOTO();
process_err();
process_flash();
if(detection_time==5)
{
ADC_read_AD5();
PWM_set(12);
Delay_ms(3000);
if(F_speed<1000)
{
lw_static=1; LCD_LED_WriteLram(2,((LCD_LED_ReadLram(2)&0xfc)|0x02)); LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)&0xfb); }
else if(F_speed<2000)
{
lw_static=2;LCD_LED_WriteLram(2,(LCD_LED_ReadLram(2)|0x03)); LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)&0xfb); }
else
{
lw_static=3;LCD_LED_WriteLram(2,(LCD_LED_ReadLram(2)|0x03)); LCD_LED_WriteLram(0,LCD_LED_ReadLram(0)|0x04); }
// Data_Area_Sector_Erase(0); //擦除数据扇区0
// Data_Area_Write_Byte(0,lw_static);
detection_time=0;
flash_write_en=1;
}
proecss_cc1101();
}
else //停止时
{
FLZ=0; //负离子关
LCD_RamClear();
Delay_ms(200);
wind_leve=0;
PWM_set(0);
WORK_MOD=0;
}
}
}
#endif
复制代码
所有资料51hei提供下载:
CC1101从机.zip
(162.1 KB, 下载次数: 34)
2019-10-7 14:10 上传
点击文件名下载附件
下载积分: 黑币 -5
cc1101 主机.zip
(401.95 KB, 下载次数: 31)
2019-10-7 14:18 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1