无线传输装置的设计与制作_第1页
无线传输装置的设计与制作_第2页
无线传输装置的设计与制作_第3页
无线传输装置的设计与制作_第4页
无线传输装置的设计与制作_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【精品文档】如有侵权,请联系网站删除,仅供学习与交流.....精品文档......无线传输装置的设计与制作Tianjin毕业设计专业:班级学号:学生姓名:指导教师:二〇一〇年六月无线传输装置的设计与制作[摘要]无线传输通信技术,通常工作于ISM(工业、科学、医疗)频段,因其功率小、开发简单快速而在工业、民用等领域应用广泛。本装置基于微功耗单片射频收发器nRF905设计,nRf905采用VLSIShockBurst技术,ShockBurst工作模式的特点是自动产生前导码和CRC(循环冗余校验),降低在应用中的平均电流消耗;采用Atmel公司的高性能、低功耗8位处理器ATmega16完成数据的处理和控制,ATmega16与nRF905之间的双向数据传输使用SPI接口。输出显示采用微功耗、体积小、显示内容丰富、超薄轻巧3V供电的液晶MC1602。输入键盘采用4×4中断式键盘,减少键盘查询过程对MCU的占用时间。在完成硬件电路和系统软件调试后,实现了手持型的英文短信机,在100m通信距离,该无线传输装置工作稳定,能实现数据的有效传输,具有低功耗、抗干扰能力强、易携带等优点。[关键词]无线传输;英文短信机;ATmega16;nRF905;MC1602Wirelesstransmissionequipmentdesignandfabrication[Abstract]Wirelesscommunicationstechnology,usuallyworkintheISM(industrial,scientific,medical)band,Itwasextensivelyappliedtotheindustrial,civilianinfieldsbecauseoftheirpowerofsmall,simpleandrapiddevelopment.Thisdevicebasedonmicro-powersingle-chipRFtransceivernRF905design,nRf905byVLSIShockBursttechnology,ShockBurstmodeofoperationischaracterizedbyautomaticprecursorcodeandCRC(cyclicalredundancychecking),reducingtheapplicationoftheaveragecurrentconsumption,usingAtmel'shighperformance,low-powereightbitprocessorATmega16completeddataprocessandcontrol,ATmega16andnRF905two-waydatatransmissionbetweentheuseoftheSPIinterface.OutputusingLCDMC1602withmicro-power,smallsize,showrichincontent,ultra-thinlightweight3Vpowersupply.Theinputkeyboarduses4×4-keyboardwithinterruptiontoreducethekeyboardfortheprocessoccupationMCU'stime.afterthedebuggingofhardwareandsystemsoftwareimplementahand-heldmachinemessageinEnglish,onthe100mdistance,thewirelessdevicesworkstability,messagecantransmissedeffectively,withlowpower,anti-interferencecapabilityandeasyBring.[Keywords]wirelesstransmission;English-SMS;ATmega16;nRF905;MC1602目录0引言-------------------------------------------------------------------11无线传输装置的主要单元电路---------------------------------------------21.1Atmega16单片机----------------------------------------------------21.1.1Atmega16的主要性能------------------------------------------21.1.2Atmega16引脚说明--------------------------------------------31.1.3AVRCPU内核-------------------------------------------------41.1.4ATmega16的存储器1.2无线收发芯片nRF905-----------------------------------------------61.2.1nRF905内部结构与简单工作原理--------------------------------61.2.2nRF905的性能及特点------------------------------------------71.3液晶MC1602-------------------------------------------------------71.3.1引脚说明-----------------------------------------------------71.3.2基本操作-----------------------------------------------------71.4中断式矩阵键盘---------------------------------------------------72无线传输装置的原理与设计-----------------------------------------------92.1无线传输装置结构框图---------------------------------------------92.2无线传输装置原理图-----------------------------------------------92.3无线传输装置程序主要流程图---------------------------------------92.4无线传输装置的模块电路------------------------------------------162.4.1无线收发部分------------------------------------------------162.4.2输出显示部分------------------------------------------------182.4.3输入按键部分------------------------------------------------223无线传输装置的调试----------------------------------------------------243.1显示部分调试----------------------------------------------------243.2键盘部分调试----------------------------------------------------263.3无线收发部分调试------------------------------------------------283.4总体调试------------------------------------------------------283.4.1调试步骤--------------------------------------------------283.4.2调试结果--------------------------------------------------31结论--------------------------------------------------------------------32致谢语------------------------------------------------------------------33参考文献----------------------------------------------------------------34附录1main.c----------------------------------------------------------35附录2main0.c---------------------------------------------------------38附录3int_01.c--------------------------------------------------------44附录4PC-----------------------------------------------------------48附录文原文---------------------------------------------------------49附录文译文---------------------------------------------------------560引言随着网络及通信技术的飞速发展,无线传输以其成本低廉、扩展性好、受地理条件限制较少、安装施工简便灵活等特点,在许多领域都有着广阔的应用前景。伴随着短距离、低功率无线传输技术的成熟,无线传输被越来越多地应用到新的领域。与有线传输方式相比,无线传输以其不需铺设明线、使用便捷等一系列优点。以往的无线产品存在范围和方向上的局限。例如,一些无线产品在使用时,无法将信息反馈给控制者;还有一些无线产品,如果能配备廉价的无线技术并在系统中增加数码显示,产品不仅能向用户显示其状态或状态的改变,而且可以大大降低成本。正如人们所发现的,只要建立双向无线通信-双工通信并且选择成本低的收发芯片,就会出现许多新应用。本系统采用统一的3V电源供电,无需外加电源电压转换电路。4×4键盘采用只需外加四个二极管和一个内部上拉电阻就实现了外部中断的设计,Atmega16芯片在内部集成EEPROM掉电存储,通过nrf905无线模块进行数据传输,采用工作频段为433MHz的点对点无线传输;显示部分采用3V供电的MC1602显示信息,中小尺寸的液晶显示在人机交互上具有比数码管明显的的优势:通过简洁的接口电路,可以在屏上实现比较丰富细腻的的各种界面效果,大大增强了器件与使用者之间的“亲和力”。综上所述液晶显示、AVR单片机与nrf905芯片均为低功耗、低电压即可工作的器件,因此硬件电路实现简易,具有电路简单稳定、抗干扰能力强、功耗小,易携带等优点。无线传输装置的主要单元电路1.1Atmega16单片机控制电路主要组成部分为单片机ATmega16[1],ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算数逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。Atmega16的主要性能1)高性能、低功耗的8位AVR微控制器,先进的RISC精简指令集结构,131指令,大多数指令执行时间为单时钟周期指令,32个8位通用工作寄存器,工作在16MHz时,具有16MIPS的性能,片内集成硬件乘法器(执行速度为2个时钟周期)。2)片内集成了较大容量的非易失性程序和数据存储器,16KB的可编程Flash存储器,擦写次数:>10000次,具有独立锁定位的可选BOOT代码区,可通过片上BOOT程序实现系统内编程序,真正的的同时读写操作。512个字节的EEPROM,擦写寿命:100000次;1K字节片内SRAM;可以对锁定位进行编程以实现用户程序的加密。3)丰富强大的外部接口(Peripheral)性能,两个具有独立预分频器和比较器功能的8位定时器/计数器,一个具有预分频器、比较功能和捕获功能的16位定时/计数器,具有独立振荡器的实时计数器RTC,四个PWM通道;8路10位ADC,8个单端通道,TQFP封装的7个差分通道,2个具有可编程增益(1×,10×或200×)的差分通道,两个可编程的串行USART接口,可工作于主机/从机模式的SPI串行接口,具有独立片内振荡器的可编程看门狗定时器,片内模拟比较器。4)特殊的微控制器性能:可上电复位以及可编程的掉电检测,片内经过标定的RC振荡器,片内/片外中断源;6种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、待命模式(Standby)以及扩展的Standby模式。5)I/O口和封装:32个可编程I/O口,可任意定义I/O的输入/输出方向;输出时为推挽输出,驱动能力强,可直接驱动LED等大电流负载:输入口可定义为三态输入,可以设定带内部上拉电阻,省去外接上拉电阻,40脚PDIP封装,44脚TQFP封装和44脚MLF封装。6)宽工作电压:2.7V-5.5V(ATmega16L),4.5V-5.5V(ATmega16)7)高运行速度,O-8MHz(ATmega16L),0-16MHz(ATmega16)。

