数字温度计设计说明书
数字温度计说明书

单片机课程设计题目:数字温度计院别:机电学院专业:机械电子工程班级:姓名:学号:指导教师:二〇一三年十二月二十一日摘要本设计即用单片机对温度进行实时检测与控制,本文所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,本次课程设计采用51单片机以及锁存器74HC573N、四位共阴数码管、DS18B20温度传感器、蜂鸣器、三极管等组成的自动过温报警器,该过温报警器测温准确,使用方便,显示清晰,最高精度可达到0.0625度,最长温度转换时间不到1秒,应用范围广泛。
用四位共阴数码管实现温度显示,能准确达到设计要求。
本温度计属于多功能温度计,功能较强,可以设置上下限报警温度,且测量准确、误差小。
当测量温度超过设定的温度上下限时,启动蜂鸣器和指示灯报警。
关键词过温报警;锁存器;单片机;温度传感器目录前言 (1)一.本次课程设计实践的目的和意义 (2)二.设计任务和要求 (2)2.1 设计题目 (2)2.2 主要技术性能指标 (2)2.3 功能及作用 (2)三. 系统总体方案及硬件设计 (2)3.1查阅相关资料后有以下两个方案可供选择 (2)3.2元件采购 (3)3.3系统总体设计 (3)四.接口电路设计 (6)4.1模块简介 (6)4.2 主控制器 (6)4.3 显示电路 (7)4.4温度传感器 (7)4.5温度报警电路 (9)五. 系统软件算法分析 (10)5.1主程序流程图 (10)5.2读出温度子程序 (11)5.3温度转换命令子程序 (11)5.4 计算温度子程序 (12)5.5 显示数据刷新子程序 (12)5.6按键扫描处理子程序 (13)六. 电路仿真 (14)七.焊接好的电路实体图 (15)八.检查与调试 (16)九.作品的使用 (16)十.设计心得 (20)参考文献 (20)附录 (21)前言温度是工业对象中主要的被控参数之一,如冶金、机械、食品、化工各类工业生产中,广泛使用的各种加热炉、热处理炉、反应炉等,对工件的温度处理要求严格控制。
数字温度计的设计说明

