致谢
本设计从开题到方案的设计、具体电路试验及论文写作的实施始终是在老师们的精心指导和周密安排下进行的。在此我特别感谢感谢我的指导老师翁国云,一个月来帮我定题、分析、指导;当我遇到问题时孜孜不倦教导我、帮助我,在完成论文过程中给我细心的指导和详细的批改,使我得以完成这个设计。同时感谢付智河老师、 涂二生老师、 李建华老师、 罗锦彬老师、赖义汉等等老师和同学在学习和生活中给予我的帮助,使我提高了分析问题、处理问题、解决问题的能力,真的让我受益良多。
此外,感谢所有我的关心和帮助的老师及朋友,他们在我成长的道路上给力我信心和勇气,使我跨过一道道难关。最后,感谢在百忙之中给我审稿的诸位老师。
24
附录一: 系统总原理图和PCB图
25
PCB图如下:
26
附录二: 单片机A机程序
#include
//****************************************NRF24L01端口定义*************************************** sbit MISO =P3^5; sbit MOSI =P3^3; sbit SCK =P3^6; sbit CE
=P3^7;
=P3^4;
sbit CSN
//************************************按键*************************************************** sbit s1=P1^0; sbit s2=P1^1; sbit s3=P1^2; sbit s4=P1^3; sbit s5=P1^4; sbit s6=P1^5;
//************************************液晶控制********************************************* sbit lcdrs=P2^0; sbit lcdrw=P2^1; sbit lcden=P2^2;
//*********************************************NRF24L01************************************* #define TX_ADR_WIDTH 5 #define RX_ADR_WIDTH 5 #define TX_PLOAD_WIDTH 4 #define RX_PLOAD_WIDTH 4
// 5 uints TX address width // 5 uints RX address width // 4 uints TX payload // 4 uints RX payload
发送地址的宽度 接收地址的宽度
发送数据宽度
uchar const A_ADR[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //A机地址 uchar const B_ADR[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x02}; //B机地址
//***************************************NRF24L01寄存器指令******************************************************* #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20
// 写寄存器指令
#define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX 0xE1
// 清除发送 FIFO指令
#define FLUSH_RX 0xE2 // 清除接收 FIFO指令 #define REUSE_TX_PL 0xE3 // 定义重复装载数据指令 #define NOP 0xFF
// 保留
//*************************************SPI(nRF24L01)寄存器地址**************************************************** #define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式 #define EN_AA 0x01 // 自动应答功能设置
27
#define EN_RXADDR 0x02 // 可用信道设置 #define SETUP_AW 0x03 // 收发地址宽度设置 #define SETUP_RETR 0x04 // 自动重发功能设置 #define RF_CH 0x05 // 工作频率设置
#define RF_SETUP 0x06 // 发射速率、功耗功能设置 #define STATUS 0x07 // 状态寄存器 #define OBSERVE_TX 0x08 // 发送监测功能 #define CD 0x09 // 地址检测 #define RX_ADDR_P0 0x0A // 频道0接收数据地址 #define RX_ADDR_P1 0x0B // 频道1接收数据地址 #define RX_ADDR_P2 0x0C // 频道2接收数据地址 #define RX_ADDR_P3 0x0D // 频道3接收数据地址 #define RX_ADDR_P4 0x0E // 频道4接收数据地址 #define RX_ADDR_P5 0x0F // 频道5接收数据地址 #define TX_ADDR 0x10 // 发送地址寄存器 #define RX_PW_P0 0x11 // 接收频道0接收数据长度 #define RX_PW_P1 0x12 // 接收频道0接收数据长度 #define RX_PW_P2 0x13 // 接收频道0接收数据长度 #define RX_PW_P3 0x14 // 接收频道0接收数据长度 #define RX_PW_P4 0x15 // 接收频道0接收数据长度 #define RX_PW_P5 0x16 // 接收频道0接收数据长度 #define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置
//****************************************************************************************** uchar
bdata sta; //状态标志
=sta^6; =sta^5; =sta^4;
sbit RX_DR sbit TX_DS sbit MAX_RT
uchar code table[]=\ //写液晶对应ASCLL码
/****************************************************************************************** /*延时函数
/******************************************************************************************/ /**************延时x毫秒******************/ void delayms(uint x) {
uchar y; for(;x>0;x--)
for(y=111;y>0;y--); }
void write_com(uchar com) {
lcdrs=0;
P0=com; delayms(1); lcden=1; delayms(1);
//向液晶写指令函数
28