基于单片机的无线温度计设计报告_第1页
基于单片机的无线温度计设计报告_第2页
基于单片机的无线温度计设计报告_第3页
基于单片机的无线温度计设计报告_第4页
基于单片机的无线温度计设计报告_第5页
免费预览已结束,剩余36页可下载查看

付费下载

下载本文档

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

文档简介

1、五邑大学信息工程学院课程设计报告课程名称:无线温度检测器专业:电子信息工程班级:学号:姓名:指导教师:设计时间:2016年10月评定成绩:无线温度监测器、设计任务与要求1 .实时获取被测对象温度,温度测量范围:-10C+45C;测量精度:±0.1C2 .无线传输实时获取的温度值,传输距离10m。3 .实时显示接收到的温度值。4 .基于单片机实现。、课题分析与方案选择在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。无线系统具有不借助外部网络、不受布线限制的优点。本次课程设计把这两部分结合起来,用无线数据传输技术来实现温度传感

2、器的温度数据采集。方案一:传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法的缺点是硬件电路相对复杂,需要比较多的外部硬件支持。方案二:采用DS18B20作为温度监测元件,并且基于STC89C52单片机设计温度测量及报警电路。本次设计采用方案二,采用无线收发模块NRF24L01来实现无线传输功能,温度测量范围-55C+125C,使用LCD液晶显示,并且能设置温度报警上下限。三、单元电路分析与设计1.原理分析单片机STC89C5须有低电压供电和体积小等特点,晶振采用12MHz复位电路采用上电加按钮复位。P33-3TP3.4.'T®P

3、3FL6.Pa.7亚XTAL2XTAllGKDGKDPL11P1.ZP1.1?L+Pl5PIE§STP3JE邛11?3.:'注3晶振电路复位电路显示电路:显示电路采用LCD1602滑动电阻R6用来调节背光亮度报警电路当单片机通电后,进入温度报警上下限调节,此时显示软件设置的温度报警上线,按s2对报警温度进行加一,按S3对报警温度进行减一。当实际温度超过所设温度上下限时,单片机P3.0口会输出高电平,红色led灯会亮起。温度传感器:DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可

4、根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压范围为3.05.5V;5、零待机功耗;6、温度以9或12位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B2C0R用寄生电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。由于单线制只有一根线,因此发送接口必须是

5、三态的。TT温度传感器无线收发模块nrf24l01输出功率频道选择和协议的设置可以通过SPI接口进行设置,单片机可通过IRQ引脚快判断是否完成数据接收和数据WI|卜2刖用哙4无2四、总原理图及元器件清单发送端:Q告1,匕PIJPS*PU5PiSP1JRSI叫口gCDP=I-JP22迎F53cm的鼻MP35T5_PWS逅FC记XuJLL:XTALIGXD1ccADC'电。ADFlqlADI冷1AEW】“皿ADJ*C5皿亚里石raoo.ui.AI5Pl'AL4P1*AE3PI54匕mAEEPI3AtOP12MPHljdPiD32弱nr接收端:匚迎豆】3II4P50RWP3.ITXD

6、P31画;*3向PJATOP-5n_PS5赤中,无XTALlXTALIONDPHQG.ILE痔A35P27ADC1100AD31«1AD:i»OJADj:m曲田国ADii-5ADf加叱AD|l'GNDLL12AB.P25A32PHMPim浦2A3.P11AEP1DGNELB1娟XG迎2.元件清单4P元器件名称型号主要参数数量备注1无线收发模块NRF24L0122智能温度传感器DS18B2013单片机STC89C5224显示器LCD160215电容22nf46排阻10K27晶振12MHZ28稳压器az1117t-3.329按键开关310LED111蜂鸣器112电阻10

7、K2五、安装与调试1.调试过程描述一开始接收端单片机通电后显示屏背光亮,内容无显示,经检测电路后发现信号控制线断裂。修复后显示屏能显示学号、字母信息,但是无法显示温度数字。初步判断是程序出问题,导致无线模块没有正确接收信号。之后更改程序,编程控制端口收发信号最终调试成功。2.实物照片六、性能测试与分析在本次设计中,利用单片机实现了温度测量,测量精度为±0.1C,在发送端温度传感器的数据能实时发送到接收端,无线传输距离达到10m以上,符合设计要求。七、结论与心得从确定题目,研究原理图,制作电路板,到焊接调试,当中出现不少问题,但是我迎难而上,把问题逐个解决,最终完成课程设计,我从中积累