数字温度计的设计说明实验六数字温度计的设计⼀、设计⽬的通过电⼦技术的综合设计,熟悉⼀般电⼦电路综合设计过程、设计要求、应完成的⼯作容和具体的设计⽅法。
通过设计有助于复习、巩固以往的学习容,达到灵活应⽤的⽬的。
设计完成后在实验室进⾏⾃⾏安装、调试,从⽽加强学⽣的动⼿能⼒。
在该过程中培养从事设计⼯作的整体概念。
⼆、设计要求1、利⽤所学的知识,通过上⽹或到图书馆查阅资料,完成数字温度计的设计;要求写出实验原理,画出原理功能框图,描述其功能。
2、需采⽤单⽚机STC15W404AS、NTC热敏电阻、共阳数码管等元器件进⾏设计,试确定设计⽅案详细⼯作原理,计算出参数。
3、技术指标:1)温度围: 0 --- +100℃; 误差≤± 2 ℃;2)选择设计⽅案;3)根据设计⽅案分析设计原理及写出详细的硬件电路设计过程;⽅案概要本设计是利⽤NTC热敏电阻MF52E-10K(B=3950)1%精度,作为温度传感器,其输出的信号通过STC15W404AS部AD进⾏模数转换,然后STC15W404AS对该温度数据进⾏处理,并由⼀个4位⼀体共阳数码管显⽰显⽰温度值。
实验报告要求原理、计算等)1、根据设计要求确定数字温度计⽅案,并完成电路设计,分别说明设计⽅案、电路⼯作原理:2、完成电路连接并进⾏数字温度计测试:参考设计电路图1 参考电路图表1元器件清单图2 参考电路图表2元器件清单图3 数码管引脚图参考程序:******************************************/#define MAIN_Fosc 22118400L //定义主时钟#include "STC15Fxxxx.H"/****************************** ⽤户定义宏***********************************/ #define Timer0_Reload (65536UL -(MAIN_Fosc /1000)) //Timer 0 中断频率, 1000次/秒/*****************************************************************************/#define DIS_DOT 0x20#define DIS_BLACK 16#define DIS_ 17#define AD_Cha 2 //0-4通道/************* 本地常量声明**************/u8 code t_display[]={ //标准字库共阳// 0 1 2 3 4 5 6 7 8 9 A B C D E F 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1/*u8 code t_display[]={ //标准字库// 0 1 2 3 4 5 6 7 8 9 A B C D E F 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, //black - H J K L N o P U t G Q r M y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1*/u8 code T_COM[]={0xEF,0xDF,0xBF,0x7F,0xEF,0xDF,0xBF,0x7F}; //位码/************* IO⼝定义**************/sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clocksbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock/************* 本地变量声明**************/u8 LED8[8]; //显⽰缓冲u8 display_index; //显⽰位索引bit B_1ms; //1ms标志u8 offled;u16 msecond;/************* 本地函数声明**************/void Delayms(u16 dlayT);void DisplayScan(void);/**********************************************/void main(void){u8 i,k;u16 j;P0M1 = 0; P0M0 = 0; //设置为准双向⼝P1M1 = 0; P1M0 = 0; //设置为准双向⼝P2M1 = 0; P2M0 = 0; //设置为准双向⼝P3M1 = 0; P3M0 = 0; //设置为准双向⼝P4M1 = 0; P4M0 = 0; //设置为准双向⼝P5M1 = 0; P5M0 = 0; //设置为准双向⼝P6M1 = 0; P6M0 = 0; //设置为准双向⼝P7M1 = 0; P7M0 = 0; //设置为准双向⼝display_index = 4;offled = 0;P1ASF = 0x0F; //P1.0 P1.1 P1.2 P1.3做ADC ADC_CONTR = 0xE0; //90T, ADC power on CLK_DIV = CLK_DIV&0xDF; //CLK_DIV.5 ADRJ=0 AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload, TH0 = (u8)(Timer0_Reload / 256); TL0 = (u8)(Timer0_Reload % 256);ET0 = 1; //Timer0 interrupt enablefor(k=11;k>0;k--){for(i=0; i<4; i++) LED8[i] = k-1; //上电消隐Delayms(1000);}while(1){if(B_1ms) //1ms到{B_1ms = 0;if(++msecond >= 300) //300ms到{msecond = 0;j = Get_ADC10bitResult(AD_Cha); //参数0~7,查询⽅式做⼀次ADC, 返回值就是结果, == 1024 为错误//j = 768;if(j < 1024){LED8[0] = j / 1000; //显⽰ADC值LED8[1] = (j % 1000) / 100;if(LED8[0] == 0) LED8[0] = 16;}else //错误{for(i=0; i<4; i++) LED8[i] = 14;}j = Get_ADC10bitResult(3); //参数0~7,查询⽅式做⼀次ADC, 返回值就是结果,== 1024 为错误j += Get_ADC10bitResult(3);j += Get_ADC10bitResult(3);j += Get_ADC10bitResult(3);if(j < 1024*4){LED8[0] = j / 1000; //显⽰ADC值LED8[1] = (j % 1000) / 100;LED8[2] = (j % 100) / 10;LED8[3] = j % 10;if(LED8[0] == 0) LED8[0] = DIS_BLACK;j = get_temperature(j); //计算温度值LED8[4] = j / 1000; //显⽰温度值LED8[5] = (j % 1000) / 100;LED8[6] = (j % 100) / 10 + DIS_DOT;LED8[7] = j % 10;if(LED8[4] == 0) LED8[4] = DIS_BLACK;if(F0) LED8[4] = DIS_; //显⽰-}else //错误{for(i=0; i<8; i++) LED8[i] = DIS_;}}}}}/**********************************************///======================================================================== // 函数: u16 Get_ADC10bitResult(u8 channel)// 描述: 查询法读⼀次ADC结果.// 参数: channel: 选择要转换的ADC.// 返回: 10位ADC结果.// 版本: V1.0, 2012-10-22//======================================================================== u16 Get_ADC10bitResult(u8 channel) //channel = 0~7ADC_RESL = 0;ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | channel; //start the ADCNOP(4);while((ADC_CONTR & 0x10) == 0) ; //wait for ADC finish ADC_CONTR &= ~0x10; //清除ADC结束标志return (((u16)ADC_RES << 2) | (ADC_RESL & 3));}// MF52E 10K at 25, B = 3950, ADC = 12 bitsu16 code temp_table[]={140, //;-40 0149, //;-39 1159, //;-38 2168, //;-37 3178, //;-36 4188, //;-35 5199, //;-34 6210, //;-33 7222, //;-32 8233, //;-31 9246, //;-30 10259, //;-29 11272, //;-28 12286, //;-27 13367, //;-22 18 385, //;-21 19 403, //;-20 20 423, //;-19 21 443, //;-18 22 464, //;-17 23 486, //;-16 24 509, //;-15 25 533, //;-14 26 558, //;-13 27 583, //;-12 28 610, //;-11 29 638, //;-10 30 667, //;-9 31 696, //;-8 32 727, //;-7 33 758, //;-6 34 791, //;-5 35 824, //;-4 36 858, //;-3 37 893, //;-2 38 929, //;-1 39 965, //;0 40 1003, //;1 41 1041, //;2 421243, //;7 47 1285, //;8 48 1328, //;9 49 1371, //;10 50 1414, //;11 51 1459, //;12 52 1503, //;13 53 1548, //;14 54 1593, //;15 55 1638, //;16 56 1684, //;17 57 1730, //;18 58 1775, //;19 59 1821, //;20 60 1867, //;21 61 1912, //;22 62 1958, //;23 63 2003, //;24 64 2048, //;25 65 2093, //;26 66 2137, //;27 67 2182, //;28 68 2225, //;29 69 2269, //;30 70 2312, //;31 712519, //;36 76 2559, //;37 77 2598, //;38 78 2637, //;39 79 2675, //;40 80 2712, //;41 81 2748, //;42 82 2784, //;43 83 2819, //;44 84 2853, //;45 85 2887, //;46 86 2920, //;47 87 2952, //;48 88 2984, //;49 89 3014, //;50 90 3044, //;51 91 3073, //;52 92 3102, //;53 93 3130, //;54 94 3157, //;55 95 3183, //;56 96 3209, //;57 97 3234, //;58 98 3259, //;59 99 3283, //;60 1003393, //;65 105 3413, //;66 106 3432, //;67 107 3452, //;68 108 3470, //;69 109 3488, //;70 110 3506, //;71 111 3523, //;72 112 3539, //;73 113 3555, //;74 114 3571, //;75 115 3586, //;76 116 3601, //;77 117 3615, //;78 118 3628, //;79 119 3642, //;80 120 3655, //;81 121 3667, //;82 122 3679, //;83 123 3691, //;84 124 3702, //;85 125 3714, //;86 126 3724, //;87 127 3735, //;88 128 3745, //;89 1293791, //;94 134 3799, //;95 135 3807, //;96 136 3815, //;97 137 3822, //;98 138 3830, //;99 139 3837, //;100 140 3844, //;101141 3850, //;102 142 3857, //;103 143 3863, //;104 144 3869, //;105 145 3875, //;106 146 3881, //;107 147 3887, //;108 148 3892, //;109 149 3897, //;110 150 3902, //;111 151 3907, //;112 152 3912, //;113 153 3917, //;114 154 3921, //;115 155 3926, //;116 156 3930, //;117 157 3934, //;118 158};/******************** 计算温度***********************************************/ // 计算结果: 0对应-40.0度, 400对应0度, 625对应25.0度,最⼤1600对应120.0度.// 为了通⽤, ADC输⼊为12bit的ADC值.// 电路和软件算法设计: Coody/**********************************************/#define D_SCALE 10 //结果放⼤倍数, 放⼤10倍就是保留⼀位⼩数u16 get_temperature(u16 adc){u16 code *p;u16 i;u8 j,k,min,max;adc = 4096 - adc; //Rt接地p = temp_table;if(adc < p[0]) return (0xfffe);if(adc > p[160]) return (0xffff);min = 0; //-40度max = 160; //120度for(j=0; j<5; j++) //对分查表{k = min / 2 + max / 2;if(adc <= p[k]) m ax = k;if(adc == p[min]) i = min * D_SCALE;else if(adc == p[max]) i = max * D_SCALE;else // min < temp < max{while(min <= max){min++;if(adc == p[min]) {i = min * D_SCALE; break;}else if(adc < p[min]){min--;i = p[min]; //minj = (adc - i) * D_SCALE / (p[min+1] - i);i = min;i *= D_SCALE;i += j;break;}}}return i;}void Delayms(u16 dlayT){u16 i,j;。
单片机数字式温度计设计说明书(附带源程序)