8)低功耗:正常模式(Active):1.1mA;空闲模式(IdleMode):0.35mA掉电模式(Power-downMode):<1uA。1.1.2Atmega16引脚说明Atmega16引脚如图1.1。图1.1ATmega16引脚图1)端口A(PA7..PA0)端口A:作为A/D转换器的模拟输入端。为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。2)端口B(PB7…PB0):端口B为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。3)端口C(PC7..PC0):端口C为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。如果JTAG接口使能,即使复位出现引脚PC5(TDI)、PC3(TMS)与PC2(TCK)的上拉电阻被激活。4)端口D(PD7..PD0)端口:D为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口D处于高阻状态。5)RESET:复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。持续时间小于门限间的脉冲不能保证可靠复位。6)AVCC:是端口A与A/D转换器的电源。不使用ADC时,该引脚应直接与VCC连接。使用ADC时应通过一个低通滤波器与VCC连接。7)AREF:A/D的模拟基准输入引脚。8)XTAL1:反向振荡放大器与片内时钟操作电路的输入端。9)XTAL2:反向振荡放大器的输出端。1.1.3AVRCPU内核1)AVRALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。ALU操作分为3类:算术、逻辑和位操作。2)复位与中断处理AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置1位,且状态寄存器的全局中断使能位也置1位时,中断可以发生。根据程序计数器PC的不同,在引导锁定位BLB02或BLB12被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。程序存储区的最低地址缺省为复位向量和中断向量。向量所在的地址越低,优先级越高。RESET具有最高的优先级,第二个为INT0外部中断请求。通过置位MCU控制寄存器(MCUCR)的IVSEL,中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。任一中断发生时全局中断使能位I被清零,从而禁止了所有其他的中断。软件可以在中断程序里置位I来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI指令后I自动置位。从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也可以通过对其写“1”的方式来清除。当中断发生后,如果相应的中断使能位为“0”,则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I置位。然后挂起的各个中断按中断优先级依次执行。第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了,中断不会被触发。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。3)状态寄存器状态寄存器状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现条件操作。如指令集所述,所有ALU运算都将影响状态寄存器的内容。这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作需要软件来处理。1.1.4A1)系统内可编程的Flash程序存储器ATmega16具有16K字节的在线编程Flash,用于存放程序指令代码。因为所有的AVR指令为16位或32位,故而Flash组织成8Kx16位的形式。用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot)程序区和应用程序区,分开来考虑。Flash存储器至少可以擦写10,000次。ATmega16的程序计数器(PC)为13位,因此可以寻址8K字的程序存储器空间。2)SRAM数据存储器数据存储器的寻址方式分为5种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器R26到R31为间接寻址的指针寄存器。直接寻址范围可达整个数据区。带偏移量的间接寻址模式能够寻址到由寄存器Y和Z给定的基址附近的63个地址。在自动预减和后加的间接寻址模式中,寄存器X、Y和Z自动增加或减少。3)I/O存储器ATmega16所有的I/O及外设都被放置于I/O空间。所有的I/O位置都可以通过IN与OUT指令来访问,在32个通用工作寄存器和I/O之间传输数据。地址为0x00-0x1F的I/O寄存器还可用SBI和CBI指令直接进行位寻址,而SBIS和SBIC则用来检查一位的值。1.2无线收发芯片nRF905nRF905是一种理想的超高频单片收发器芯片。主要用于ISM(工业、科研及医疗)频带和在433/868/915MHz频带的SRD(ShortRangeDevice-近距离设备)中。nRF905内部结构与简单工作原理主要引脚功能nRF905引脚如图1.2。图1.2nRF905引脚图(1)TRX_CE:使能芯片接收和发送。(2)TRX_EN:收发状态选择,TRX_EN=’1’发射状态;TRX_EN=’0(3)MISO:SPI输出,MCU由此口从RF芯片读入数据。(4)MISI:SPI输入,MCU由此口从RF芯片写入数据。2)内部结构与简单工作原理nRF905是挪威NordicVLSI公司推出的单片射频收发器,工作于433/868/915MHZ的ISM频段。由一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体振荡器和一个调节器组成。ShockBurst工作模式的特点是自动产生前导码和CRC(循环冗余校验)。可以很容易通过SPI接口进行编程配置。电流消耗很低,在发射功率位-10dBm时,发射电流位11mA。工作于接收模式时电流为12.5mA,进入POWERDOWN模式可以很容易实现节电,从而易于实现功率管理。nRF905一共有四种工作方式,其中有两种活动RX/TX模式和两种节电模式。活动模式:ShockBurstRX、ShockBurstTX。掉电模式:掉电和SPI编程、Standby和SPI编程。nRF905工作模式由TRX_CE、TRX_EN、PWR_UP的设置来设定,见表1.1。表1.1nRF905工作模式的设定PWR_UPTRX_CETRX_EN工作模式0111X011XX01掉电和SPI编程Standby和SPI编程ShockBurstRXShockBurstnRf905采用Nordic公司的VLSIShockBurst技术。ShockBurst技术使nRf905能够提供高速的数据传输而不需要昂贵的高速MCU来进行数据处理/时钟覆盖。通过将与RF协议有关的高速信号处理放在芯片内,nRf905提供给应用的微控制器一个SPI接口,速率由微控制器自己设定的接口速度决定。nRf905通过ShockBurst工作模式在RF以最大速率进行连接时降低数字应用部分的速度来降低在应用中的平均电流消耗。在ShockBurstRX模式中,地址匹配(AM)和数据准备就绪(DR)信号通知MCU一个有效的地址和数据包已经各自接收完成。在ShockBurstTX模式中,nRF905自动产生前导码和CRC校验码,数据准备就绪(DR)信号通知MCU数据传输已经完成。nRF905的性能及特点nRF905是真正的单片;低功耗ShockBurst工作模式;工作电源电压范围1.9—3.6V;多通道工作—ETSI/FCC兼容;通道切换时间<650us;极少的材料耗材;无需外部SAM滤波器;输出功率可调至10dBm;“传输前监听”的载波监测协议;当正确的数据包被接受或发送时,有数据准备就绪信号输出;侦测接收的数据包,当正确输出地址匹配信号;数据包自动重发功能;自动产生CRC和前导码;低工作电流(TX),在输出功率位-10dBm时典型值为11mA。该型号单片机体积小、性能高,能够快速存取数据,也易于系统开发以及扩展,很适合本设计的需要。1.3液晶MC1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。引脚说明从该模块的正面看,引脚排列从右向左为1-16脚。第1脚:VSS为地电源。