8、了很多解决问题的宝贵经验。其中最大的问题是无线接收模块在接收温度信息时延迟比较大,后来通过查阅资料修改信道,问题得以解决。另一个问题是当温度计一通上电后,LED灯就会一直亮。在确定电路连接和原理图6正确后依然不能解决,于是我跟同学讨论,发现是程序出错,使得单片机与LED相连的I/O口一直输出高电平,修改程序后温度计才正常工作!在排查问题过程中我的耐心得到了锻炼,并且与同学们的讨论更是让我受益匪浅!通过这次课程设计我进一步熟悉了单片机的内部结构和工作原理,了解到无线收发模块的使用方法,掌握了单片机应用系统设计的基本方法和步骤,让自己的理论水平和实践能力上升到一个新的台阶,同时我也认识到实践的重要

9、性。程序(程序本身没问题,只是排版乱了,大家下载回来注意修改一下双斜杠,双斜杠后面的内容会变成注释,不需要删减内容,只需要修正好回车键,都是行数的问题)发送端:#include<reg51.h>#include<intrins.h>/#include"api.h"#defineucharunsignedchar# defineTX_ADR_WIDTH5/发射地址的字节个数# defineTX_PLOAD_WIDTH2/发射字节ucharconstTX_ADDRESSTX_ADR_WIDTH=0x34,0x55,0x10,0x10,0x01;uchar

10、rx_bufTX_PLOAD_WIDTH;uchartx_bufTX_PLOAD_WIDTH;uchardistance_data2;ucharflag;/标志sbitCE=Pi0;发射高电平大于10MS接收高电平sbitCSN=Pi1;/低电平ISP使能sbitSCK=PM2;下降沿sbitMOSI=P1A3;/MCU出sbitMISO=P1A4;/MCU入sbitIRQ=P1A5;中断ucharbdatasta;sbitRX_DR=staA6;接收数据准备就绪sbitTX_DS=staA5;/已发送数据sbitMAX_RT=staA4;sbitDQ=P3A0;unsignedchartim