附件1:学号:0121218700312课程设计题目数字式温度计学院物流工程学院专业物流工程班级姓名指导教师2015年1月18日附件2:课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 数字式温度计设计初始条件:1、设计与仿真软件:Keil uVision 和Proteus要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.18B20 设计一款能够显示当前温度值的温度计;2. 切换按钮可以切换华氏度和摄氏度显示;3.其他功能时间安排:2015年1月4 - 5日选择题目,布置任务2015年1月6 - 8日功能分析,硬件设计及修改2015年1月9 -13日软件设计与编程2015年1月14-18日调试并修改硬件组成2015年1月19-20日编写任务说明书2015年1月21-22日确认提交版、答辩指导教师签名:年月日系主任(或责任教师)签名:年月日附件6:本科生课程设计成绩评定表指导教师签字:年月日目录1 设计任务 (2)2设计方案 (3)2.1 任务分析 (3)2.2 方案设计 (3)3系统硬件设计 (5)3.1时钟电路设计 (5)3.2复位电路设计 (5)3.3 1602控制电路 (5)3.4 DS18B20通信电路,开关电路设计 (6)3.5系统原理图 (7)4系统软件设计 (8)4.1 1ms定时 (8)4.2 DS18B20初始化程序 (8)4.3对DS1802写一个字节的数据 (8)4.4 1602的操作程序 (8)4.5温度测算及转换程序 (10)5仿真与性能分析 (11)5.1系统仿真过程 (11)5.2系统性能分析 (11)6.小结与展望 (13)参考文献 (14)附录1 元件清单 (15)附录2 系统程序 (16)数字式温度计的设计摘要温度是一种最基本的环境参数,人民的生活、生产与环境的温度息息相关。
在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置也有重要的意义。
课程设计任务书数字温度计设计