第2脚:VDD接3V正电源。

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时,对比度最高,对比度过高时会产生“鬼影”使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15~16脚:背光电源。1.3.2基本操作1)读状态......输入:RS=L,RW=H,E=H,输出:D0~D7=状态字。2)写指令......输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲,输出:无。3)读数据......输入:RS=H,RW=H,E=H,输出:D0~D7=数据。4)写数据......输入:RS=H,RW=H,D0~D7=数据,E=高脉冲,输出:无。1.44×4中断式矩阵键盘采用矩阵键盘,在按键数量多的场合,矩阵键盘与独立式按键键盘相比,可以节省很多I/O口线。另外,4×4矩阵键盘的PCB[2]布线也相对其它形式键盘容易。2无线传输装置的原理与设计2.1无线传输装置结构框图无线传输装置[3]结构如图2.1所示。无线传输模块基于微功耗单片射频收发器nRF905设计,采用Atmel公司的高性能、低功耗8位处理器ATmega16为主处理芯片,完成信息的处理和控制。信息通过LCD(MC1602)显示,4×4中断式键盘输入信息。LLCDLEDLCDLED单片机单片机键盘键盘nRF905nRF905无线传输图2.1无线传输装置结构框图2.2无线传输装置原理图见图2.2所示,PCB图见附录4。2.3无线传输装置程序主要流程图程序开始首先要进行硬件和软件的初始化,硬件初始化主要是端口初始化、计数器初始化、液晶初始化和nRF905初始化,软件初始化主要是EEPROM的初始化;然后是判断显示菜单,由外部中断0控制[4];每个菜单的相应操作调用菜单子函数来实现;其中新短信数是由外部中断1统计。主要流程图如下所示:主程序流程图见图2.3所示;中断0程序流程图见2.4所示;中断1程序流程图见2.10所示;菜单0程序流程图见2.5所示;菜单3程序流程图见2.6所示;菜单1程序流程图见2.7所示;菜单2程序流程图见2.8所示;菜单7程序流程图见2.9所示;菜单8程序流程图见2.11所示。图2.2无线传输装置原理图图2.3主程序流程图图2.4中断0程序流程图图2.5菜单0程序流程图图2.6菜单3程序流程图图2.7菜单1程序流程图图2.8菜单2程序流程图图2.9菜单7程序流程图图2.10中断1程序流程图图2.11菜单8程序流程图2.4无线传输装置的模块电路2.4.1无线收发部分无线收发部分是基于微功耗单片射频收发器nRF905设计,采用Atmel公司的高性能、低功耗8位处理器ATmega16为主处理芯片,完成数据的处理和控制。1)无线收发部分电路框图见图2.12所示。无线传输无线收发部分无线收发部分无线传输无线收发部分无线收发部分图2.12无线收发部分电路框图2)ATmega16与nRF905接口电路ATmega16与nRF905的接口电路很最要。nRF905内部有5个寄存器:状态寄存器、配置寄存器、发射地址寄存器、发射数据寄存器和接收数据寄存器。除了对寄存器读写外,还需对nRF905工作模式的切换进行控制。ATmega16与nRF905的信号连接见图2.13。PB4PB4PD0PD1PD3PC0PC1PC2PC3SCKCSNMOSIDRMISOTR_CETX_ENPWR_UPATmega16nRF905图2.13Atmega16与nRF905接口电路ATmega16与nRF905之间的双向数据传输使用SPI接口,单片机的PB4、PD0、PD1、PC0连接nRF905的SPI接口,PD3、PC1-PC3连接nRF905的控制信号和检测信号,用于nRF905的模式切换以及通信过程中必须的信号指示接口。3)数据传输过程单片机将需发送的数据(这里包括目标设备地址和所要发送的数据)通过SPI接口发送给nRF905,nRF905将数据加前导码和CRC码,将数据包发送。当nRF905接收到有效数据后,DR置高,单片机检测到DR为高电平后,复位TRX_CE引脚,使nRF905进入空闲模式,通过SPI接口从nRF905中读出接收数据。软件功能模块由CPU寄存器初始化、SPI初始化、SPI收发送程序、I/O口初始化、nRF905配置寄存器操作、nRF905接收程序、发送程序、主程序模块组成。ATmega16通过将nRF905的CSN引脚置低实现与其同步。SPI操作时序和控制由软件实现。4)nRF905配置及收发流程对nRF905寄存器的操作是一个很关键的问题,nRF905的所有配置都是通过SPI接口进行的。nRF905的SPI接口只有在掉电模式和standby模式是激活的。当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN由高到低的转换开始。nRF905发送模式工作过程如下:(1)当ATmega16发送数据时,将接收设备地址和所要发送的数据通过SPI接口写入nRF905。(2)置位TRX_CE、TX_EN,激活nRF905发送模式。(3)nRF905自动完成数据打包(加入前导码和CRC),当传输完毕DR置位。(4)如果将AUTO_RETRAN位置高,nRF905将连续发送数据包,直至将TRX_CE引脚复位。(5)当TRX_CE引脚被设置为低时,nRF905结束发送模式,并进入standby模式。nRF905接收模式工作过程如下:(1)将TRX_CE置位,TX_EN复位后650μs,nRF005进入接收模式等待数据到来。(2)nRF905将接收到的有效数据包去掉前导码、地址,CRC正确后,将DR(dataready)引脚置位。(3)CPU复位TRX_CE引脚,使nRF905进入空闲模式,然后通过SPI接口读取数据。(4)数据接收完毕后,nRF905DR引脚复位并准备进入下一个工作模式。应该注意的是,在数据发送过程中无论将TRX_CE、TX_EN怎样设置,nRF905都会完成此次发送而不受影响,此后,进八所设置的工作模式。而在接收数据包的过程中TRX_CE或TX_EN状态改变,则nRF905会立即改变工作模式,丢失数据。2.4.2输出显示部分单片机控制液晶[5]显示。1)主要指令本模块提供了11条指令,大致可以分为四大类:☆模块功能设置,诸如:显示格式、数据长度等;☆设置内部RAM地址;☆完成内部RAM数据传送;☆完成其他功能。一般情况下,内部RAM的数据传送的功能使用最为频繁,因此,RAM中的地址指针所具备的自动加一或减一功能,在一定程度上减轻了MPU编程负担。此外,由于数据移位指令与写显示数据可同时进行,这样就能以最少系统开发时间,达到最高的编程效率。(1)Cleardisplay清显示指令码:清显示指令将空位字符码20H送入全部DDRAM地址中,使DDRAM中的内容全部清除,显示消失;地址计数器AC=0,自动增1模式;显示归位,光标或者闪烁回到原点(显示屏左上角);但并不改变移位设置模式。(2)Returnhome归位指令码:归位指令置地址计数器AC=0;将光标及光标所在位的字符回原点;但DDRAM中的内容并不改变。(3)Entrymodeset设置输入模式指令码:I/D:字符码写入或者读出DDRAM后DDRAM地址指针AC变化方向标志:I/D=1,完成一个字符码传送后,光标右移,AC自动加1;I/D=0,完成一个字符码传送后,光标左移,AC自动减1;S:显示移位标志:S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位;S=0,显示不发生移位;S=1时,显示移位时,光标似乎并不移位;此外,读DDRAM操作以及对CGRAM的访问,不发生显示移位。(4)Displayon/offcontrol显示开/关控制指令码:D:显示开/关控制标志:D=1,开显示;D=0,关显示;关显示后,显示数据仍保持在DDRAM中,立即开显示可以再现;C:光标显示控制标志:C=1,光标显示;C=0,光标不显示;不显示光标并不影响模块其它显示功能;显示5X8点阵字符时,光标在第八行显示,显示5X10点阵字符时,光标在第十一行显示;B:闪烁显示控制标志:B=1,光标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果,Fosc=250kHz时,闪烁频率为0.4ms左右;通过设置,光标可以与其所指位置的字符一起闪烁。(5)Cursorordisplayshift光标或显示移位指令码:光标或显示移位指令可使光标或显示在没有读写显示数据的情况下,向左或向右移动;运用此指令可以实现显示的查找或替换;在双行显示方式下,第一行和第二行会同时移位;当移位越过第一行第四十位时,光标会从第一行跳到第二行,但显示数据只在本行内水平移位,第二行的显示决不会移进第一行;倘若仅执行移位操作,地址计数器AC的内容不会发生改变。见表2.1。表2.1光标或显示移位指令说明S/CR/L说明00110101光标向左移动,AC自动减1光标向左移动,AC自动加1光标和显示一起向左移动,AC的值不变光标和显示一起向右移动,AC的值不变(6)Functionset功能设置指令码:功能设置指令设置模块数据接口宽度和LCD显示屏显示方式,即MPU与模块接口数据总线为4位或者是8位、LCD显示行数和显示字符点阵规格;所以建议用户最好在执行其它指令设置(读忙标志指令除外)之前,在程序的开始,进行功能设置指令的执行;DL:数据接口宽度标志:DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,DB3~DB0不用,使用此方式传送数据,需分两次进行;N:显示行数标志:N=1,两行显示模式;N=0,单行显示模式;F:显示字符点阵字体标志:F=1:5X10点阵+光标显示模式;F=0:5X7点阵+光标显示模式。(7)SetCGRAMaddressCGRAM地址设置指令码:CGRAM地址设置指令设置CGRAM地址指针,它将CGRAM存储用户自定义显示字符的字模数据的首地址ACG5~ACG0送入AC中,于是自定义字符字模就可以写入CGRAM中或者从CGRAM中读出。(8)SetDDRAMaddressDDRAM地址设置指令码:DDRAM地址设置指令设置DDRAM地址指针,它将DDRAM存储显示字符的字符码的首地址ADD6~ADD0送入AC中,于是显示字符的字符码就可以写入DDRAM中或者从DDRAM中读出;值得一提的是:在LCD显示屏一行显示方式下,DDRAM的地址范围为:00H~4FH;两行显示方式下,DDRAM的地址范围为:第一行00H~27H,第二行40H~67H。(9)Readbusyflagandaddress读忙标志BF和AC指令码:当RS=0和R/W=1时,在E信号高电平的作用下,BF和AC6~AC0被读到数据总线DB7~DB0的相应位;BF:内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外部指令和数据,直到BF=0为止;AC6~AC0:地址计数器AC内的当前内容,由于地址计数器AC被CGROM、CGRAM和DDRAM的公用指针,因此当前AC内容所指区域由前一条指令操作区域决定;同时,只有BF=0时,送到DB7~DB0的数据AC6~AC0才有效。(10)WritedatatoCGRAMorDDRAM写数据到CGRAM或DDRAM指令码:写数据到CGRAM或DDRAM指令,是将用户自定义字符的字模数据写到已经设置好的CGRAM的地址中,或者是将欲显示字符的字符码写到DDRAM中;欲写入的数据D7~D0首先暂存在DR中,再由模块的内部操作自动写入地址指针所指定的CGRAM单元或者DDRAM单元中。(11)ReaddatafromCGRAMorDDRAM从CGRAM或DDRAM中读数据指令码:从CGRAM或DDRAM中读数据指令,是从地址计数器AC指定的CGRAM或者DDRAM单元中,读出数据D7~D0;读出的数据D7~D0暂存在DR中,再由模块的内部操作送到数据总线DB7~DB0上;需要注意的是,在读数据之前,应先通过地址计数器AC正确指定读取单元的地址。2)ATmega16与液晶接口电路见图2.14所示。PA0PA0PA7PC7PC6PC5PC4D0D7BLAE(6)R/W(5)RS(4)ATmega16MC1602:::::::::图2.14Atmega16与液晶接口电路2.4.3输入按键部分单片机调用键盘扫描程序对键盘进行扫描和处理有以下三种:1)程序控制扫描方式。在主控程序中的适当位置调用键盘扫描程序,对键盘进行读取和处理。2)定时扫描方式。在该方式中,要使用MCU的一个定时器,是极其产生一个10ms的定时中断,MCU响应定时中断,执行键盘扫描,当在连续两次中断中都读到相同的按键按下时(间隔10ms作为消抖处理),MCU才去执行相应的键处理程序。3)中断方式。使用中断方式时,键盘的硬件电路要做一定的改动,即增加一个按键产生中断信号的输入线,当键盘由按键按下时,键盘硬件电路产生一个外部的中断信号,MCU响应外部中断,进行键盘处理。在这里采用中断方式的键盘,为了尽量减少键盘查询过程对MCU的占用时间,单片机可以及时响应按键,硬件电路如图2.15所示。图2.15中断式矩阵键盘其中X0~X3依次接到单片机的PD4~PD7,Y0~Y3依次接单片机的PB0~PB3,INT0接PD2(中断0)。单片机PD4~PD7设置为输出口,初始为低电平,PB0~PB3设置为输入口且加内部上拉电阻,中断0设置为下降沿触发。当有按键按下时,INT0由1→0出现下降沿,中断0被触发,在中断0程序中完成键盘的扫描。3无线传输装置的调试采用模块化思想,分步调试,从底层到顶层,软件与硬件相结合调试。首先确定除Atmega16芯片、MC1602、nRF905之外硬件正常,加入Atmega16主控芯片后,使并口下载线烧录软件可以识别单片机,正确配置单片机熔丝位,见图3.1所示。整体电路分为显示输出部分、键盘输入部分、无线收发部分,程序分模块建立头文件与C文件。调试[6]分模块介绍如下:图3.1单片机熔丝位配置3.1显示部分调试查找相关资料,弄清ATmega16与MC1602[6]的接口电路及其控制指令。首先编写yejing.c文件和yejing.h文件,再编写调试程序[7],多次烧录修改调试程序以及yejing.c、yejing.h文件,最终液晶调试程序如下所示:#include<iom16v.h>

