
补充单片机应用系统设计实例PPT课件.ppt
62页单片机应用系统设计实例单片机应用系统设计实例1. 8051系列单片机实现计算器功能系列单片机实现计算器功能2. 简易波形发生器简易波形发生器3. 简易广告屏设计简易广告屏设计4. 寻迹小车的设计寻迹小车的设计5. 无线呼叫系统设计无线呼叫系统设计2021/3/911. 8051单片机实现计算器功能单片机实现计算器功能一一 设计目标和实现方法设计目标和实现方法v 满足计算器要求,进行加减乘除运算;满足计算器要求,进行加减乘除运算;v 打开计数器时,初始显示数字为打开计数器时,初始显示数字为0123;;v 实现简单的数据运算,不支持连续运算;实现简单的数据运算,不支持连续运算;v 仿真和调试要用到仿真和调试要用到Protues 和和Keil 软件2021/3/922021/3/93二二 方案论证与设计方案论证与设计v键盘包括键盘包括0到到9十个数字键十个数字键,加减乘除四个符加减乘除四个符 号键号键,清除键和等号键,共清除键和等号键,共16 个按键个按键 ;;v键盘选用键盘选用4x4行列式键盘行列式键盘结构(如下图);结构(如下图);v输入模块:输入模块:键盘扫描键盘扫描;;v数字大小范围为数字大小范围为4位,位, 选用选用4个个LED数码管数码管 显示数据和结果;显示数据和结果;2021/3/94三三 硬件电路设计硬件电路设计((1))主要器件主要器件:采用:采用8051 单片机单片机,它能够满它能够满足数据的采集、控制和数据处理的需求足数据的采集、控制和数据处理的需求,显示显示用输入采用按键方式的用输入采用按键方式的4 段段LED 数码管数码管;;((2))功能和操作功能和操作:加减乘除运算和显示。
步:加减乘除运算和显示步骤如下:骤如下:①① 上电后上电后,屏幕初始化屏幕初始化,显示显示初始数值初始数值0123;;②② 计算计算依次数字键依次数字键,符号键符号键,数字键数字键,等号键,屏等号键,屏幕上显示出计算结果;幕上显示出计算结果;③③ 如果要如果要再次计算再次计算,可以按下可以按下“on/c”键清键清0,,或者按下单片机的复位键或者按下单片机的复位键,重新初始化重新初始化2021/3/95四四 软件设计软件设计v模块化程序设计模块化程序设计是单片机应用中最常用的是单片机应用中最常用的程序设计方法;程序设计方法;v模块化程序设计的模块化程序设计的中心思想中心思想是把一个复杂是把一个复杂应用程序按整体功能划分成若干相对独立应用程序按整体功能划分成若干相对独立的程序模块的程序模块,各模块可以单独各模块可以单独 设计设计,编程和编程和调试调试,然后组合起来;然后组合起来;v本系统的程序模块主要分为本系统的程序模块主要分为主程序主程序,,键值键值获取程序获取程序和和处理子程序处理子程序等,其流程图分别等,其流程图分别如下图所示:如下图所示:2021/3/96主程序流程图定时中断子程序流程图按键处理子程序流程图2021/3/97主程序:主程序:void main(){ inint();while(1){ if(key)pkey();}}按键处理子程序:按键处理子程序:void pkey() {switch(key) { case zero: modify_LED(0);break; case one: modify_LED(1);break; case two: modify_LED(2);break; case three: modify_LED(3);break; case four: modify_LED(4);break; case five: modify_LED(5);break; case six: modify_LED(6);break;2021/3/98 case seven: modify_LED(7);break; case eight: modify_LED(8);break; case nine: modify_LED(9);break; case clear: key_ptr=3;modify_LED(17);op1=op2=0;break; case add: key_ptr=3;modify_LED(10);break; case sub: key_ptr=3;modify_LED(11);break; case mux: key_ptr=3;modify_LED(12);break; case div: key_ptr=3;modify_LED(13);break; case equ: key_ptr=3;modify_LED(14);break; default:break; } key=0;}void modify_LED(uchar x){ if(key_ptr==3){LED[0]=LED[1]=LED[2]=space;} else {LED[0]=LED[1]; LED[1]=LED[2];LED[2]=LED[3];}2021/3/99 LED[3]=x;key_ptr--; if(x<=9&&x>=0) op1=op1*10+x; else if(x>=10&&x<=13) { LED[0]=LED[1]=LED[2]=LED[3]=space;key_ptr=3; op2=op1;op1=0; switch(x) { case 10: op3='+';break; case 11: op3='-';break; case 12: op3='*';break; case 13: op3='/';break; default:break; } } else if(x==14) {switch(op3) {case '+': op2=op1+op2;break;2021/3/910 case '-': op2=op2-op1;break; case '*': op2=op1*op2;break; case '/': op2=op2/op1;break; default:break; } result_pr(); } key_ptr&=0x03;}2021/3/911定时中断子程序:定时中断子程序:void timer0() interrupt TF0_VECTOR //中断检测键盘键值{ TH0=(65536-2500)>>8; TL0=(65536-2500)&0xff; if((key_port&0xf0)!=0xf0) //有键按下 {if(key_port==xkey) { ckey++; //去抖动 if(ckey>10){key=xkey; ckey=0;}} else {xkey= key_port;ckey=0;}} wx_port=0xff; dm_port=dm[LED[wx_ptr]]; //更新段码2021/3/912wx_port^=(1< 其相应波形其主要功能主要功能如下:如下:①①输出波形可调;输出波形可调;②②输出复制和频率可调输出复制和频率可调 设计思路:设计思路:以正弦波为例以正弦波为例,一条正弦波曲线可以一条正弦波曲线可以看做是一个个点的集合看做是一个个点的集合,我们可以按照一定的时我们可以按照一定的时间间隔输出这些点的电压值间间隔输出这些点的电压值,在输出端就可以得在输出端就可以得到一个正弦波到一个正弦波,时间间隔越小时间间隔越小,输出的波形就越接输出的波形就越接近一个正弦波近一个正弦波2021/3/914一一 硬件设计硬件设计这个实现方案使用了以下元器件:这个实现方案使用了以下元器件: ①①主控单元:主控单元:AT89s52单片机;单片机; ②②显示界面:液晶屏幕显示界面:液晶屏幕lcd1602;; ③③功能电路:功能电路:8分辨率分辨率D/A转换芯片转换芯片DAC0832, 运算放大器运算放大器,与非门与非门,按键等2021/3/915简易波形发生器原理图2021/3/916在上原理图中:在上原理图中:•P1口作为口作为LCD1602的的数据输入总线数据输入总线;;•P2.2~2.4作为作为LCD1602的的读读/写写,使能控制线使能控制线;;•P2.0~2.1作为作为DAC0832的控制线的控制线;;•P0口作为口作为DAC0832的数据输入总线的数据输入总线;;•4个按键分别控制个按键分别控制波形选择波形选择,频率频率+,频率频率-, 在在DAC0832的输出端外接的输出端外接TL082集成运算放大集成运算放大 器器,控制输出波形的幅值。 控制输出波形的幅值2021/3/917DAC0832是是8分辨率的分辨率的D/A转换集成芯片转换集成芯片,由由8位位输入锁存器输入锁存器,8位位DAC寄存器寄存器,8位位D/A转换电路及转换电路及转换控制电路构成其引脚功能如下:转换控制电路构成其引脚功能如下:•D0~D7:8位数据输入线位数据输入线,TTL电平电平,有效时间有效时间>90ns;;•ILE::数据锁存允许控制信号输入线数据锁存允许控制信号输入线,高电平有效;高电平有效;•CS::片选信号输入线片选信号输入线,低电平有效;低电平有效;•WR1::数据锁存器写选通输入线数据锁存器写选通输入线,负脉冲有效;负脉冲有效; •XFER::数据传输控制信号输入线数据传输控制信号输入线,低电平有效;低电平有效;•WR2::DAC寄存器选通输入线,负脉冲有效;寄存器选通输入线,负脉冲有效;•IOUT1::电流输出端电流输出端1,其值随其值随DAC寄存器的内容线性寄存器的内容线性 变化;变化;•IOUT2::电流输出端电流输出端2,其值与其值与IOUT1值之和为一常数;值之和为一常数; 2021/3/918•Rfb:反馈信号输入线:反馈信号输入线,改变改变 Rfb端外接电阻值可调端外接电阻值可调 整转换满量程精度;整转换满量程精度; •Vcc::电源输入端电源输入端,Vcc的范围的范围 为为+5V~+15V;; •VREF::基准电压输入线基准电压输入线,VREF 的范围的范围-10V~+10V;;•AGND::模拟信号地模拟信号地 •DGND::数字信号地 数字信号地 DAC0832管脚图2021/3/919二二 软件设计软件设计主程序流程图外部中断子程序流程图定时器中断子程序流程图2021/3/920主要程序举例主要程序举例正弦波离散输出表:正弦波离散输出表:uchar code sine_tab[256]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,//输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef, 2021/3/9210xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,2021/3/922//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};正弦波输出程序:正弦波输出程序:#define DAdata P0 //DA数据端口void sine_out() //正弦波输出{DAdata=sine_tab[wavecount++];DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}2021/3/923主程序:主程序:void main(){uchar i=0; DA_S2=0; //使DAC寄存器处于直通状态 DAdata=0; DA_S1=1; //关闭8位输入寄存器 init_lcd();waveform=0; TMOD=0x01; //设置定时器0为16位工作方式 IT0=1; //设置外部中断0为下降沿触发 ET0=1; //开定时器中断 EX0=1; EA=1; while(1) {}}2021/3/924定时中断子程序:定时中断子程序:void timer0() interrupt 1{TH0=THtemp;TL0=TLtemp;if(waveform==0) sine_out();else if(waveform==1) triangle_out();else if(waveform==2) square_out();}2021/3/925外部中断子程序:外部中断子程序:void key_int0() interrupt 0{uchar keytemp; uint total_freq; //总频率 EA=0; TR0=0; //关总中断与定时器 delay(5); //延时 if(key==0) //有按键按下而引发中断 {keytemp=P3&0xf0; //检测按键状态 switch(keytemp) { case 0xe0://选择波形 waveform++; if(waveform>2) waveform=0;break; case 0xd0: wavefreq[waveform]++; if(wavefreq[waveform]>10) wavefreq[waveform]=1; break;2021/3/926 case 0xb0: wavefreq[waveform]--; if(wavefreq[waveform]<1) wavefreq[waveform]=10; break; case 0x70: DA_S2=1; break;}THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_tempTLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)]; total_freq= wavefreq[waveform] * freq_unit[waveform]; lcd_hang2[5]=total_freq%10+0x30; total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示2021/3/927disp_lcd(0xc0,lcd_hang2); //在第二行显示}wavecount=0; //计数清零while(!key);EA=1; TR0=1; //开启中断与定时器}2021/3/9283. 简易广告屏设计简易广告屏设计设计要求设计要求:基于:基于51单片机设计一个电子广告单片机设计一个电子广告 牌牌,其功能是滚动显示一串字符。 其功能是滚动显示一串字符 设计思路设计思路:选用了:选用了8个个LED点阵点阵,组成一个大的组成一个大的 16*64的的LED点阵使用分时控制点阵使用分时控制 方法方法,用同一数据总线来控制用同一数据总线来控制8个个 点阵的显示点阵的显示,减少对减少对IO端口的需求端口的需求2021/3/9292021/3/930一一 硬件设计硬件设计 右图是一个右图是一个8*8的集成的集成LED点阵点阵,该点该点阵有阵有16个引脚个引脚,8个引个引脚控制点阵每行的选脚控制点阵每行的选中,另外中,另外8个引脚控个引脚控制点阵每列的选中制点阵每列的选中,通过这通过这16个引脚来控个引脚来控制点阵上每一个制点阵上每一个LED的亮灭2021/3/93116X64LED点阵的广告屏电路2021/3/932在上原理图中:在上原理图中: 使用使用P2.7,P2.6,P2.5通过通过与非门与非门连接连接3片片74273作为作为片选引脚片选引脚则在某一时刻内我们可则在某一时刻内我们可以只选通其中一片以只选通其中一片D触发器,发送数据,图中触发器,发送数据,图中的两片的两片D触发器对显示屏上触发器对显示屏上LED每行的选通进每行的选通进行控制。 行控制 D触发器上触发器上使用了六个端口使用了六个端口,其中四根线,其中四根线接到接到4-16译码芯片上控制每列的选通,另外两译码芯片上控制每列的选通,另外两根线控制根线控制4片译码器的选通,则可以实现对片译码器的选通,则可以实现对4*16=64列列LED的选通控制的选通控制2021/3/933二二 软件设计软件设计 要在要在LED屏上显示汉字屏上显示汉字,首先要取得首先要取得汉字汉字的字模的字模,本方案一个汉字所需要的存储空间是本方案一个汉字所需要的存储空间是32个字节我们可以定义一个数组来存储这个字节我们可以定义一个数组来存储这个字模,如个字模,如“武武”的字模为:的字模为: char list[]={0x20,0x20,0x20,0x60,0x24,0x3F,0x24,0x20, 0x24,0x20,0xE4,0x1F,0x26,0x11,0x24,0x11, 0x20,0x10,0xFF,0x03,0x20,0x1C,0x22,0x20, 0x2C,0x40,0x20,0x80,0x20,0xE0,0x00,0x00}2021/3/934 我们使用软件我们使用软件生成了所需汉字的生成了所需汉字的字模之后,将这些字模之后,将这些字模存入程序的数字模存入程序的数组,运行程序,调组,运行程序,调用这些数组,这些用这些数组,这些汉字就显示在屏幕汉字就显示在屏幕上了。 上了程序流程图程序流程图如右图所示:如右图所示:2021/3/935主要程序:主要程序:#define hang0 XBYTE[0X7FFF] //定义端口#define hang1 XBYTE[0XbFFF]#define lie XBYTE[0XDFFF]void main() {uchar i,j,k; uint b=0; uchar a; //控制移动间隔时间while(1) {j=0; if(a>1) //移动间隔时间;取值0--255 {a=0; b+=2; if(b>=512) {b=0; for(i=0;i<64;i++) {lie=i;hang0=0x00; hang1=0x00; }}2021/3/936 for(i=0;i<64;i++) {lie=i; for(k=0;k<5;k++) {hang0=table[j+b]; hang1=table[j+b+1]; delay(2); hang0=0x00; hang1=0x00; } //清屏 j+=2; } a++; }}2021/3/9374. 寻迹小车的设计寻迹小车的设计一一 功能介绍功能介绍 本循迹小车将实现本循迹小车将实现自动寻迹并沿黑线走向自动寻迹并沿黑线走向行进行进的功能。 的功能 小车由前后小车由前后两个电机两个电机分别控制分别控制前轮转弯前轮转弯及及后轮前进后轮前进驱动,其中前轮由小型舵机带动,使驱动,其中前轮由小型舵机带动,使得系统减少了机械部分设计,使小车的转向控得系统减少了机械部分设计,使小车的转向控制数字化,易于单片机进行控制后轮使用普制数字化,易于单片机进行控制后轮使用普通直流电机,通过通直流电机,通过PWM信号调节小车前进车信号调节小车前进车速2021/3/9382021/3/939系统原理图2021/3/940二二 硬件介绍硬件介绍((1)) 舵机简介舵机简介 舵机舵机是一种位置伺服的驱动器,适用于是一种位置伺服的驱动器,适用于角度不断变化并可以保持的控制系统小型角度不断变化并可以保持的控制系统小型舵机的舵机的工作电压工作电压一般为一般为4.8V或或6V,,转速转速一般一般为为0.22/60度或度或0.18/60度2021/3/941工作原理工作原理::•控制信号进入信号调制芯片控制信号进入信号调制芯片,获得获得直流偏置电压直流偏置电压;;•基准电路产生周期基准电路产生周期20ms,宽度宽度1.5ms的的基准信号基准信号;;•将直流偏置电压与电位器的电压比较获得电压差将直流偏置电压与电位器的电压比较获得电压差输出;输出;•最后最后,电压差的正负输出到电机驱动芯片决定电机电压差的正负输出到电机驱动芯片决定电机的正反转;的正反转;•以以180度角度伺服为例,对应的控制关系是:度角度伺服为例,对应的控制关系是: 0.5ms--------------0度;度; 2.0ms-----------135度;度; 1.0ms------------45度;度; 2.5ms-----------180度;度; 1.5ms------------90度;度;2021/3/942((2)) 黑线检测传感器的介绍黑线检测传感器的介绍 小车黑线检测小车黑线检测用用红外发射对管红外发射对管作为传感器。 作为传感器其其工作原理工作原理为:发射端发射红外光,接收端接为:发射端发射红外光,接收端接收物体反射信号,因为各种颜色对光的吸收和收物体反射信号,因为各种颜色对光的吸收和反射程度不同,黑色吸收红外光,使得反射信反射程度不同,黑色吸收红外光,使得反射信号很弱,而白色反射红外光使得反射信号相对号很弱,而白色反射红外光使得反射信号相对发射信号损耗不大,接收端再将反射信号转换发射信号损耗不大,接收端再将反射信号转换为相应的电压信号传感器的接收信号再经过为相应的电压信号传感器的接收信号再经过信号处理电路(如下页图)信号处理电路(如下页图)输送给单片机输送给单片机2021/3/943黑线信号检测电路2021/3/944((3)) 电机驱动原理简介电机驱动原理简介 小车后轮采用小车后轮采用小型直流电机小型直流电机,采用,采用PWM信信号驱动号驱动L298N电机驱动芯片进行控制电机驱动芯片进行控制 L298N 为双全桥步进电机专用驱动芯片,为双全桥步进电机专用驱动芯片,内部包含内部包含4信道逻辑驱动电路信道逻辑驱动电路,是一种二相是一种二相 和四和四相步进电机的专用驱动器相步进电机的专用驱动器,可同时驱动可同时驱动2个二相个二相或或1个四相个四相步进电机。 步进电机 此芯片可直接由单片机此芯片可直接由单片机的的IO端口来提供模拟时序信号,其电机驱动基端口来提供模拟时序信号,其电机驱动基本原理如下页图所示本原理如下页图所示2021/3/945电机驱动电路2021/3/946三三 软件程序介绍软件程序介绍 这次设计由于这次设计由于单片机单片机89S52内部内部不带有不带有PWM生成生成模块,模块,故采用定时故采用定时器与端口电平翻转器与端口电平翻转来实现来实现PWM 右图是小车运右图是小车运行的程序流程图行的程序流程图2021/3/947主程序:主程序:main(){uchar receive,ek1=7,ek2=7; pulse=0;highh=(uchar)((16384-high)/256+192); highl=(uchar)((16384-high)%256); lowh=(uchar)(high/256+200);lowl=(uchar)(high%256);IE=0x8a; TMOD=0x11; TH0=0x00; TL0=0x00; TH1=0x00;TL1=0x00;TR0=1; //启动T0TR1=1; //启动T12021/3/948for(;;){ /* for(i=0;i<1000;i++); */ receive=P2; } switch(receive) //根据采集到的值进行判断{case 0x7f:ek1=0;break; //0111 1111case 0x3f:ek1=1;break; //0011 1111case 0xbf:ek1=2;break; //1011 1111case 0x9f:ek1=3;break; //1001 1111case 0xdf:ek1=4;break; //1101 1111case 0xcf:ek1=5;break; //1100 1111case 0xef:ek1=6;break; //1110 1111case 0xe7:ek1=7;break; //1110 0111case 0xf7:ek1=8;break; //1111 01112021/3/949case 0xf3:ek1=9;break; //1111 0011case 0xfb:ek1=10;break; //1111 1011case 0xf9:ek1=11;break; //1111 1001case 0xfd:ek1=12;break; //1111 1101case 0xfc:ek1=13;break; //1111 1100case 0xfe:ek1=14;break; //1111 1110default: ek1=15;break; //1111 1111}if(ek1==15) ek1=ek2; //计算控制量 else b=90*ek1+middle-45*ek2-315; if(b>1120) b=1120;if(b<710) b=710ek2=ek1}void interrupt_t0(void) interrupt 12021/3/950{if(flag1==0){ TH0=(uchar)((16384-b)/256+192); TL0=(uchar)((16384-b)%256);a=b;flag1=1;rudder=1;}else{TH0=(uchar)(a/256+184); TL0=(uchar)(a%256rudder=0;flag1=0;}TF0=0;TF1=0;}void interrupt_t1(void) interrupt 3{if(flag2==0){TH1=highh; TL1=highl; pulse=1; //P1.1管脚电平跳变flag2=1; 2021/3/951}else{TH1=lowh;TL1=lowl;pulse=0; //P1.1管脚电平跳变flag2=0;}TF1=0;TF0=0;}2021/3/9525. 无线呼叫系统设计无线呼叫系统设计一一 硬件设计硬件设计 本系统采用本系统采用nrf2401作为无线呼叫功能芯片,作为无线呼叫功能芯片,进行无线数据传输。 进行无线数据传输2021/3/9532021/3/954 nRF2401是单片射频收发芯片,工作于是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置输出功率和通信频道可通过程序进行配置 芯片能耗非常低,以芯片能耗非常低,以-5dBm的功率的功率发射时,发射时,工作电流只有工作电流只有10.5mA,,接收时工作电流只有接收时工作电流只有18mA,多种低功率工作模式,节能设计更方,多种低功率工作模式,节能设计更方便其DuoCeiverTM技术使技术使nRF2401可以使可以使用同一天线,同时接收两个不同频道的数据用同一天线,同时接收两个不同频道的数据nRF2401适用于多种无线通信的场合适用于多种无线通信的场合2021/3/955二二 软件设计软件设计 无线呼叫系统的软件设计分为三个模块,无线呼叫系统的软件设计分为三个模块,包括包括主程序主程序,,nRF2401发送模块发送模块和和nRF2401接收模块接收模块,相关的流程图如下:,相关的流程图如下:2021/3/956 nRF2401 ShockBurst方式发送流程图和接收流程图2021/3/957主程序:主程序:void main(void) { delayms(1000); //开机延时 nRF2401_Data[0] = 0; init_rs232(); //串口初始化 TI=1; //串口发射有效 nRF2401_config(); //nRF2401初始化配置 delayms(100); speakertest(); //蜂鸣器叫一声 nRF2401_Transmit_Mode(); //设置为发送模式 nRF2401_Transmit_Data(nRF2401_Data); //发送测试数据 nRF2401_Receive_Mode(); //设置为接收模式 SBUF=0x55; //串口输出0x55 测试是否有正确的串口数据 delayms(100); 2021/3/958 while (1) { nRF2401_Receive_Data(nRF2401_Data); if (nRF2401_flag&0x01==0x01) //判断是否有数据收到 { P0=~nRF2401_Data[0]; SBUF=nRF2401_Data[0]; } keytest(); //调用按键子程序,无线发送数据 } }2021/3/959发送数据子程序发送数据子程序void nRF2401_Transmit_Data(uchar TxBuf[]) { uchar i; nRF2401_CE=1; delayms(1); for (i=0;i< (ADDR_W/8);i++) //写入接收地址(按字节对齐) { nRF2401_Write_Byte(Channel_Addr[i]); } for (i=0;i<(DATA1_W/8);i++) //写入需要发送的数据 { nRF2401_Write_Byte(TxBuf[i]); } nRF2401_CE=0; //nRF2401_CE 置低使发送有效 delayms(1); } 2021/3/960接收数据子程序接收数据子程序void nRF2401_Receive_Data(uchar *data_temp) { uchar i; if (DR1==1) //接收完毕后,DR1自动为0 datasheet(page28 of 37); { for (i=0; i
