无线温度检测器--课程设计报告.docx_第1页
无线温度检测器--课程设计报告.docx_第2页
无线温度检测器--课程设计报告.docx_第3页
无线温度检测器--课程设计报告.docx_第4页
无线温度检测器--课程设计报告.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

信息工程学院课 程 设 计 报 告课程名称: 无线温度检测器 专 业: 电子信息工程 班 级: 学 号: 姓 名: 指导教师: 设计时间: 评定成绩: 无线温度监测器一、设计任务与要求1.实时获取被测对象温度,温度测量范围:10 +45;测量精度:0.1。2.无线传输实时获取的温度值,传输距离10m。3.实时显示接收到的温度值。4.基于单片机实现。二、课题分析与方案选择在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。无线系统具有不借助外部网络、不受布线限制的优点。本次课程设计把这两部分结合起来,用无线数据传输技术来实现温度传感器的温度数据采集。方案一:传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法的缺点是硬件电路相对复杂,需要比较多的外部硬件支持。方案二:采用DS18B20作为温度监测元件,并且基于STC89C52单片机设计温度测量及报警电路。本次设计采用方案二,采用无线收发模块NRF24L01来实现无线传输功能,温度测量范围-55+125,使用LCD液晶显示,并且能设置温度报警上下限。三、单元电路分析与设计1.原理分析单片机STC89C52 具有低电压供电和体积小等特点,晶振采用12MHz。复位电路采用上电加按钮复位。 晶振电路 复位电路 显示电路:显示电路采用LCD1602,滑动电阻R6用来调节背光亮度。 显示电路报警电路当单片机通电后,进入温度报警上下限调节,此时显示软件设置的温度报警上线,按s2对报警温度进行加一,按s3对报警温度进行减一。当实际温度超过所设温度上下限时,单片机P3.0口会输出高电平,红色led灯会亮起。 温度传感器:DS18B20 温度传感器是美国DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20 的性能特点如下:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个DS18B20 可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压范围为3.05.5;5、零待机功耗;6、温度以或位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20采用寄生电源供电方式,此时DS18B20 的1 脚接地,2 脚作为信号线,3 脚接电源。由于单线制只有一根线,因此发送接口必须是三态的。温度传感器无线收发模块nrf24l01输出功率频道选择和协议的设置可以通过SPI 接口进行设置,单片机可通过IRQ引脚快判断是否完成数据接收和数据发送。四、总原理图及元器件清单发送端:接收端:2.元件清单序号元器件名称型号主要参数数量备 注1无线收发模块NRF24L0122智能温度传感器DS18B2013单片机STC89C5224显示器LCD160215电容22nf46排阻10K27晶振12MHZ28稳压器az1117t-3.329按键开关310LED111蜂鸣器112电阻10K2五、安装与调试1调试过程描述 一开始接收端单片机通电后显示屏背光亮,内容无显示,经检测电路后发现信号控制线断裂。修复后显示屏能显示学号、字母信息,但是无法显示温度数字。初步判断是程序出问题,导致无线模块没有正确接收信号。之后更改程序,编程控制端口收发信号,最终调试成功。2实物照片六、性能测试与分析在本次设计中,利用单片机实现了温度测量,测量精度为0.1,在发送端温度传感器的数据能实时发送到接收端,无线传输距离达到10m以上,符合设计要求。 七、结论与心得从确定题目,研究原理图,制作电路板,到焊接调试,当中出现不少问题,但是我迎难而上,把问题逐个解决,最终完成课程设计,我从中积累了很多解决问题的宝贵经验。其中最大的问题是无线接收模块在接收温度信息时延迟比较大,后来通过查阅资料修改信道,问题得以解决。另一个问题是当温度计一通上电后,LED灯就会一直亮。在确定电路连接和原理图正确后依然不能解决,于是我跟同学讨论,发现是程序出错,使得单片机与LED相连的I/O口一直输出高电平,修改程序后温度计才正常工作!在排查问题过程中我的耐心得到了锻炼,并且与同学们的讨论更是让我受益匪浅!通过这次课程设计我进一步熟悉了单片机的内部结构和工作原理,了解到无线收发模块的使用方法,掌握了单片机应用系统设计的基本方法和步骤,让自己的理论水平和实践能力上升到一个新的台阶,同时我也认识到实践的重要性。发送端程序#include #include /#include api.h#define uchar unsigned char#define TX_ADR_WIDTH 5 / 发射地址的字节个数#define TX_PLOAD_WIDTH 2 /发射字节uchar const TX_ADDRESSTX_ADR_WIDTH=0x34,0x55,0x10,0x10,0x01;uchar rx_bufTX_PLOAD_WIDTH;uchar tx_bufTX_PLOAD_WIDTH;uchar distance_data2;uchar flag;/ 标志sbit CE=P10; /发射高电平大于 10MS 接收高电平sbit CSN=P11; /低电平 ISP 使能sbit SCK=P12; /下降沿sbit MOSI=P13; /MCU 出sbit MISO=P14; /MCU 入sbit IRQ=P15; /中断uchar bdata sta;sbit RX_DR =sta6; /接收数据准备就绪sbit TX_DS =sta5; /已发送数据sbit MAX_RT =sta4;sbit DQ=P30;unsigned char time; /设置全局变量,专门用于严格延时/*NRF24L01*/*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 / 自动应答功能设置#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 栈入栈出状态寄存器设置/*void init_io(void)CE=0;CSN=1;SCK=0;void delay_ms(unsigned int x)unsigned int i,j;for(i=0;ix;i+)j=108;while(j-);uchar SPI_RW(uchar byte)/ 发送指令,接受状态 ,返回值为状态值uchar bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+)MOSI = (byte&0x80);byte = (byte1);SCK = 1;byte|=MISO;SCK=0;return(byte);uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;CSN = 0;status = SPI_RW(reg);SPI_RW(value);CSN = 1;return(status);uchar SPI_Read(uchar reg)uchar reg_val;CSN = 0;SPI_RW(reg); / 写指令reg_val = SPI_RW(0); / 读 reg 的内容CSN = 1;return(reg_val);uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0;byte_ctrbytes;byte_ctr+)pBufbyte_ctr = SPI_RW(0);CSN = 1;return(status);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0; byte_ctrbytes; byte_ctr+)SPI_RW(*pBuf+);CSN = 1;return(status);void TX_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*/);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 次SPI_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;void checkflag() sta=SPI_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 的操作程序/*/void delay1ms()unsigned char i,j;for(i=0;i4;i+)for(j=0;j33;j+);/*函数功能:延时若干毫秒入口参数: n*/void delaynms(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*函数功能:将 DS18B20 传感器初始化,读取应答信号出口参数: flag*/bit Init_DS18B20(void)bit flag; /储存 DS18B20 是否存在的标志, flag=0 ,表示存在; flag=1 ,表示不存在DQ = 1; /先将数据线拉高for(time=0;time2;time+) / 略微延时约 6 微秒;DQ = 0; /再将数据线从高拉低,要求保持 480960usfor(time=0;time200;time+) /略微延时约 600 微秒; /以向 DS18B20 发出一持续 480960us 的低电平复位脉冲DQ = 1; /释放数据线(将数据线拉高)for(time=0;time10;time+); /延时约 30us(释放总线后需等待 1560us 让 DS18B20 输出存在脉冲)flag=DQ; /让单片机检测是否输出了存在脉冲( DQ=0 表示存在)for(time=0;time200;time+) /延时足够长时间,等待存在脉冲输出完毕;return (flag); /返回检测成功标志/*函数功能:从 DS18B20 读取一个字节数据出口参数: dat*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat; /储存读出的一个字节数据for (i=0;i8;i+)DQ =1; / 先将数据线拉高_nop_(); /等待一个机器周期DQ = 0; /单片机从 DS18B20 读书据时 ,将数据线从高拉低即启动读时序_nop_(); /等待一个机器周期DQ = 1; /将数据线 人为 拉高 ,为单片机检测 DS18B20 的输出电平作准备for(time=0;time=1;if(DQ=1)dat|=0x80; /如果读到的数据是 1,则将 1 存入 datelsedat|=0x00;/如果读到的数据是 0,则将 0 存入 dat/将单片机检测到的电平信号 DQ 存入 rifor(time=0;time8;time+); /延时 3us,两个读时序之间必须有大于 1us 的恢复期return(dat); /返回读出的十六进制数据/*函数功能:向 DS18B20 写入一个字节数据入口参数: dat*/WriteOneChar(unsigned char dat)unsigned char i=0;for (i=0; i8; i+)DQ =1; / 先将数据线拉高_nop_(); /等待一个机器周期DQ=0; /将数据线从高拉低时即启动写时序DQ=dat&0x01; /利用与运算取出要写的某位二进制数据 ,/并将其送到数据线上等待 DS18B20 采样for(time=0;time10;time+);/延时约 30us, DS18B20 在拉低后的约 1560us 期间从数据线上采样DQ=1; /释放数据线for(time=0;time=1; /将 dat 中的各二进制位数据右移 1 位for(time=0;time4;time+); /稍作延时 ,给硬件一点反应时间/*函数功能:做好读温度的准备*/void ReadyReadTemp(void)Init_DS18B20(); /将 DS18B20 初始化WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delaynms(150); / 转换一次需要延时一段时间Init_DS18B20(); /将 DS18B20 初始化WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0xBE); / 读取温度寄存器 ,前两个分别是温度的低位和高位void dwend(void) uchar TL; /储存暂存器的温度低位uchar TH; /储存暂存器的温度高位TL=ReadOneChar(); /先读的是温度值低位TH=ReadOneChar(); /接着读的是温度值高位distance_data0=TH ; /测量结果的高 8 位distance_data1=TL; /放入 16 位的高 8 位void main(void)uchar xx;init_io();while(1)ReadyReadTemp() ;dwend();checkflag();for(xx=0;xx2;xx+)tx_bufxx= distance_dataxx;/ 发数据之前必须把要发送的数据装入它TX_Mode(); /必须启动发送模块delay_ms(5);接收端#include #include #define uchar unsigned charuchar code digit11=0123456789-; /定义字符数组显示数字uchar code Str=3113001724; /说明显示的是温度/unsigned char code Error= DS18B20 ERROR; /说明没有检测到 DS18B20/unsigned char code Error1= PLEASE CHECK; /说明没有检测到 DS18B20uchar code Temp=Temp:; /说明显示的是温度uchar code Cent=C; /温度单位uchar tm2;uchar flg=0; /负温度标志 和临时暂存变量uchar tltemp;#define TX_ADR_WIDTH 5#define TX_PLOAD_WIDTH 2uchar const TX_ADDRESSTX_ADR_WIDTH=0x34,0x55,0x10,0x10,0x01;uchar rx_bufTX_PLOAD_WIDTH;uchar tx_bufTX_PLOAD_WIDTH;uchar flag;/ 标志int cout;sbit CE=P10; /发射高电平大于 10MS 接收高电平sbit CSN=P11; /低电平 ISP 使能sbit SCK=P12; /下降沿sbit MOSI=P13; /MCU 出sbit MISO=P14; /MCU 入sbit IRQ=P15; /中断uchar bdata sta;sbit RX_DR =sta6; /接收数据准备就绪sbit TX_DS =sta5; /已发送数据sbit MAX_RT =sta4;sbit RS=P25; /寄存器选择位,将 RS 位定义为 P2.0 引脚sbit RW=P26; /读写选择位,将 RW 位定义为 P2.1 引脚sbit E=P27; /使能信号位,将 E 位定义为 P2.2 引脚sbit BF=P07; /忙碌标志位, ,将 BF 位定义为 P0.7 引脚/*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 / 自动应答功能设置#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 栈入栈出状态寄存器设置/*void delay1ms()unsigned char i,j;for(i=0;i4;i+)for(j=0;j33;j+);/*函数功能:延时若干毫秒入口参数: n*/void delaynms(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();bit BusyTest(void)bit result;RS=0; /根据规定, RS 为低电平, RW 为高电平时,可以读状态RW=1;E=1; /E=1 ,才允许读写_nop_(); /空操作_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间result=BF; /将忙碌标志电平赋给 resultE=0; /将 E 恢复低电平return result;/*函数功能:将模式设置指令或显示地址写入液晶模块入口参数: dictate*/void WriteInstruction (unsigned char dictate)while(BusyTest()=1); /如果忙就等待RS=0; /根据规定, RS 和 R/W 同时为低电平时,可以写入指令RW=0;E=0; /E 置低电平 (根据表 8-6,写指令时, E 为高脉冲,/ 就是让 E 从 0 到 1 发生正跳变,所以应先置 0_nop_();_nop_(); /空操作两个机器周期,给硬件反应时间P0=dictate; /将数据送入 P0 口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=1; /E 置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:指定字符显示的实际地址入口参数: x*/void WriteAddress(unsigned char x)WriteInstruction(x|0x80); / 显示位置的确定方法规定为 80H+ 地址码 x/*函数功能:将数据 (字符的标准 ASCII 码)写入液晶模块入口参数: y(为字符常量 )*/void WriteData(unsigned char y)while(BusyTest()=1);RS=1; /RS 为高电平, RW 为低电平时,可以写入数据RW=0;E=0; /E 置低电平 (根据表 8-6,写指令时, E 为高脉冲,/ 就是让 E 从 0 到 1 发生正跳变,所以应先置 0P0=y; /将数据送入 P0 口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=1; /E 置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间E=0; /当 E 由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:对 LCD 的显示模式进行初始化设置*/void LcdInitiate(void)delaynms(15); /延时 15ms, 首次写指令时应给 LCD 一段较长的反应时间WriteInstruction(0x38); /显示模式设置: 16 2 显示, 5 7 点阵, 8 位数据接口delaynms(5); /延时 5ms ,给硬件一点反应时间WriteInstruction(0x38);delaynms(5); /延时 5ms ,给硬件一点反应时间WriteInstruction(0x38); /连续三次,确保初始化成功delaynms(5); /延时 5ms ,给硬件一点反应时间WriteInstruction(0x0c); /显示模式设置:显示开,无光标,光标不闪烁delaynms(5); /延时 5ms ,给硬件一点反应时间WriteInstruction(0x06); /显示模式设置:光标右移,字符不移delaynms(5); /延时 5ms ,给硬件一点反应时间WriteInstruction(0x01); /清屏幕指令,将以前的显示内容清除delaynms(5); /延时 5ms ,给硬件一点反应时间/*函数功能:显示说明信息*/void display_explain(void)unsigned char i;WriteAddress(0x00); /写显示地址,将在第 1 行第 1 列开始显示i = 0; /从第一个字符开始显示while(Stri != 0) /只要没有写到结束标志,就继续写WriteData(Stri); /将字符常量写入 LCDi+; /指向下一个字符delaynms(100); /延时 100ms 较长时间, 以看清关于显示的说明/*函数功能:显示温度符号*/void display_symbol(void)unsigned char i;WriteAddress(0x40); /写显示地址,将在第 2 行第 1 列开始显示i = 0; /从第一个字符开始显示while(Tempi != 0) /只要没有写到结束标志,就继续写WriteData(Tempi); /将字符常量写入 LCDi+; /指向下一个字符delaynms(50); /延时 1ms 给硬件一点反应时间/*函数功能:显示温度的小数点*/void display_dot(void)WriteAddress(0x49); /写显示地址,将在第 2 行第 10 列开始显示WriteData(.); /将小数点的字符常量写入 LCDdelaynms(50); /延时 1ms 给硬件一点反应时间/*函数功能:显示温度的单位 (Cent)*/void display_cent(void)unsigned char i;WriteAddress(0x4c); /写显示地址,将在第 2 行第 13 列开始显示i = 0; /从第一个字符开始显示while(Centi != 0) /只要没有写到结束标志,就继续写WriteData(Centi); /将字符常量写入 LCDi+; /指向下一个字符delaynms(50); /延时 1ms 给硬件一点反应时间/*函数功能:显示温度的整数部分入口参数: x*/void display_temp1(uchar x)uchar j,k,l; /j,k,l 分别储存温度的百位、十位和个位j=x/100; /取百位k=(x%100)/10; /取十位l=x%10; /取个位WriteAddress(0x46); /写显示地址 ,将在第 2 行第 7 列开始显示if(flg=1) /负温度时 显示“”WriteData(digit10); /将百位数字的字符常量写入 LCDelseWriteData(digitj); /将十位数字的字符常量写入 LCDWriteData(digitk); /将十位数字的字符常量写入 LCDWriteData(digitl); /将个位数字的字符常量写入 LCDdelaynms(5); /延时 1ms 给硬件一点反应时间/*函数功能:显示温度的小数数部分入口参数: x*/void display_temp2(uchar x)WriteAddress(0x4a); /写显示地址 ,将在第 2 行第 11 列开始显示WriteData(digitx); /将小数部分的第一位数字字符常量写入 LCDdelaynms(5); /延时 1ms 给硬件一点反应时间void init_io(void)CE=0;CSN=1;SCK=0;void delay_ms(unsigned

温馨提示

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

评论

0/150

提交评论