#include<macros.h>

#include"yejing.h"

voidport_init(void)//端口初始化

{PORTA=0x00;DDRA=0xFF;

PORTB=0x1F;

DDRB=0x10;

PORTC=0x7F;//m103outputonly

DDRC=0xFE;

PORTD=0x0F;

DDRD=0xF3;

}

//callthisroutinetoinitializeallperipherals

voidinit_devices(void)

{

//stoperrantinterruptsuntilsetup

CLI();//disableallinterrupts

port_init();

MCUCR=0x00;

GICR=0x00;

TIMSK=0x00;//timerinterruptsources

SEI();//re-enableinterrupts

//allperipheralsarenowinitialized

}

voidmain(void)

{

init_devices();

//insertyourfunctionalcodehere...

MC1602_init();//液晶初始化

qping();//清液晶显示屏

wc51r(0x80);display("abcdefghijklm");//液晶第一行显示

wc51r(0xc0);display("ABCDEFGHIJKLM");//液晶第二行显示

}以上程序是使液晶第一行显示"abcdefghijklm",第二行显示"ABCDEFGHIJKLM",调试结果如图4.2所示图3.2液晶显示结果3.2键盘部分调试首先编写jianpan.c文件和jianpan.h文件,再编写调试程序,多次烧录修改调试程序以及jianpan.c、jianpan.h文件,最终键盘调试程序如下所示:#pragmainterrupt_handlerint0_isr:2

