单片机型号为stc12c5a60s2
温度传感器为DS18B20
无线传输为NRF24L01
温度显示LCD1602
单片机源程序如下:
#include #include #include "DELAY.h" #include "NRF24L01.h" #include "LCD1602.h" #include "DS18B20.h" void main(void) { int temp,intt,dect; unsigned char temp_buf[16]={0}; EA=1; LCD_Init(); //LCD1602初始化 Start18B20(); //配置DS18B20 P23=0; while(1) { temp=Get18B20Temp(); //读取温度 if(temp>0) { intt=temp>>4; //分理出整数部分 dect=temp&0xf; //分理出小数部分 intt=intt*16*0.0625; //处理整数部分 dect=(dect*10)/16; //处理小数部分 sprintf(temp_buf,"Temp now:%2d.%d^C",intt,dect);//把温度转化为字符串temp_buf NRF24L01_Init_TX(0); //配置NRF24L01的通道0 CE=0; SPI_Write_Reg(WRITE_REG + RF_CH,40); ////设置RF通道为40 CE=1; nRF24L01_TxPacket(temp_buf); //发送temp_buf中数 delay_ms(5); LCD_ShowString(0,0,"Mode:launching "); LCD_ShowString(1,0,temp_buf); //LCD1602显示温度 delay_ms(5); } } } 复制代码 #include #include #include "NRF24L01.H" uchar xdata RX_ADDRESS0[TX_ADR_WIDTH]={0x30,0xE6,0x45,0x82,0x7E}; //通道0地址 uchar xdata RX_ADDRESS1[TX_ADR_WIDTH]={0xC2,0x49,0x49,0x49,0x49}; //通道1地址 uchar xdata RX_ADDRESS2[TX_ADR_WIDTH]={0x94,0x49,0x49,0x49,0x49}; //通道2地址 uchar xdata RX_ADDRESS3[TX_ADR_WIDTH]={0x33,0x49,0x49,0x49,0x49}; //通道3地址 uchar xdata RX_ADDRESS4[TX_ADR_WIDTH]={0x00,0x49,0x49,0x49,0x49}; //通道4地址 uchar xdata RX_ADDRESS5[TX_ADR_WIDTH]={0x24,0x49,0x49,0x49,0x49}; //通道5地址 uchar xdata *pipe_add[6] = {RX_ADDRESS0,RX_ADDRESS1,RX_ADDRESS2,RX_ADDRESS3,RX_ADDRESS4,RX_ADDRESS5};//所有通道地址的集合 /**********************************RNF24L01状态标志位************************************************/ uchar bdata sta; sbit RX_DR =sta^6; sbit TX_DS =sta^5; sbit MAX_RT =sta^4; /********************************************************************************************* 函数名:毫秒级CPU延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 /*********************************************************************************************/ void Delayms (uint a) { uint i; while( --a != 0) { for(i = 0; i < 600; i++); } } /*********************************************************************************************/ /*************************************************************************** 函数名称:uchar SPI_RW(uchar dat) 函数功能:NRF24L01的SPI时序 函数备注:Writes one byte to nRF24L01, and return the byte read from nRF24L01 during write ***************************************************************************/ uchar SPI_RW(uchar dat) { uchar i; for(i=8;i>0;i--) { dat <<= 1; MOSI = CY; SCK = 1; dat |= MISO; SCK = 0; } return(dat); } /*************************************************************************** 函数名称:uchar SPI_Read(uchar cmd_reg) 函数功能:NRF24L01的SPI读时序 函数备注: ***************************************************************************/ //uchar SPI_Read(uchar cmd_reg) //{ // uchar value; // // CSN = 0; // SPI_RW(cmd_reg); // value = SPI_RW(0); // CSN = 1; // // return(value); //} /*************************************************************************** 函数名称:void SPI_Write_Reg(uchar cmd_reg, uchar value) 函数功能:写入NRF24L01寄存器 函数备注: ***************************************************************************/ void SPI_Write_Reg(uchar cmd_reg, uchar value) { CSN = 0; SPI_RW(cmd_reg); SPI_RW(value); CSN = 1; } /*************************************************************************** 函数名称:uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num) 函数功能:从NRF24L01寄存器中读出数据 函数备注:reg:为寄存器地址,pBuf:为待读出数据地址,uchar:读出数据的个数 ***************************************************************************/ //uchar SPI_Read_Buf(uchar cmd_reg, uchar *pBuf, uchar num) //{ // uchar status,i; // // CSN = 0; // status = SPI_RW(cmd_reg); // for(i=0;i // CSN = 1; // // return(status); //} /*************************************************************************** 函数名称:void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num) 函数功能:在NRF24L01寄存器中写入数据 函数备注:reg:为寄存器地址,pBuf:为待写入数据地址,uchar:写入数据的个数 ***************************************************************************/ void SPI_Write_Buf(uchar cmd_reg, uchar *pBuf, uchar num) { uchar i; CSN = 0; //SPI使能 SPI_RW(cmd_reg); for(i=0; i CSN = 1; //关闭SPI } /*************************************************************************** 函数名称:uchar nRF24L01_RxPacket(uchar* rx_buf) 函数功能:数据读取后放入rx_buf接收缓冲区中 函数备注: ***************************************************************************/ //uchar nRF24L01_RxPacket(uchar* rx_buf) //{ // uchar flag; // CE = 1; //很重要!启动接收! // Delayms(1); // sta=SPI_Read(READ_REG+STATUS); // 读取状态寄存其来判断数据接收状况 //寄存器前面要加是读还是写 // if(RX_DR) // 判断是否接收到数据 如果置1则说明接到数据并且放置在接收缓存器
上一篇:基于51的IIC通讯原理及协议详解(I2C)
下一篇:4位共阴极数码管秒表设计仿真与程序
推荐阅读最新更新时间:2024-11-13 20:09
设计资源 培训 开发板 精华推荐
- NCP1294 反激、升压、正向 PWM 控制器的典型应用电路
- 使用 ON Semiconductor 的 CS8321 的参考设计
- 用于工业应用的 C8051F065 MCU 的 C8051F064EK、8051 开发系统
- 墨水屏时钟2.0
- 具有正电源的 LT3091IDE 500mA LED 驱动器的典型应用
- Sp6669、1.5-Mhz、600Ma 固定同步降压转换器的典型应用
- 2021大学生电子设计竞赛C题优秀作品集(三端口 DC-DC 变换器)
- LT8494HFE 750kHz、16V 至 32V 输入、48V 输出、0.5A 升压转换器的典型应用电路
- 用于仪表的 16 位 4 通道 DAC
- DC1009A-B,演示电路具有 LTC2488、2/4 通道、16 位 DS ADC,具有 Easy Drive 输入