11、e;假置全局变量,专门用于严格延时H*NRF24L01*/*NRF24L01寄存器指令# defineREAD_REG0x00/读寄存器指令# defineWRITE_REG0x20/写寄存器指令# defineRD_RX_PLOAD0x61/读取接收数据指令# defineWR_TX_PLOAD0xA0/写待发数据指令# defineFLUSH_TX0xE1/冲洗发送FIFO指令# defineFLUSH_RX0xE2/冲洗接收FIFO指令# defineREUSE_TX_PL0xE3/定义重复装载数据指令# defineNOP0xFF/保留8寄存器地址*# defineCONFIG0x00

12、/配置收发状态,CRC校验模式以及收发状态响应方式# defineEN_AA0x01/自动应答功能设置# defineEN_RXADDR0x02/可用信道设置# defineSETUP_AW0x03/收发地址宽度设置# defineSETUP_RETR0x04/自动重发功能设置# defineRF_CH0x05/工作频率设置# defineRF_SETUP0x06/发射速率、功耗功能设置# defineSTATUS0x07/状态寄存器# defineOBSERVE_TX0x08/发送监测功能# defineCD0x09/地址检测#defineRX_ADDR_P00x0A/频道0接收数据地址#d

13、efineRX_ADDR_P10x0B/频道1接收数据地址#defineRX_ADDR_P20x0C/频道2接收数据地址#defineRX_ADDR_P30x0D/频道3接收数据地址#defineRX_ADDR_P40x0E/频道4接收数据地址#defineRX_ADDR_P50x0F/频道5接收数据地址#defineTX_ADDR0x10/发送地址寄存器#defineRX_PW_P00x11/接收频道0接收数据长度#defineRXPWP10x12/接收频道0接收数据长度#defineRX_PW_P20x13/接收频道0接收数据长度#defineRX_PW_P30x14/接收频道0接收数据长

14、度#defineRX_PW_P40x15/接收频道0接收数据长度#defineRX_PW_P50x16/接收频道0接收数据长度#defineFIFO_STATUS0x17/FIFO栈入栈出状态寄存器设置H*voidinit_io(void)CE=0;CSN=1;SCK=0;voiddelay_ms(unsignedintx)unsignedinti,j;for(i=0;i<x;i+)j=108;while(j-);10ucharSPI_RW(ucharbyte)发送指令,接受状态,返回值为状态值(ucharbit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ct

15、r+)(MOSI=(byte&0x80);byte=(byte<<1);SCK=1;byte|=MISO;SCK=0;return(byte);ucharSPI_RW_Reg(ucharreg,ucharvalue)(ucharstatus;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);11ucharSPI_Read(ucharreg)(ucharreg_val;CSN=0;SPI_RW(reg);/写指令reg_val=SPI_RW(0);/读reg的内容CSN=1;return(reg_val);

16、ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes)(ucharstatus,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr+)pBufbyte_ctr=SPI_RW(0);CSN=1;return(status);ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)(ucharstatus,byte_ctr;CSN=0;12status=SPI_RW(reg);for(byte_ctr=0;byt

17、e_ctr<bytes;byte_ctr+)SPI_RW(*pBuf+);CSN=1;return(status);voidTX_Mode(void)CE=0;SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS/*接收模块的地址*/,TX_ADR_WIDTH/*地址宽度5*/);SPI_Write_Buf(WRITE_REG+RX_ADDR_P0/*通道0接收数据地址*/,TX_ADDRESS,TX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD,/*写待发数据指令a0*/tx_buf,TX_PLOAD_WIDTH/*20*/)

18、;SPI_RW_Reg(WRITE_REG+EN_AA,0x01);数据通道0应答允许SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);/接收数据通道0允许SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);等待500+86us自动重发10次13SPI_RW_Reg(WRITE_REG+RF_CH,40);SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);数据传输率1Mbps,发射功率0dBmSPI_RW_Reg(WRITE_REG+CONFIG,0x0e);/配置寄存器CE=1;voidcheckflag()sta=SPI

19、_Read(STATUS);/读状态寄存器/if(RX_DR)/SPI_Read_Buf(RD_RX_PLOAD/*读取接收数据才旨令*/,rx_buf/*数组20*/,TX_PLOAD_WIDTH/*20*/);/flag=1;/if(MAX_RT)SPI_RW_Reg(FLUSH_TX/*冲洗发送FIFO指令*/,0);SPI_RW_Reg(WRITE_REG+STATUS,sta);清除中断以下是DS18B20的操作程序*14*voiddelay1ms()unsignedchari,j;for(i=0;i<4;i+)for(j=0;j<33;j+)/*函数功能:延时若干毫秒入

20、口参数:n*voiddelaynms(unsignedcharn)unsignedchari;for(i=0;i<n;i+)delay1ms();/*函数功能:将DS18B20传感器初始化,读取应答信号flag*15bitInit_DS18B20(void)(bitflag;/储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ=1;/先将数据线拉高for(time=0;time<2;time+)/略微延时约6微秒5DQ=0;/再将数据线从高拉低,要求保持480960usfor(time=0;time<200;time+)/略微延时约600微

21、秒;以向DS18B20发出一持续480960us的低电平复位脉冲DQ=1;/释放数据线(将数据线拉高)for(time=0;time<10;time+);延时约30us(释放总线后需等待1560us让DS18B20输出存在脉冲)flag=DQ;/让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time+)/延时足够长时间,等待存在脉冲输出完毕5return(flag);/返回检测成功标志尸*函数功能:从DS18B20读取一个字节数据dat*/unsignedcharReadOneChar(void)16unsignedchari=0;uns