voidint0_isr(void)//外部中断0处理函数

{

unsignedcharkey,key_wait;

//externalinteruptonINT0

CLI();//关中断

PORTD|=0xF0;

Delay(10);

key=GetKey();//键盘扫描if(key>=0&&key<=15)

{

key=GetKey_zhi(key);//键盘扫描值转换为ASCII码wc51r(0x80);//显示

wc51ddr(key);

}

PORTD&=0x0f;

Delay(1);

key_wait=PINB;

while((key_wait&0x0f)!=0x0f)key_wait=PINB;//等待按键松开

GIFR|=0xc0;//清中断0标志位SEI();//re-enableinterrupts开中断

}voidmain(void)

{

init_devices();

//insertyourfunctionalcodehere...

MC1602_init();

while(1)

{}

}以上程序是使液晶显示按键值[8],调试结果如图3.3、3.4所示。图3.3按键0结果图3.4按键4结果无线收发部分调试首先编写nRF905.c文件和nRF905.h文件,再编写调试程序[9],多次烧录修改调试程序以及nRF905.c、nRF905.h文件,最终键盘调试程序如下所示:voidmain(void)

{

uinti,j;

init_devices();

//insertyourfunctionalcodehere...

MC1602_init();

NRF905_System();

while(1)

{

TxRxBuffer[0]='a';

TxRxBuffer[1]=0;

TxPacket();//发送

qping();

wc51r(0x80);

display(TxRxBuffer);

for(i=0;i<1000;i++)

for(j=0;j<1000;j++);

wc51r(0x80);

display("");

for(i=0;i<1000;i++)

for(j=0;j<1000;j++);

TxRxBuffer[0]='A';

TxRxBuffer[1]=0;

TxPacket();

qping();

wc51r(0x80);

display(TxRxBuffer);

for(i=0;i<1000;i++)

for(j=0;j<1000;j++);

wc51r(0x80);

display("");

for(i=0;i<1000;i++)

for(j=0;j<1000;j++);

}

}#pragmainterrupt_handlerint1_isr:3

