《2022年基于单片机的数字温度计设计课程设计.docx》由会员分享,可在线阅读,更多相关《2022年基于单片机的数字温度计设计课程设计.docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022年基于单片机的数字温度计设计课程设计 基于单片机的数字温度计设计 引言 随着现代信息技术的飞速发展和传统工业改造的逐步实现能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且牢靠性相对较差,测温精确度低,检测系统也有肯定的误差。与传统的温度计相比,这里设计的数字温度计具有读数便利,测温范围广,测温精确,数字显示,适用范围宽等特点。选用AT89C51型单片机作为主限制器件,DSl8B20作为测温传感器通过4位共阳极LED数码管串口传送数据,实现温度显示。通过DSl8B20干脆读取被测温度值,进行数据转换,该器
2、件的物理化学性能稳定,线性度较好,在0100最大线性偏差小于0.1。该器件可干脆向单片机传输数字信号,便于单片机处理及限制。另外,该温度计还能干脆采纳测温器件测量温度,从而简化数据传输与处理过程。 2 系统硬件设计方案 依据系统功能要求,构造图1所示的系统原理结构框图。 图1 系统原理结构框图 2.1 单片机的选择 AT89C51作为温度测试系统设计的核心器件。该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采纳了牢靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS51的CMOS产品。不仅结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,而且继承和扩展了
3、MCS48单片机的体系结构和指令系统。单片机小系统的电路图如图2所示。 图2 单片机小系统电路 AT89C51单片机的主要特性: 与MCS-51 兼容,4K字节可编程闪耀存储器; 敏捷的在线系统编程,掉电标识和快速编程特性; 寿命为1000次写/擦周期,数据保留时间可10年以上; 全静态工作模式:0Hz-33Hz; 三级程序存储器锁定; 128*8位内部RAM,32可编程I/O线; 两个16位定时器/计数器,6个中断源; 全双工串行UART通道,低功耗的闲置和掉电模式; 看门狗(WDT)及双数据指针; 片内振荡器和时钟电路; 2.2 温度传感器介绍 DS18B20可以程序设定912位的辨别率,
4、精度为0.5C。可选更小的封装方式,更宽的电压适用范围。辨别率设定,及用户设定的报警温度存储在EPROM中,掉电后依旧保存。 温度传感器DS18B20引脚如图3所示。 8引脚封装 TO92封装 图3 温度传感器 引脚功能说明: NC :空引脚,悬空不运用; VDD :可选电源脚,电源电压范围35.5V。当工作于寄生电源时,此引脚必需接地。 DQ :数据输入/输出脚。漏极开路,常态下高电平。 GND :为电源地 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18
5、B20的地址序列码。64位光刻ROM的排列是:起先8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最终8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式供应,以0.0625/LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,假如测得的温度大于0,这5位为0,只要
6、将测到的数值乘于0.0625即可得到实际温度;假如温度小于0,这5位为1,测到的数值须要取反加1再乘于0.0625即可得到实际温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,其次个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字
7、节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。 该字节各位的意义如下: TM R1 R0 1 1 1 1 1 低五位始终都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置辨别率,如表1所示:(DS18B20出厂时被设置为12位) 表1 DS18B20温度转换时辰表 R1 R0 辨别率/位 温度最大转向时间 0 0 9 93.75 0 1 10 187.5 1 0 11 375 1 1 12 750 依据DS18B20
8、的通讯协议,主机限制DS18B20完成温度转换必需经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位胜利后发送一条ROM指令,最终发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位胜利。 2.3 温度传感器与单片机的连接 温度传感器的单总线与单片机的P20连接,P20是单片机的高位地址线A8。P2端口是一个带内部上拉电阻的8位双向IO,其输出缓冲级可驱动4个TTL逻辑门电路。对该端口写“1”,可通过内部上拉电阻将其端口拉至
9、高电平,此时可作为输入口运用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时。如执行MOVX DPTR指令,则表示P2端口送出高8位的地址数据。在访问8位地址的外部数据存储器时,可执行MOVX RI指令,P2端口内容即为特别功能寄存器区中R2寄存器内容,整个访问期间不变更。在Flash编程和程序校验时,P2端口也接收高位地址和其他限制信号。图4为DSl8820内部结构。图5为DSl8820与单片机的接口电路。 图4 DS18B20内部结构图 图5 DS18B20和单片机的接口连接 2.4 复位信号及外部复位电路 单片机的P1
10、.6端口是MAX813看门狗电路中喂狗信号的输入端,即单片机每执行一次程序就设置一次喂狗信号,清零看门狗器件。若程序出现异样,单片机引脚RST将出现两个机器周期以上的高电平,使其复位。该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。若运用频率为12 MHz的晶体振荡器,则复位信号持续时间应超过2s才完成复位操作。 2.5 单片机与报警电路 系统中的报警电路是由发光二极管和限流电阻组成,并与单片机的P1.2端口连接。P1端口的作用和接法与P2端口相同,不同的是在Flash编程和程序校验期间,P1接收低8位地址数据。 2.6 电源电路 由于该系统须要稳定的5 V电源,因
11、此设计时必需采纳能满意电压、电流和稳定性要求的电源。该电源采纳三端集成稳压器LM7805。它仅有输入端、输出端及公共端3个引脚,其内部设有过流爱护、过热爱护及调整管平安爱护电路由于所需外接元件少,运用便利、牢靠,因此可作为稳压电源。图6为电源电路连接图。 图6 电源电路连接图 2.7 显示电路 采纳技术成熟的74HCl64实现串并转换。LED显示分为静态显示和动态显示。这里采纳静态显示,系统通过单片机的串行口来实现静态显示。串行口为方式零状态,即工作在移位寄存器方式,波特率为振荡频率的1/12。当器件执行任何一条将SBUF作为目的寄存器的吩咐时,数据便起先从RXD端发送。在写信号有效时,相隔一
12、个机器周期后发送限制端SEND有效,即允许RXD发送数据,同时允许从TXD端输出移位脉冲。图7为显示电路的连接图。 图7 显示电路的连接图 2.8 看门狗电路 系统中把P1.6作为看门狗的“喂狗”信号;将MAX813的RESET与单片机的复位信号RST连接。由于单片机每执行一次程序,就会给看门狗器件一个复位信号,这样也可以用手工方式实现复位。当按键按下时,SWSPST就会在MAX813引脚产生一个超过200 ms的低电平,其实看门狗器件在1.6 s时间内没有复位,使7引脚输出一个复位信号的作用是相同的,其连接图如图8所示。 图8 看门狗器件的MAX813的连接图 3 软件设计 DSl8820的
13、主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSBl820可以从单总线获得电源,当信号线为高电平常,将能量贮存在内部电容器中;当单信号线为低电平常,将该电源断开,直到信号线变为高电平重新接上寄生电源为止。此外,还可外接5 V电源,给DSl8820供电。DSl8820的供电方式敏捷,利用外接电源还可增加系统的稳定性和牢靠性。图9为读取数据流程图。 起先 DS18B20的初始化 启动温度转换 读取温度寄存器 跳过读序列号的操作 跳过读序列号的操作 DS18B20的初始化 RET LOW-低八位 HIGH-高八位 图9 读取数据的流程图 读出温度
14、数据后,LOW的低四位为温度的小数部分,可以精确到0.0625,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5的话,向个位进1;小于0.5的时候,舍去不要。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55,所以可以将整数部分的最高位换成一个“-”,表示为负数。图10为温度数据处理程序的流程图。 起先 提取整数部分存入HT 提取小数部分存入LT LT右移三位,将精度降低到0.5摄氏度
15、 HT+ 将小数部分整数化 提取符号部分存入sign LT是否大于5 Sign=?0XF0 RET 负数表示flag=1 HT=HT+1 Y N N Y 图10 温度数据处理流程图 4 数据测试 将温度传感器与冰水混合物接触,经过充分搅拌达到热平衡后调整系统,使显示读数为0.00;利用气压计读出当时当地的大气压强,并依据大气压强和当地重力加速度计算出当时的实际压强;依据沸点与压强的关系查出沸点温度。把温度传感器放入沸水中,待显示读数稳定后重新调整,使显示器显示读数等于当地当时沸点温度后工作结束。该温度计的量程为-50150,读数精度为0.1,实际运用一般在0100。采纳050和50100的精密
16、水银温度计作检验标准,对设计的温度计进行测试,其结果表明能达到该精度要求。 5 总结与体会 作为一名电子信息工程的大四学生,我觉得做单片机课程设计是很有意义的,而且也是必要的。在做这次课程设计的过程中,我感受最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的实际资料是非常必要的,也是必不行少的。 其次,在这次课程设计中,我们运用了以前学过的专业课学问,如:proteus仿真、汇编语言、模拟和数字电路学问等。虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发觉效率很高,这是我做这次课程设计的又一收获。 最终,要做好一个课程设计,就必需做到:在设计程序之前,对所用单
17、片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清楚的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和沟通供应了便利;在设计中遇到的问题要记录,以免下次遇到同样的问题。 在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论学问用到实际当中,学习单片机更是如此,程序只有在常常写与读的过程中才能提高,这就是这次课程设计的最大收获。 附录1 仿真图 附录2 程序源代码 DATA_BUS BIT P3.3 FLAG BIT 00H ;标记位 TEMP
18、_L EQU 30H ;温度值低字节 TEMP_H EQU 31H ;温度值高字节 TEMP_DP EQU 32H ;温度小数 TEMP_INT EQU 33H ;温度值整数 TEMP_BAI EQU 34H ;温度百位数 TEMP_SHI EQU 35H ;温度十位数 TEMP_GE EQU 36H ;温度个位数 DIS_BAI EQU 37H ;显示百位数 DIS_SHI EQU 38H ;显示十位数 DIS_GE EQU 39H ;显示个位数 DIS_DP EQU 3AH ;显示小数位 DIS_ADD EQU 3BH ;显示地址 ORG 0000H AJMP START ORG 0050
19、H ;初始化 START: MOV SP, #40H MAIN: LCALL READ_TEMP ;调读温度程序 LCALL PROCESS ;调数据处理程序 AJMP MAIN ;读温度程序 READ_TEMP: LCALL RESET_PULSE ;调用复位脉冲程序 MOV A, #0CCH ;跳过ROM吩咐 LCALL WRITE MOV A, #44H ;读温度 LCALL WRITE LCALL DISPLAY ;显示温度 LCALL RESET_PULSE ;调用复位脉冲程序 MOV A, #0CCH ;跳过ROM吩咐 LCALL WRITE MOV A, #0BEH ;读缓存吩咐
20、 LCALL WRITE LCALL READ RET ;复位脉冲程序 RESET_PULSE: RESET: SETB DATA_BUS NOP NOP CLR DATA_BUS MOV R7, #255 DJNZ R7, $ SETB DATA_BUS MOV R7, #30 DJNZ R7,$ JNB DATA_BUS, SETB_FLAG CLR FLAG AJMP NEXT SETB_FLAG: SETB FLAG NEXT: MOV R7, #120 DJNZ R7, $ SETB DATA_BUS JNB FLAG, RESET RET ;写吩咐 WRITE: SETB DATA
21、_BUS MOV R6, #8 CLR C WRITING: CLR DATA_BUS MOV R7, #5 DJNZ R7, $ RRC A MOV DATA_BUS, C MOV R7, #30H DJNZ R7, $ SETB DATA_BUS NOP DJNZ R6, WRITING RET ;循环显示段位 DISPLAY: MOV R4, #200 DIS_LOOP: MOV A, DIS_DP MOV P2, #0FFH MOV P0, A CLR P2.7 LCALL DELAY2MS MOV A, DIS_GE MOV P2, #0FFH MOV P0, A SETB P0.7
22、 CLR P2.6 LCALL DELAY2MS MOV A, DIS_SHI MOV P2, #0FFH MOV P0, A CLR P2.5 LCALL DELAY2MS MOV A, DIS_BAI MOV P2, #0FFH MOV P0, A MOV A, TEMP_BAI CJNE A, #0,SKIP AJMP NEXTT SKIP: CLR P2.4 LCALL DELAY2MS NEXTT: NOP DJNZ R4, DIS_LOOP RET ;读吩咐 READ: SETB DATA_BUS MOV R0, #TEMP_L MOV R6, #8 MOV R5, #2 CLR
23、C READING: CLR DATA_BUS NOP NOP SETB DATA_BUS NOP NOP NOP NOP MOV C, DATA_BUS RRC A MOV R7, #30H DJNZ R7, $ SETB DATA_BUS DJNZ R6, READING MOV R0, A INC R0 MOV R6, #8 SETB DATA_BUS DJNZ R5, READING RET ;数据处理 PROCESS: MOV R7, TEMP_L MOV A, #0FH ANL A, R7 MOV TEMP_DP,A MOV R7, TEMP_L MOV A, #0F0H ANL
24、A, R7 SWAP A MOV TEMP_L, A MOV R7, TEMP_H MOV A, #0FH ANL A, R7 SWAP A ORL A, TEMP_L MOV B, #64H DIV AB MOV TEMP_BAI,A MOV A, #0AH XCH A, B DIV AB MOV TEMP_SHI,A MOV TEMP_GE,B MOV A, TEMP_DP MOV DPTR, #TABLE_DP MOVC A, A+DPTR MOV DPTR, #TABLE_INTER MOVC A, A+DPTR MOV DIS_DP, A MOV A, TEMP_GE MOV DPT
25、R, #TABLE_INTER MOVC A, A+DPTR MOV DIS_GE, A MOV A, TEMP_SHI MOV DPTR, #TABLE_INTER MOVC A, A+DPTR MOV DIS_SHI, A MOV A, TEMP_BAI MOV DPTR, #TABLE_INTER MOVC A, A+DPTR MOV DIS_BAI ,A RET DELAY2MS: MOV R6, #3 LOOP3: MOV R5, #250 DJNZ R5, $ DJNZ R6, LOOP3 RET TABLE_DP: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H DB 06H,07H,08H,08H,09H,09H TABLE_INTER: DB 03FH,006H,05BH,04FH,066H DB 06DH,07DH,07H,07FH,06FH END 第21页 共21页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页第 21 页 共 21 页
限制150内