22、ignedchardat;/储存读出的一个字节数据for(i=0;i<8;i+)(DQ=1;/先将数据线拉高_nop_();/等待一个机器周期DQ=0;/单片机从DS18B20读书据时,将数据线从高拉低即启动读时序_nop_();/等待一个机器周期DQ=1;/将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time<2;time+);延时约6us,使主机在15us内采样dat>>=1;if(DQ=1)dat|=0x80;/彼口果读到白数据是1,则将1存入datelsedat|=0x00;/如果读到白数据是0,则将

23、0存入dat将单片机检测到的电平信号DQ存入rifor(time=0;time<8;time+);延时3us,两个读时序之间必须有大于1us的恢复期17return(dat);返回读出的十六进制数据)尸*函数功能:向DS18B20写入一个字节数据入口参数:dat*/WriteOneChar(unsignedchardat)(unsignedchari=0;for(i=0;i<8;i+)(DQ=1;/先将数据线拉高_nop_();/等待一个机器周期DQ=0;/将数据线从高拉低时即启动写时序DQ=dat&0x01;/利用与运算取出要写的某位二进制数据,并将其送到数据线上等待DS

24、18B20采样for(time=0;time<10;time+),延时约30us,DS18B20在拉低后的约1560us期间从数据线上采样DQ=1;/释放数据线for(time=0;time<1;time+);/延时3us,两个写时序间至少需要1us的恢复期dat>>=1;/将dat中的各二进制位数据右移1位18for(time=0;time<4;time+);稍作延时,给硬件一点反应时间)尸*函数功能:做好读温度的准备*/voidReadyReadTemp(void)(Init_DS18B20();将DS18B20初始化WriteOneChar(0xCC);/跳

25、过读序号列号的操作WriteOneChar(0x44);/启动温度转换delaynms(150);/转换一次需要延时一段时间Init_DS18B20();将DS18B20初始化WriteOneChar(0xCC);/跳过读序号列号的操作WriteOneChar(0xBE);/读取温度寄存器,前两个分别是温度的低位和高位)voiddwend(void)ucharTL;/储存暂存器的温度低位ucharTH;/储存暂存器的温度高位TL=ReadOneChar();/冼读的是温度值低位TH=ReadOneChar();傕着读的是温度值高位distance_data0=TH;/M量结果的高8位19dis

26、tance_data1=TL;放入16位的高8位)voidmain(void)(ucharxx;init_io();while(1)(ReadyReadTemp();dwend();checkflag();for(xx=0;xx<2;xx+)(tx_bufxx=distance_dataxx;/发数据之前必须把要发送的数据装入它)TX_Mode();/必须启动发送模块delay_ms(5);)接收端:#include<reg51.h>20#include<intrins.h>#defineucharunsignedcharucharcodedigit11=&quo

27、t;0123456789-");/定义字符数组显示数字ucharcodeStr尸"3113001731”;/说明显示的是温度/unsignedcharcodeError="DS18B20ERROR"说明没有检测到DS18B20/unsignedcharcodeError1="PLEASECHECK"说明没有检测到DS18B20ucharcodeTemp="wendu:"/说明显示的是温度ucharcodeCent="C"/温度单位uchartm2;ucharflg=0;/负温度标志和临时暂存变量

28、uchartltemp;#defineTX_ADR_WIDTH5#defineTX_PLOAD_WIDTH2ucharconstTX_ADDRESSTX_ADR_WIDTH=0x34,0x55,0x10,0x10,0x01;ucharrx_bufTX_PLOAD_WIDTH;uchartx_bufTX_PLOAD_WIDTH;ucharflag;/标志intcout;sbitCE=Pi0;发射高电平大于10MS接收高电平sbitCSN=Pi1;/低电平ISP使能21sbitSCK=PM2;下降沿sbitMOSI=P1A3;/MCU出sbitMISO=P1A4;/MCU入sbitIRQ=P1A5

29、;中断ucharbdatasta;sbitRX_DR=staA6;接收数据准备就绪sbitTX_DS=staA5;/已发送数据sbitMAX_RT=staA4;sbitRS=P2A5;/停存器选才1位,将RS位定义为P2.0引脚sbitRW=P2A6;读写选择位,将RW位定义为P2.1引脚sbitE=P2A7;使能信号位,将E位定义为P2.2引脚/*NRF24L01寄存器指令#defineREAD_REG0x00/读寄存器指令#defineWRITE_REG0x20/写寄存器指令#defineRD_RX_PLOAD0x61/读取接收数据指令# defineWR_TX_PLOAD0xA0/写待发

30、数据指令# defineFLUSH_TX0xE1/冲洗发送FIFO指令# defineFLUSH_RX0xE2/冲洗接收FIFO指令# defineREUSE_TX_PL0xE3/定义重复装载数据指令# defineNOP0xFF/保留22sbitBF=P0A7;/忙碌标志位,将BF位定义为P0.7引脚*寄存器地址# defineCONFIG0x00/配置收发状态,CRC校验模式以及收发状态响应方式# defineEN_AA0x01/自动应答功能设置# defineEN_RXADDR0x02/可用信道设置# defineSETUP_AW0x03/收发地址宽度设置# defineSETUP_RE

31、TR0x04/自动重发功能设置# defineRF_CH0x05/工作频率设置# defineRF_SETUP0x06/发射速率、功耗功能设置# defineSTATUS0x07/状态寄存器# defineOBSERVE_TX0x08/发送监测功能# defineCD0x09/地址检测# defineRX_ADDR_P00x0A/频道0接收数据地址# defineRX_ADDR_P10x0B/频道1接收数据地址# defineRX_ADDR_P20x0C/频道2接收数据地址# defineRX_ADDR_P30x0D/频道3接收数据地址# defineRX_ADDR_P40x0E/频道4接收数

32、据地址# defineRX_ADDR_P50x0F/频道5接收数据地址#defineTX_ADDR0x10/发送地址寄存器#defineRX_PW_P00x11/接收频道0接收数据长度23#defineRX_PW_P10x12/接收频道0接收数据长度#defineRXPWP20x13/接收频道0接收数据长度#defineRX_PW_P30x14/接收频道0接收数据长度#defineRX_PW_P40x15/接收频道0接收数据长度#defineRX_PW_P50x16/接收频道0接收数据长度#defineFIFO_STATUS0x17/FIFO栈入栈出状态寄存器设置H*voiddelay1ms(

33、)unsignedchari,j;for(i=0;i<4;i+)for(j=0;j<33;j+);/*函数功能:延时若干毫秒入口参数:n*/voiddelaynms(unsignedcharn)unsignedchari;24for(i=0;i<n;i+)delay1ms();)bitBusyTest(void)(bitresult;RS=0;/根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;/E=1,才允许读写_nop_();空操作_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间result=BF;将忙碌标志电平赋给r

34、esultE=0;/将E恢复低电平returnresult;)尸*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*voidWriteInstruction(unsignedchardictate)25while(BusyTest()=1);如果忙就等待RS=0;/服据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;/E置低电平(根据表8-6,写指令时,E为高脉冲,/就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_();/空操作两个机器周期,给硬件反应时间P0=dictate;/幅数据送入P0口,即写入指令或地址_

35、nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间E=1;/E置高电平_nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间E=0;/当E由高电平跳变成低电平时,液晶模块开始执行命令尸*函数功能:指定字符显示的实际地址26入口参数:x*1voidWriteAddress(unsignedcharx)(WriteInstruction(x|0x80);/显示位置的确定方法规定为"80H+地址码x")尸*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)*