中北大学课 程 设 计 说 明 书学生姓名: 学 专 题 院: 业: 目:学 号:信息与通信工程学院 电子信息科学与技术 数字温度计设计指导教师: 指导教师:张志伟职称: 职称:教授2012 年 01 月 06 日中北大学课程设计任务书2011/2012 学年第 1 学期学 专院: 业:信息与通信工程学院 电子信息科学与技术 学 号: 电子电路综合实践 数字温度计设计学 生 姓 名: 课程设计题目:起 迄 日 期: 课程设计地点: 指 导 教 师: 系 主 任:2011 年 12 月 26 日~2012 年 1 月 6 日5 院楼 513、606 张志伟、王伟 程耀瑜下达任务书日期:2011 年 12 月 26 日课 程 设 计 任 务 书1.设计目的:针对电子线路课程要求,对设计者进行实用型电子线路设计、仿真测试等各环节的 综合性训练,培养设计者运用课程中所学的理论与实践紧密结合,独立地解决实际问题 的能力。
设计者必须独立完成一个选题的设计任务。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等) :设计内容: 设计一数字式温度计,即用数字显示被测温度。
1.技术指标: 1) 测量范围:-50 度—150 度; 2) 测量精度 0.1 度; 3) 4 位 LED 数码管显示; 2.设计要求: 数字式温度计不仅读数方便,而且测量精确。
1)给出计算参数、总体设计电路; 2)画出完整电路图,写出设计总结报告。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、 实物样品等〕 :1 电路原理图; 2 器件的工作原理和应用,仿真结果; 3 课程设计说明书; 4 PROTEL 应用的基本知识。
课 程 设 计 任 务 书4.主要参考文献:要求按国标 GB 7714—87《文后参考文献著录规则》书写,例: 1 傅承义,陈运泰,祁贵中.地球物理学基础.北京:科学出版社,1985(5 篇以上)5.设计成果形式及要求:1 电路原理图; 2 课程设计说明书。
数字温度计设计说明书

目录1数字温度计简介 (1)2系统方案设计 (1)2.1方案的选择 (1)2.2电路设计过程 (2)3设计中用到的芯片介绍 (3)3.1温度传感器LM35 (3)3.1.1LM35的特性 (3)3.1.2LM35的引脚与封装 (4)3.1.3LM35的典型运用 (5)3.1.5LM35的使用要点 (5)3.2芯片ICL7101介绍 (6)3.2.1ICL7107转化器原理 (7)3.2.2ICL7107的引脚及个引脚功能 (8)3.2.3ICL7107的典型运用电路 (9)3.3电压比较器LM393 (9)3.4七段数码管 (10)4电路设计图及电路仿真 (12)4.1各模块设计图 (12)4.2电路总设计图 (13)4.3电路的仿真 (14)5实物的测试 (16)5.1实物图 (16)5.2测试结果 (17)6仿真软件proteus简介 (18)7心得体会 (22)8参考文献 (23)本科生课程设计成绩鉴定表 (24)摘要数字温度计是一种电子产品,由温感元件来识别温度,既将温度信号转化为模拟的电信号。
再经过数模转换为数字的电信号,最后经编码显示在数码管上,或者液晶屏上。
本文介绍基于LM35与ICL7107制作的数字温度计方法、原理以及电路工艺、并给出完整的电路。
该电路具有高精度,高稳定性,低温漂,低功耗的优点,且价格低廉,使用方便,是传统的水银温度计,金属温度计的理想替代品,广泛应用于工业、农业、医疗器械等领域的温度探测。
也在本文中详细介绍了各电路的工作模块及相应的芯片。
关键字:温度计 LM35 ICL7107 电路模块AbstractDigital thermometer is a kind of electronic products, feeling components to identify temperature by temperature, both the temperature signal into analog signals. After analog-to-digital conversion to digital electrical signals, finally the encoded in the digital tube display, or LCD screen.In this paper, the digital thermometer based on LM35 and ICL7107 production method, principle and circuit process, and complete circuit is given. The circuit has a high precision, high stability, low temperature drift, the advantages of low power consumption, and low cost, easy to use, is one of the traditional mercury thermometer, metal thermometer ideal substitutes, are widely used in industry, agriculture, medical apparatus and instruments in areas such as temperature detection. In this article also introduced the work of each circuit module and the corresponding chip.Key words: the thermometer LM35 ICL7107 circuit module1数字温度计简介数显温度计可以准确的判断和测量温度,以数字显示,而非指针或水银显示。
TR-10数字温度计使用说明书