voidint1_isr(void)

{

//externalinteruptonINT1

CLI();//disableallinterrupts

TRX_CE_0;

Delay(1);

CSN_0;

DelayNOP(8);

SpiWrite(0x24);

RxPacket();//读数据

CSN_1;

qping();

wc51r(0x80);display(TxRxBuffer);

TX_EN_0;

TRX_CE_1;

Delay(1);

GIFR|=0xc0;

SEI();

}voidmain(void)

{

init_devices();

//insertyourfunctionalcodehere...

MC1602_init();

NRF905_System();

while(1)

{

}

}以上程序是发送部分连续发送’A’、’a’,’A’与’a’中间间隔一秒左右。接收部分显示所发送值,结果如图3.5所示。图3.5无线收发部分调试结果3.4总体调试3.4.1调试步骤以上调试的结果可知,各模块硬件与软件部分无误。确定了调试的基本思路,在此基础上根据流程图编写主程序main.c、main0.c、int_01.c、common.h、int_01.h、main0.h与上文中提到的C文件yejing.c、nrf905.c、jianpan.c和头文件yejing.h、nrf905.h、jianpan.h相结合,反复修改程序,并烧录程序,最终调试得出总体程序包括了6个C文件和6个头文件。主要流程图上文中已经提及。主体程序main.c见附录1、main0.c见附录2、int_01.c见附录3。3.4.2调试结果最终实现了英文短信机的基本功能,具有掉电存储短信(存储在EEPROM中)、时间调节和显示、编辑发送短信、读短信及其背光调节等功能。液晶显示共有六个界面,可通过按键“UP”和“DOWN”切换,具体介绍如下:开机界面:显示问候语“Hello”;新短信数“new:×”;时间××:××;写信息界面:显示“WRITE-MESSAGE”,“ESC”键切换大写字母、小写字母和数字的输入状态;“LEFT”为退格键;“RIGHT”为空格键;“ENTER”为发送键。读新信息界面:显示“R-MESSAGE”;新短信数“new:×”;“ENTER”为查看最新短信键。背光界面:显示“Light”;“ENTER”为开背光键,“ESC”为关背光键。时间调节界面:显示“time00:00”查看所有信息界面:显示“ALL-MESSAGE”,按“ENTER”键逐条查看存储信息。参考文献[1]马潮,AVR单片机嵌入式系统原理与应用实践[M],北京:北京航空航天大学出版社,2007,20~43,273~300[2]柯常志,柯长仁,精通protelDXP系统设计篇[M],北京:中国青年出版社,2005,247~283[3]黄智伟,无线发射与接收电路设计[M],北京:北京航空航天大学出版社,2004,865~896[4]佟长福,AVR单片机GCC程序设计[M],北京:北京航空航天大学出版社,2006,51~64[5]高吉祥,全国大学生电子设计竞赛培训系列教程-基础技能训练与单元电路设计[M],北京:电子工业出版社,2007,62~112,170~204,83~160,206~255,224[6]张军,AVR单片机应用系统开发典型实例[M],北京:中国电力出版社,2005,89~324[7]李长林,AVR单片机应用设计[M],北京:电子工业出版社,2005,14~46,46~119,126~181[8]张克彦,AVR单片机实用程序设计[M],北京:北京航空航天大学出版社,2004,148~195[9]彭为,黄科,雷道仲等,单片机典型系统设计实例精讲[M],北京:电子工业出版社,2006,44~46,60~94[10]黄智伟,无线通信集成电路[M],北京:北京航空航天大学出版社,2005,102~104,768~770[11]曹学军,无线电通信设备原理与系统应用[M],北京:机械工业出版社,2007,325~376[12]黄培根,Multisim10虚拟仿真和业余制版实用技术[M],北京:电子工业出版社,2008,23~143[13]Thompson,Kalee,ELECTRICITYINTHEAIR[J],PopularScience,2008,62-67[14]门刚,精通protelDXP模块范例篇[M],北京:中国青年出版社,2005,191~232[15]ShiPanan,Singlechip433/868/915MHzTransceivernRF905[J],PopularScience,2005,12~15[16]肖志勇杨小玲,基于nRF905芯片的无线传输设计与实现[J],计算机与现代化,2005,(9),121~126[17]郝妍娜,洪志良,基于MCU和nRF905的低功耗远距离无线传输系统[J],电子技术应用,2007,33(8),44-47附录1main.c#include"nrf905.h"#include"yejing.h"#include"jianpan.h"#include"main0.h"#include"int_01.h"//New,caidanbiaozhi[2]界面切换,ucharabc1time0[2]={0},//时间0计数key_lishi[4]={0,0,0,'a'}, //key_lishi[0]:历史纪录 //key_lishi[1]:按键累加器 //key_lishi[2]:键值转换结果time60s=0,//秒计数biaozhi=0,//biaozhi写信息按键输入数caidanbiaozhi[3]={0}, //界面切换:caidanbiaozhi[0] //界面是否进入:caidanbiaozhi[1] //保留上次:caidanbiaozhi[2] New[2]={'0',0},//新短信数time[6]={'2','1',':','4','2',0},//时间寄存 timeshedingwei=0,//设定时间位 caidanbiaozhi7=0;//显示所有信息第几个voidport_init(void)PORTA=0x00;DDRA=0xFF;PORTB=0x1F;DDRB=0x10;PORTC=0x7F;//m103outputonlyDDRC=0xFE;PORTD=0x0F;DDRD=0xF3;voidtimer0_init(void)TCCR0=0x00;//stopTCNT0=0x83;//setcountOCR0=0x7D;//setcompareTCCR0=0x03;//starttimer#pragmainterrupt_handlertimer0_ovf_isr:10voidtimer0_ovf_isr(void)TCNT0=0x83;//reloadcountervalueabc1time0[0]++;if(abc1time0[0]==255)abc1time0[0]=0;abc1time0[1]=1;TIMSK&=0xfe;voidtimer1_init(void)TCCR1B=0x00;//stopTCNT1H=0x85;//setupTCNT1L=0xEE;OCR1AH=0x7A;OCR1AL=0x12;OCR1BH=0x7A;OCR1BL=0x12;ICR1H=0x7A;ICR1L=0x12;TCCR1A=0x00;TCCR1B=0x04;//startTimer#pragmainterrupt_handlertimer1_ovf_isr:9voidtimer1_ovf_isr(void)//时间中断--1秒//TIMER1hasoverflowedTCNT1H=0x85;//reloadcounterhighvalueTCNT1L=0xEE;//reloadcounterlowvaluetime60s+=1;if(time60s==60)//到一分钟调用时间处理函数time60s=0;time[4]+=1;switchcase6();#pragmainterrupt_handlerint0_isr:2voidint0_isr(void)//externalinteruptonINT0CLI();//disableallinterruptsme_int0();//按键中断处理SEI();//re-enableinterrupts#pragmainterrupt_handlerint1_isr:3voidint1_isr(void)//externalinteruptonINT1CLI();//disableallinterruptsme_int1();//接收新信息中断处理--返回菜单0SEI();//re-enableinterrupts//callthisroutinetoinitializeallperipheralsvoidinit_devices(void)//stoperrantinterruptsuntilsetupCLI();//disableallinterruptsport_init();//端口初始化timer0_init();timer1_init();//定时器1初始化MC1602_init();//液晶初始化NRF905_System();//nrf905初始化/////////maga16寄存器初始化////////////////////////MCUCR=0x0E;GICR=0xC0;TIMSK=0x04;//timerinterruptsourcesSEI();//re-enableinterruptsGIFR|=0xc0;SEI();//re-enableinterruptsvoidinit_ruanjian(void)//开机新短息数New[0]=EEPROMread(2)+0x30;主函数入口voidmain(void)init_devices();//硬件初始化init_ruanjian();//软件初始化while(1)if(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==0)switchcase0();//显示菜单0--时间elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==1)switchcase1();//显示菜单1--写信息elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==2)switchcase2();//显示菜单2--查看新信息elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==3)switchcase3();//显示菜单3--背光elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==4)switchcase4();//延时1秒4--显示短息 elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==5)switchcase5();//延时1秒5--发送中elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==6)switchcase6();//处理函数6--时间处理显示elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==7)switchcase7();//显示菜单7--时间调节elseif(caidanbiaozhi[1]==0&&caidanbiaozhi[0]==8)switchcase8();//显示菜单8--查看所有信息else;附录2main0.c#include"main0.h"#include"nrf905.h"#include"yejing.h"#include"jianpan.h"#include"int_01.h"constucharbiaozhi_dizhi[32]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, 0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf};voidswitchcase0(void)//显示菜单0--时间caidanbiaozhi[1]=1; qping(); wc51r(0x80);display("Hello...new:");wc51r(0x8f);display(New);//wc51ddr(New+0x30);wc51r(0xc0);display("DOWN/UP");wc51r(0xcb);display(time);voidswitchcase1(void)//显示菜单1--写信息caidanbiaozhi[1]=1; qping();wc51r(0x80);display("WRITE-MESSAGE");//wc51r(0x8f);display(New);//wc51ddr(New+0x30);wc51r(0xc0);display("ENTER/DOWN/UP");//wc51r(0xcb);display(time);voidswitchcase2(void)//显示菜单2--查看新信息caidanbiaozhi[1]=1; qping();wc51r(0x80);display("R-MESSAGEnew:");wc51r(0x8f);display(New);//wc51ddr(New+0x30);wc51r(0xc0);display("ENTER/DOWN/UP");//wc51r(0xcb);dis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论