|
工程采用KEIL4環(huán)境。采用國產(chǎn)51芯片。主機(jī)長按綁定鍵后進(jìn)入綁定狀態(tài),此時(shí)顯示會(huì)閃爍提示。當(dāng)從機(jī)上也長按綁定鍵時(shí),從機(jī)會(huì)將芯片的UID碼發(fā)送給主機(jī)。主機(jī)收到UID碼后保存到主機(jī)的FALSH中實(shí)現(xiàn)掉電保存,完成綁定。顯示器變?yōu)槌A痢?br />
后期主機(jī)發(fā)送數(shù)據(jù)串時(shí)會(huì)連同UID一起發(fā)送。從機(jī)只有收到了和自己UID相匹配的數(shù)據(jù)時(shí)才解析。本樣例中是主機(jī)控制從機(jī)三個(gè)繼電器。
0.png (9.04 KB, 下載次數(shù): 42)
下載附件
2019-10-7 15:49 上傳
單片機(jī)源程序如下:
- #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字節(jié)為數(shù)據(jù)空間,注意:不同型號(hào)芯片F(xiàn)LASH容量不同,定義的FLASH_SIZE也不同,應(yīng)用時(shí)要根據(jù)實(shí)際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(); //定時(shí)功能
-
- if(SART_FLAG!=0) //運(yùn)行狀態(tài)
- {
- proecss_lw(); //濾網(wǎng)功能
- proecss_light(); //顯示背光功能
- WDT_FeedDog(); //喂狗
- proecss_FLZ(); //負(fù)離子功能
- 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); //擦除數(shù)據(jù)扇區(qū)0
- // Data_Area_Write_Byte(0,lw_static);
- detection_time=0;
- flash_write_en=1;
- }
- proecss_cc1101();
-
- }
- else //停止時(shí)
- {
- FLZ=0; //負(fù)離子關(guān)
- LCD_RamClear();
- Delay_ms(200);
- wind_leve=0;
- PWM_set(0);
- WORK_MOD=0;
- }
-
-
-
-
- }
- }
- #endif
復(fù)制代碼
所有資料51hei提供下載:
CC1101從機(jī).zip
(162.1 KB, 下載次數(shù): 34)
2019-10-7 14:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
cc1101 主機(jī).zip
(401.95 KB, 下載次數(shù): 31)
2019-10-7 14:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|