TR-10数字(shùzì)温度计使用说明书TR-10数字(shùzì)温度计使用说明书TR-10便携式记录(jìlù)型测温仪使用说明一,概述(ɡài shù):TR-10是一款具备数据记录(jìlù)功能的温度测量仪表,仪表可记录100个温度点和时间,摄氏华氏转换,超温报警等功能。
广泛应用于暖通制冷维修、食品、宠物等行业。
二,技术参数:1、温度传感器:NTC K=103,B=34352、测温范围(fànwéi):-40℃~+110℃,3、测温精度(jīnɡ dù):±1℃(-20℃~+80℃),±2℃(-40℃~-20℃,+80℃~+110℃)4、记录点数:100个,5、采样周期:记录状态下为间隔时间,非记录状态下为10S6、显示未定要求—电磁兼容测试:(1)EFT干扰测试>2级(2)ESD测试>2级7、时间:2009年1月1日—2099年12月31日产品出厂参数值:日期为09 01 01,时间为12:00 00间隔时间为001,(1分钟)上限温度值都为:000.0度下限温度值都为:000.0度三,产品示意图:正面图片:要求有液晶屏全部显示,以及能看清(kàn qīnɡ)按键上的字。
背面图片:要求说明有背面各个部分的功能,及按键的图片,必要时增加局部(júbù)放大的图片液晶屏显示(xiǎnshì)的说明:说明(shuōmíng)液晶屏各部分显示代表的参数四,按键操作(cāozuò)说明:按键使用(shǐyòng)模式说明:按一下按键立即抬起为“时间(shíjiān)按”,按住按键(àn jiàn)查过五秒后抬起为“长时间按”前置按键的使用说明:Record:功能一:开启和关闭记录功能功能二:在记录过程中或记录完成后,按此键可以查看温度记录点的参数。
数字温度计课程设计报告书

H a r b i n I n s t i t u t e o f T e c h n o l o g y课程设计说明书(论文)课程名称:课程设计І设计题目:数字温度计的设计院系:电子与信息工程学院班级:设计者:学号:指导教师:设计时间:2011年4月15日至2011年6月6日哈尔滨工业大学2011年4月15日星期五哈尔滨工业大学课程设计任务书姓名:院(系):专业:班号:任务起至日期:2011年4 月15 日至2011 年6月5日课程设计题目:数字温度计的设计已知技术参数和设计要求:根据给定主要功能要求和主要元器件,设计一个完整的数字温度计。
(1) 自制稳压电源(2) 被测温度的范围在0至200°C(3) 用4位数码管显示温度值工作量:1.查找资料2.设计论证方案3.具体各个电路选择、元器件选择和数值计算4.具体说明各部分电路图的工作原理5.绘制电路原理图6.绘制印刷电路图7.元器件列表8.编写调试操作9.打印论文工作计划安排:1.查找资料、设计论证方案具体各个电路选择、元器件选择和数值计算绘制电路原理图一周2.绘制印刷电路图、元器件列表一周3.编写调试操作、打印论文一周同组设计者及分工:每人一组单独完成指导教师签字___________________2011年4月13日教研室主任意见:教研室主任签字___________________2011年4月13日*注:此任务书由课程设计指导教师填写。
一、任务技术指标主要内容:设计一个数字温度计,测量范围:0~200 O C。
温度的实时LED数字显示。
测量温度信号为模拟量。
基本要求:1.画出数字温度计的结构框图。
2.画出系统原理图、印制版图与仿真图。
3.计算所需器件数值,列写元器件清单4.进行调试操作5.按要求完成课程设计报告,打印报告二、总体设计思想1.基本原理温度的测量,在工业生产的过程和科研工作中都非常重要。
数字式温度测量的特点是采用数码管直接显示出被测温度值,这种数字显示不仅直观,测量精度高而且便于进行自动控制。
基于AT89S52的数字温度计设计说明