36、/voidWriteData(unsignedchary)(while(BusyTest()=1);RS=1;/RS为高电平,RW为低电平时,可以写入数据RW=0;E=0;/E置低电平(根据表8-6,写指令时,E为高脉冲,/就是让E从0到1发生正跳变,所以应先置"0"P0=y;/将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间27E=1;/E置高电平_nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间E=0;/当E由高电平跳变成低电平时,

37、液晶模块开始执行命令)尸*函数功能:对LCD的显示模式进行初始化设置*/voidLcdlnitiate(void)(delaynms(15);/施日115ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38);/显示模式设置:16X2显示,5X7点阵,8位数据接口delaynms(5);/延日t5ms,给硬件一点反应时间WriteInstruction(0x38);delaynms(5);/延日t5ms,给硬件一点反应时间WriteInstruction(0x38);/连续三次,确保初始化成功delaynms(5);/延日t5ms,给硬件一点反应时间Writ

38、eInstruction(0x0c);/显示模式设置:显示开,无光标,光标不闪烁delaynms(5);/延日t5ms,给硬件一点反应时间WriteInstruction(0x06);/显示模式设置:光标右移,字符不移28delaynms(5);/延日t5ms,给硬件一点反应时间WHteInstruction(0x01);清屏幕指令,将以前的显示内容清除delaynms(5);/延日t5ms,给硬件一点反应时间尸*函数功能:显示说明信息*voiddisplay_explain(void)unsignedchari;WriteAddress(0x00);/写显示地址,将在第1行第1列开始显示i=

39、0;/从第一个字符开始显示while(Stri!='0')/只要没有写到结束标志,就继续写WriteData(Stri);将字符常量写入LCDi+;指向下一个字符delaynms(100);侬日1100ms较长时间,以看清关于显示的说明尸*函数功能显示温度符29*voiddisplay_symbol(void)(unsignedchari;WriteAddress(0x40);/写显示地址,将在第2行第1列开始显示i=0;/从第一个字符开始显示while(Tempi!='0')/只要没有写到结束标志,就继续写(WriteData(Tempi);/将字符常量写入L

40、CDi+;指向下一个字符delaynms(50);/施日11ms给硬件一点反应时间)尸*函数功能:显示温度的小数点*/voiddisplay_dot(void)(WriteAddress(0x49);/写显示地址,将在第2行第10列开始显示WriteData('.');/将小数点的字符常量写入LCDdelaynms(50);/施日11ms给硬件一点反应时间)*30函数功能:显示温度的单位(Cent)*voiddisplay_cent(void)unsignedchari;WriteAddress(0x4c);/写显示地址,将在第2行第13列开始显示i=0;/从第一个字符开始显示

41、while(Centi!='0')/只要没有写到结束标志,就继续写WriteData(Centi);将字符常量写入LCDi+;指向下一个字符delaynms(50);/施日11ms给硬件一点反应时间尸*函数功能:显示温度的整数部分入口参数:x*voiddisplay_temp1(ucharx)ucharj,k,l;/j,k,l分别储存温度的百位、十位和个位j=x/100;/取百位k=(x%100)/10;/取十位31l=x%10;/取个位WHteAddress(0x46);/写显示地址,将在第2行第7列开始显示if(flg=1)/负温度时显示“一”(WriteData(digi

42、t10);/将百位数字的字符常量写入LCDelseWriteData(digitj);/将十位数字的字符常量写入LCDWriteData(digitk);/将十位数字的字符常量写入LCDWriteData(digitl);/将个位数字的字符常量写入LCDdelaynms(5);/延日11ms给硬件一点反应时间尸*函数功能:显示温度的小数数部分入口参数:x*/voiddisplay_temp2(ucharx)WriteAddress(0x4a);/隹1r显示地址,将在第2行第11列开始显示WriteData(digitx);/将小数部分的第一位数字字符常量写入LCDdelaynms(5);/延日

43、11ms给硬件一点反应时间32voidinit_io(void)(CE=0;CSN=1;SCK=0;)voiddelay_ms(unsignedintx)(unsignedinti,j;for(i=0;i<x;i+)(j=108;while(j-);)ucharSPI_RW(ucharbyte)ucharbit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr+)MOSI=(byte&0x80);byte=(byte<<1);33SCK=1;byte|=MISO;SCK=0;)return(byte);)ucharSPI_RW_Reg(uc

44、harreg,ucharvalue)(ucharstatus;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);)ucharSPI_Read(ucharreg)(ucharreg_val;CSN=0;SPI_RW(reg);reg_val=SPI_RW(0);CSN=1;34return(reg_val);)ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes)(ucharstatus,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr+)pBufbyte_ctr=SPI_RW(0);CSN=1;return(status);)ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)(ucharstatus,byte_ctr;CSN=0;status=SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr+)SPI_RW(*pBuf+);CSN=1;return(status);)voidRX_Mode(void)35CE=0;SPI_Write_Bu

温馨提示

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

评论

0/150

提交评论