cc1101发射程序及相关电路图.docx
- 文档编号:10090173
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:39
- 大小:56.75KB
cc1101发射程序及相关电路图.docx
《cc1101发射程序及相关电路图.docx》由会员分享,可在线阅读,更多相关《cc1101发射程序及相关电路图.docx(39页珍藏版)》请在冰豆网上搜索。
cc1101发射程序及相关电路图
相关电路
//发送模块
/*流程:
通过3个KeyCode键设定待发送数据
并在数码管显示,按下KeyTransmit键发送数据*/
#include
#include
#include
#include
#include
voidmain()
{
intGe,Shi,Bai;
intCode;
UCHARtf=0;
UCHARTxBuf[8]={0};//8字节,如果需要更长的数据包,请正确设置
CpuInit();
POWER_UP_RESET_CC1100();
halRfWriteRfSettings();
halSpiWriteBurstReg(CCxxx0_PATABLE,PaTabel,8);
halRfSendPacket(TxBuf,8);//TransmitTxbufferdata
delay(6000);
while
(1)
{
LED=1;
Code=Bai*100+Shi*10+Ge;
Display(Code);
if(!
KeyTransmit)
{
Delaynms(15);
if(!
KeyTransmit)//发送数据
{
LED=0;
Display(Code);
TxBuf[0]=Ge;
TxBuf[1]=Shi;
TxBuf[2]=Bai;
tf=1;
while(!
KeyTransmit);
}
}
if(!
KeyCode0)//密码百位设置
{
Delaynms(15);
if(!
KeyCode0)
{
while(!
KeyCode0);
LED=0;
Bai++;
if(Bai==10)
Bai=0;
}
}
if(!
KeyCode1)//密码十位设置
{
Delaynms(15);
if(!
KeyCode1)
{
while(!
KeyCode1);
LED=0;
Shi++;
if(Shi==10)
Shi=0;
}
}
if(!
KeyCode2)//密码个位设置
{
Delaynms(15);
if(!
KeyCode2)
{
while(!
KeyCode2);
LED=0;
Ge++;
if(Ge==10)
Ge=0;
}
}
if(tf)
{
halRfSendPacket(TxBuf,8);//TransmitTxbufferdata
TxBuf[0]=0xff;//发送完毕,清除
TxBuf[1]=0xff;
TxBuf[2]=0xff;
TxBuf[3]=0xff;
TxBuf[4]=0xff;
TxBuf[5]=0xff;
TxBuf[6]=0xff;
TxBuf[7]=0xff;
tf=0;
delay(500);
}
}
}
#ifndef_MAIN_H_
#define_MAIN_H_
#include
#include
#defineUCHARunsignedchar
#defineUINTunsignedint
UCHARt_count=0;
UCHARADC_Result=0;
#defineRoom_Temp0x0140//30℃下的ADC0值
#defineOFFSET0x0005//设置与正常温度的偏差值
sbitKeyCode0=P3^1;
sbitKeyCode1=P3^2;
sbitKeyCode2=P3^3;
sbitKeyTransmit=P3^4;
sbitLED=P2^6;//指示灯
/**************************************************
函数功能:
延时函数:
延时nms
入口参数:
yms
***************************************************/
voidDelaynms(UINTy)
{
UINTx;
for(;y>0;y--)
for(x=110;x>0;x--);
}
#endif
#ifndef_MAIN_H_
#define_MAIN_H_
#include
#include
#defineUCHARunsignedchar
#defineUINTunsignedint
UCHARt_count=0;
UCHARADC_Result=0;
#defineRoom_Temp0x0140//30℃下的ADC0值
#defineOFFSET0x0005//设置与正常温度的偏差值
sbitKeyCode0=P3^1;
sbitKeyCode1=P3^2;
sbitKeyCode2=P3^3;
sbitKeyTransmit=P3^4;
sbitLED=P2^6;//指示灯
/**************************************************
函数功能:
延时函数:
延时nms
入口参数:
yms
***************************************************/
voidDelaynms(UINTy)
{
UINTx;
for(;y>0;y--)
for(x=110;x>0;x--);
}
#endif
#ifndef_MAIN_H_
#define_MAIN_H_
#include
#include
#defineUCHARunsignedchar
#defineUINTunsignedint
UCHARt_count=0;
UCHARADC_Result=0;
#defineRoom_Temp0x0140//30℃下的ADC0值
#defineOFFSET0x0005//设置与正常温度的偏差值
sbitKeyCode0=P3^1;
sbitKeyCode1=P3^2;
sbitKeyCode2=P3^3;
sbitKeyTransmit=P3^4;
sbitLED=P2^6;//指示灯
/**************************************************
函数功能:
延时函数:
延时nms
入口参数:
yms
***************************************************/
voidDelaynms(UINTy)
{
UINTx;
for(;y>0;y--)
for(x=110;x>0;x--);
}
#endif
/***************数码管显示部分*******************
***filetype:
Cfile
***functions:
使相应的数码管显示要显示的内容
***coder:
RuJian
***date:
2011.2.1
*************************************************/
#ifndef_DISPLAY_H_
#define_DISPLAY_H_
#include"main.h"
sbitCLK1=P0^6;
sbitDIN1=P0^7;
sbitCLK2=P1^0;
sbitDIN2=P1^1;
UCHARcodeSeg_data[]={0x3F,0x06,0x5B,0x4f,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//段码"0-9"
UCHARcodeCs_data[]={0x07,0x0B,0x0D,0x0E,0x0F};//共阴数码管,位码选择"0-3"
//发送段码
voidSend_byte(UCHARbyte)
{
UCHARnum,i;
num=Seg_data[byte];
for(i=0;i<8;i++)
{
CLK1=0;_nop_();_nop_();_nop_();_nop_();
DIN1=num&0x01;_nop_();_nop_();_nop_();_nop_();
CLK1=1;_nop_();_nop_();_nop_();_nop_();
num>>=1;
}
}
//发送位码
voidSend_cs(UCHARcs)
{
UCHARnum,i;
num=Cs_data[cs];
for(i=0;i<4;i++)
{
CLK2=0;_nop_();_nop_();_nop_();_nop_();
DIN2=num&0x01;_nop_();_nop_();_nop_();_nop_();
CLK2=1;_nop_();_nop_();_nop_();_nop_();
num>>=1;
}
}
voidDisplay(intNum)
{
intGe,Shi,Bai;
Ge=Num%10;
Shi=(Num%100)/10;
Bai=Num/100;
Send_byte(Ge);//每次先送段选,再送位选,延时后关闭位选,以防止余影出现
Send_cs(0);
Delaynms
(1);
Send_cs(4);
Send_byte(Shi);
if(Bai==0&&Shi==0)
Send_cs(4);
else
{
Send_cs
(1);
Delaynms
(1);
Send_cs(4);
}
Send_byte(Bai);
if(Bai==0)
Send_cs(4);
else
{
Send_cs
(2);
Delaynms
(2);
Send_cs(4);
}
}
#endif
/*****************ADC转换部分*******************
***filetype:
Cfile
***functions:
启动ADC转换,得到环境温度值
***coder:
RuJian
***date:
2011.1.20
*************************************************/
#ifndef_ADC_H_
#define_ADC_H_
#include"main.h"
sfr16ADC0=0xBD;
/*****************温度计算公式*******************
******V(temp)=3.35*TEMP(c)+897mV********
**************************************************
*****常温25℃下ADC0值为0x014E,以此为基准********
*****可计算ADC0为其他值时的温度值********
*************************************************/
intADC_temp(void)
{
AD0BUSY=1;//开启AD转换
while(AD0INT!
=1);//等待转换结束
AD0INT=0;
if(ADC0>Room_Temp)
{
ADC_Result=ADC0-Room_Temp;
}
else
{
ADC_Result=Room_Temp-ADC0;//当时温度减去设定的最大偏差值
}
returnADC_Result;
}
/*****************24C01存储部分*****************
***filetype:
Cfile
***functions:
读写EEPROM,保存有密码
***coder:
RuJian
***date:
2011.1.26
**************************************************/
#ifndef_AT24C02_H_
#define_AT24C02_H_
#include"main.h"
sbitSDA=P2^1;
sbitSCL=P2^0;
/*发送起始条件*/
voidStart(void)/*起始条件*/
{
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
voidStop(void)/*停止条件*/
{
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
}
voidAck(void)/*应答位*/
{
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
voidNoAck(void)/*反向应答位*/
{
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
voidSend(UCHARData)/*发送数据子程序,Data为要求发送的数据*/
{
UCHARBitCounter=8;/*位数控制*/
UCHARtemp;/*中间变量控制*/
do
{
temp=Data;
SCL=0;_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)/*如果最高位是1*/
SDA=1;
else
SDA=0;
SCL=1;
temp=Data<<1;/*RLC*/
Data=temp;
BitCounter--;
}while(BitCounter);
SCL=0;
}
UCHARRead(void)/*读一个字节的数据,并返回该字节值*/
{
UCHARtemp=0;
UCHARtemp1=0;
UCHARBitCounter=8;
SDA=1;
do{
SCL=0;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
if(SDA)/*如果SDA=1;*/
temp=temp|0x01;/*temp的最低位置1*/
else
temp=temp&0xfe;/*否则temp的最低位清0*/
if(BitCounter-1)
{temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}while(BitCounter);
return(temp);
}
/*将数据Data写入地址为Address开始的Num个字节的数据*/
voidWrToROM(UCHARData[],UCHARAddress,UCHARNum)
{
UCHARi=0;
UCHAR*PData;
PData=Data;
Start();
Send(0xAE);//0xAE表示对从器件进行写操作
Ack();
Send(Address);
Ack();
for(i=0;i { Send(*(PData+i)); Ack(); } Stop(); } /*从地址Address开始依次读取Num个字节的数据到Data中*/ voidRdFromROM(UCHARData[],UCHARAddress,UCHARNum) { UCHARi=0; UCHAR*PData; PData=Data; for(i=0;i { Start(); Send(0xAE);//伪写指令 Ack(); Send(Address+i); Ack(); Start(); Send(0xAF);//0xAF表示对从器件进行读操作 Ack(); *(PData+i)=Read(); SCL=0; NoAck(); Stop(); } } #ifndef_CC1101_H_ #define_CC1101_H_ #defineWRITE_BURST0x40//连续写入 #defineREAD_SINGLE0x80//读 #defineREAD_BURST0xC0//连续读 #defineBYTES_IN_RXFIFO0x7F//接收缓冲区的有效字节数 #defineCRC_OK0x80//CRC校验通过位标志 //***********************************CC1100接口************************************************* sbitGDO0=P0^4; sbitGDO2=P0^5; sbitSCK=P0^0; sbitMISO=P0^1; sbitMOSI=P0^2; sbitCSN=P0^3; //***********************************按键******************************************************** //sbitKEY1=P0^0; //sbitKEY2=P0^1; //***********************************数码管位选************************************************** //sbitled3=P2^0; //sbitled2=P2^1; //sbitled1=P2^2; //sbitled0=P2^3; //***********************************蜂鸣器******************************************************* //sbitBELL=P3^4; //***************更多功率参数设置可详细参考DATACC1100英文文档中第48-49页的参数表****************** //UCHARPaTabel[8]={0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04};//-30dBm功率最小 UCHARPaTabel[8]={0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60};//0dBm //UCHARPaTabel[8]={0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};//10dBm功率最大 //*********************************************************************************************** voidSpiInit(void); voidCpuInit(void); voidRESET_CC1100(void); voidPOWER_UP_RESET_CC1100(void); voidhalSpiWriteReg(UCHARaddr,UCHARvalue); voidhalSpiWriteBurstReg(UCHARaddr,UCHAR*buffer,UCHARcount); voidhalSpiStrobe(UCHARstrobe); UCHARhalSpiReadReg(UCHARaddr); voidhalSpiReadBurstReg(UCHARaddr,UCHAR*buffer,UCHARcount); UCHARhalSpiReadStatus(UCHARaddr); voidhalRfWriteRfSettings(void); voidhalRfSendPacket(UCHAR*txBuffer,UCHARsize); UCHARhalRfReceivePacket(UCHAR*rxBuffer,UCHAR*le
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cc1101 发射 程序 相关 电路图