基于AT89S52的数字温度计设计说明一、设计背景温度计是指可以测量并显示环境温度值的仪器。
数字温度计是将温度转换为数字信号,再通过数码管显示温度值的一种温度计。
随着微处理器技术的不断发展,数字温度计也不断得到改进,成为了一种重要的电子测量仪器。
本设计基于AT89S52单片机,设计一款简单的数字温度计。
二、设计方案本设计方案采用DS18B20数字温度传感器作为温度检测器件,通过AT89S52单片机进行信号处理,并将温度值显示在四位数码管上。
具体方案如下:1. 电路连接将DS18B20数字温度传感器的VCC引脚连接到单片机的5V供电端口,GND引脚连接到单片机的GND端口,DQ引脚连接到单片机的P2.0口。
将四位共阳数码管的COM1-COM4引脚连接到单片机的P1.0-P1.3口,a-g引脚连接到单片机的P0.0-P0.6口。
2. 软件设计主程序通过定时器产生1s的时间基准,读取DS18B20传感器的温度值,将温度值转化为数码管可以显示的温度值,并将温度值显示在数码管上。
主程序具体运作流程如下:(1)初始化定时器,设定时间基准为1s。
(2)初始化DS18B20传感器,进行一次温度检测。
(3)将读取到的温度值存入RAM中。
(4)将温度值转化为数码管可以显示的温度值,并存入RAM中。
(5)将数码管显示温度值。
(6)等待1s后,再进行温度检测,重复执行。
三、应用领域数字温度计是一种广泛应用于家庭、实验室、工厂、疾病诊断等领域的电子测量仪器。
本设计采用的AT89S52单片机和DS18B20数字温度传感器成本较低,制作简单,可以在生活中进行自制,具有一定的实用价值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机》课程设计说明书专业名称:电气工程及其自动化班级:093学号:20090202101姓名:张淑冠指导教师:姚广芹日期:2011年7月8日单片机课程设计评阅书摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计是基于AT89S52单片机的温度测量系统。
通过对单片机技术基础及温度传感器使用方法的学习,本组利用Protel设计工作电路,并用PROTUES进行仿真后,焊接电路,这次课程设计综合利用所学单片机知识完成了一个单片机应用系统设计并仿真,焊接电路实现功能,从而加深对单片机软硬知识的深层次理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下了一定的基础。
关键词:单片机;AT89S52;温度计;数字控制目录1 课题描述 (1)2 设计过程 (2)2.1 数字温度计系统设计方框图 (2)2.2 单片机所实现功能说明 (2)2.3 电路板各部分电路图及其原理 (2)3 测试 (5)总结 (6)参考文献 (7)附录1 (8)附录2 (9)1 课题描述本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S52,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。
开发工具:protel2 设计过程由于本设计是测温电路,进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
2.1 数字温度计系统设计方框图图2.1系统设计方框图2.2 单片机所实现功能说明本次实训所设计的为数字温度计,能实现对温度的测试,所测温度由数码管以整数的形式显示。
同时可调所测温度的上下限,如果超出所测温度的限制,能够发出报警,报警信号由LED灯和蜂鸣器同时发出。
性能指标基本要求:(1)能够显示当前室内温度,分辨率为1摄氏度。
(2)具有超限声光报警功能,能够通过按键设定报警温度的上限和下限。
控制器采用单片机AT89S52,温度传感器采用DS18B20,用数码管显示器实现温度显示。
2.3 电路板各部分电路图及其原理(一)单片机AT89S52图2.3.1单片机AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
(二)晶振和复位装置图2.3.2a晶振图2.3.2b复位电路(1)晶体振荡器,能产生振荡,其特点是固有频率十分稳定,而且震动具有多谐性,除了奇频震动外还有奇次谐波泛音震动。
性能上,晶振的品质因素Q和特性阻抗都非常高,而且接入系数很小,因此具有很高的频率稳定度。
(2)复位电路,与单片机第9引脚,也就是RST引脚相连,起复位作用,高电平有效(三)温度传感器DS18B20图2.3.3温度传感器DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内,温范围-55℃~+125℃。
有三个引脚,其中1引脚接高电平,第3引脚接地,第2引脚接单片机的16引脚,即P3.6口以送入温度信号。
(四)报警电路——LED灯和蜂鸣器图2.3.4aLED灯图2.3.4b蜂鸣器此次所设计的数字温度计可以设置上下限,当超出上下限后能够报警,报警信号又LED灯和蜂鸣器同时发出。
其中LED灯要有一个上拉电阻和高电平相连,LED报警信号由单片机的P1.0口送出。
蜂鸣器采用无源连接,报警信号由单片机的P3.7引脚送出(五)按键。
按键实现对温度计所测温度的上下限进行节。
图2.3.5按键3 测试将制作好的数字温度计用USB线与电脑连接,把编的程序写入单片机中,测试温度计显示数据是否正确。
调节环境温度,利用温度计(事先准备一个)确定环境温度,观察数码管所显示的数据,并与温度计示数对比。
调节温度使温度达到声光报警温度,测试声光报警是否正常。
总结课程设计的过程是艰辛的,但是收获却是很大的。
这次课程设计我主要是应用以前学习的编程以及单片机的一些知识,综合起来才完成了这个温度计的设计,虽然所设计器件很小,但是付出却是艰辛的。
首先,综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识,再次,我在课程设计中碰到了很多的问题,我通过查阅相关书籍,资料,通过自己钻研,特别是得到了姚老师的谆谆教导,姚老师给予了我很大的帮助,不仅给了我思路上的开阔,还让我认识到了自己对以前所学知识的不足方面。
随着社会发展,单片机技术的迅速普及,以及飞速发展,人们对实时数字的要求越来越迫切,需求日益增加,单片机的应用无处不在,从小小的电子表,到大型的计算机都离不开单片机,因此我们更需要学习单片机工作原理的及其编程。
通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我,不断进取,能使自己在单片机运用这方面有一个大的发展。
参考文献[1] 张毅刚彭喜元彭宇《单片机原理及其应用》高等教育出版社[2] 王守忠赵明明索世文《51单片机应用开发速查手册》人民邮电出版社[3] 谢自美《电子线路综合设计》华中科技大学出版社[4] 夏继强《单片机应用设计培训教程—实践篇》北京航空航天大学出版社[5] 李广弟, 朱月秀, 王秀山《单片机基础》北京航空航天大学出版社[6] 王毅《单片机器件应用手册》人民邮电出版社附录1 总电路图附录2 程序/**********************************程序功能:基于四眼兔子单片机学习板的温度计数码管显示温度,十位与个位时间:2010.3.14***********************************/ #include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intbit presence;bit flow0;sbit led=P1^0;sbit DQ=P3^6;//定义温度传感器sbit led1=P2^0;sbit led2=P2^1;sbit led3=P2^2;sbit led4=P2^3;sbit key1=P3^2;sbit key2=P3^3;sbit key3=P3^4;sbit key4=P3^5;float i=0;int datt=0;int aa=0;int bb=0;int cc=0;int dd=0;int wendu=30;int wenduxia=25;uchar ge,shi,bai,xiao,xiao1;sbit BEEP=P3^7;unsigned char code tab[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 };unsigned char init[] ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};unsigned char init1[] ={0x12, 0x12, 0x12, 0x12, 0x12, 0x12,0x33};void delayms(uchar xms){while(xms--){uchar time;for(time=114;time>0;time--);}}void display(void){P0=tab[shi];led4=0;delayms(1);P2=0xff;P0=tab[ge];led3=0;delayms(1);P2=0xff;P0=0xc6;led1=0;delayms(1);P2=0xff;P0=0x9c;led2=0;delayms(1);P2=0xff;}/**********************************************延时微妙函数************************************************/ void delayus(unsigned char x){unsigned char i;while (x--){for (i = 0; i < 14; i++){;}}}void beep(){ uint j;BEEP=0;for (j = 3; j > 0; j--){ delayms(1);BEEP = ~BEEP;}BEEP = 1;}/********************************************************** us延时函数 (8*1.085)*num**********************************************************/ void Delay(unsigned int num) //延时函数{while (--num);}void xianshi(){int q ;char z;for(z=5;z>0;z--){for(q=20;q>0;q--){P0=tab[aa];led4=0;delayms(1);P2=0xff;P0=tab[bb];led3=0;delayms(1);P2=0xff;P0=tab[cc];led2=0;delayms(1);P2=0xff;P0=tab[dd];led1=0;delayms(1);P2=0xff;} }}void xianshi1(){ aa=0;bb=0;cc=wenduxia/10;dd=wenduxia%10;P0=tab[aa];led4=0;delayms(1);P2=0xff;P0=tab[bb];led3=0;delayms(1);P2=0xff;P0=tab[cc];led2=0;delayms(1);P2=0xff;P0=tab[dd];led1=0;delayms(1);P2=0xff;}void shengwen(){if(key1==0){delayms(100);;if(key1==0){ wendu++;aa=wendu/10;bb=wendu%10;cc=0;dd=0;xianshi();delayms(150);}}}void jiangwen(){if(key2==0){ delayms(100);if(key2==0){ wendu--;aa=wendu/10;bb=wendu%10;cc=0;dd=0;xianshi();delayms(150);}}}void xianshixianzhi(){if(key3==0){ delayms(100);if(key3==0){aa=wendu/10;bb=wendu%10;cc=wenduxia/10;dd=wenduxia%10;xianshi();delayms(150) ;}}}/****************************************初始化18b20****************************************/uchar ds18b20_init(void){DQ = 0; //单片机发出低电平复位信号Delay(60); //延时>480usDQ = 1; //释放数据线Delay(8); //延时>64us,等待应答presence = DQ; //接收应答信号Delay(50); //延时>400us,等待数据线出现高电平DQ = 1; //释放数据线return (presence); //返回presence信号}/********************************************************** 读一个字节数据**********************************************************/ unsigned char ReadOneChar(void){unsigned char i = 0;unsigned char dat = 0;DQ = 1;for (i = 0; i < 8; i++)//一个字节8个bit{DQ = 0; //给低脉冲信号dat >>= 1;DQ = 1; //释放总线_nop_();_nop_();if (DQ)//读总线电平状态dat |= 0x80;//最高位置1Delay(6); //延时>45usDQ = 1; //释放总线,表示此次读操作完成}return(dat);}/********************************************************** 写一个字节数据**********************************************************/ void WriteOneChar(unsigned char dat){unsigned char i = 0;for (i = 0; i < 8; i++)//一个字节8个bit{DQ = 0; //给低脉冲信号Delay(1); //延时<15usdat >>= 1; //数据右移一位,最低位移入CYDQ = CY; //写1bit数据Delay(6); //延时>45usDQ = 1; //释放总线,表示此次写操作完成}/*****************************************读温度函数*****************************************/void read_temp(void){uint d=1;uchar temp1=0;uchar temp2=0;uint t=0;float tt;uint zong=0;ds18b20_init();WriteOneChar(0xcc);//跳过ROM匹配WriteOneChar(0x44);//启动温度转换ds18b20_init();WriteOneChar(0xcc);//跳过ROM匹配WriteOneChar(0xbe);//读温度寄存器temp1=ReadOneChar();//温度低8位temp2=ReadOneChar();//温度高8位if(temp2>112)//判断温度正负,负温度时执行大括号内程序{temp1=(~temp1)+1;if((~temp1)+1>=0xff){temp2=(~temp2)+1;}elsetemp2=(~temp2);flow0=1;//温度是零下}else //温度值为零上flow0=0;t=temp2;t<<=8;t=t|temp1;tt=t*0.0625*100;datt=(int)tt;bai=datt/10000;shi=(datt%10000)/1000;ge=datt%1000/100;xiao=datt%100/10;xiao1=datt%10;if(xiao1>=5)//四舍五入计算小数点后一位xiao++;zong=bai*100+shi*10+ge;if(zong>=wendu||zong<=wenduxia) {led=0;beep();}if(zong<wendu||zong>wenduxia) led=1;}void shezhixiaxian(){if(key4==0){delayms(30);if(key4==0){while(1){if(key4==0){delayms(50);if(key4==0){break;}}if(key1==0){delayms(50);if(key1==0){ wenduxia++;aa=0;bb=0;cc=wenduxia/10;dd=wenduxia%10;xianshi();} }if(key2==0){delayms(50);if(key2==0){ wenduxia--;aa=0;bb=0;cc=wenduxia/10;dd=wenduxia%10;xianshi();}}xianshi1();}}}}/**************************************************主函数**************************************************/void main(void){P2=0xff;P0=0xff;while(1){ read_temp(); //读取温度值display();shengwen();jiangwen();xianshixianzhi();shezhixiaxian();}}。