1、单片机课设数字温度显示 单片机课程设计任务书数字显示温度计 目录一:摘要 3二:设计要求 3三:系统整体功能说明 3四:各功能模块说明 3(一)硬件电路 34.1数码管显示电路 34.2温度检测电路 44.3键盘电路 44.4报警电路 44.5.时钟电路 44.6.复位电路 5(二)系统软件分析 54.7.主程序 54.8.读出温度子程序 54.9温度转换命令字程序 64.10计算温度子程序 64.11显示数据刷新子程序 7五:系统使用说明 75.1.静态调试 75.2.软件调试 75.3.动态调试 7六:总结与体会 7七:参考文献 7附件:源程序 7一:摘要:温度测量在生产和生活中的作用是显
2、而易见的。如石化企业中,根据不同的温度可以分离出汽油、柴油、煤油等产品;日常生活中,需要根据气温加减衣物,如此等等。本设计利用单片机和集成温度传感器设计一个可以测量温度的数字显示温度计,并达到一定的测量精度。本设计用ds18b20智能温度传感器作为检测元件,用LED数码管显示检测温度,该数字温度计与传统的温度计相比较,具有读数方便,测量反围广,测温准确等优点,主要用于对温度要求比较准确的场所。关键字:单片机 数字温度 显示 AT89C51 DS18B20二:设计要求:1. 至少利用3位数码管进行测量值的显示;2. 温度测量范围:-50100;3. 测量误差0.5;4. 可以任意设置上下限报警温
3、度三:系统整体功能说明本文所设计的数字温度显示器主要是由硬件和软件两大部分组成。而硬件是前提,是整个系统执行的基础,它主要是为软件提供程序运行的平台。而软件部分是对硬件端口所体现的信号,加以采集、分析、处理,最终实现控制其所要实现的各项功能,达到控制器对温度的采集及显示和报警等功能。 复位电路 LED显示 报警温度 AT89C51 报警电路 调整电路 时钟电路 温度传感器 图3:系统整体功能图四:各功能模块说明(附图)(一)硬件电路:4.1数码管显示电路图4-1:数码管显示电路4.2温度检测电路图4-2:温度检测电路4.3键盘电路图4-3:键盘电路4.4报警电路图4-4:报警电路4.5.时钟电
4、路本次设计采用的是12M的晶振,电路图如下图3,两只电容在20pF100pF之间取值,其取值在60pF70pF时振荡器频率稳定性较高,按照一般经验,外接晶体时两个电容的取值为30pF。,时钟电路如下图:图4-5:时钟电路4.6.复位电路 在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便可实现初始化状态服务。为保证应用系统可靠的复位在设计复位电路时,通常使RST引脚保持4ms以上的高电平,只要RST保持高电平,MCS-51单片机就会循环复位;当RST从高电平变为低电平时,MCS-51单片机就从0000H地址开始执行程序,在单片机复位的有效期
5、间,ALE、PSEN 引脚输出高电平。本次设计采用的是手动复位,其电路图如下:图4-6.复位电路(二) 系统软件算法分析:4.7.主程序:主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。其程序流程见图4-7所示。图4-7主程序流程图 图4-8读温度流程图4.8.读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图4-8示 图4-9 温度转换流程图4.9温度转换命令字程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms
6、,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图4-9所示4.10计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4-10所示。 图4-10计算温度流程图 图4-11显示数据刷新流程图4.11显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图4-11。五:系统使用说明:单片机系统的调试应包括硬件及软件两部分,主要是通过调试发现硬件及软 件中存在的问题,查看其运行结果是否符合设计要求。 在对系统进行实际调试时,首
7、先应对硬件进行静态调试,同时对系统软件进 行初步调试,此后再对软件和硬件进行动态调试,最后才能使系统进入正常工作. 1.静态调试:静态调试主要是排除明显的硬件故障。在将芯片、传感器等元 件连接到电路板上时,要保证各处电源极性、电压正确,以防止因电源极性接反 或电压过高损坏芯片或传感器。此外,插入芯片必须在断电的情况下进行,特别 注意芯片的方向不要插反。 2.软件调试: 在软件调试时采用在计算机上利用模拟软件实现对单片机的硬 件模拟、指令模拟及运行状态模拟,从而完成应用软件开发的全过程。调试过程 中的运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来, 通过这些显示结果随时跟踪程序
8、运行状态,以确定程序运行无错误。 3.动态调试:控制系统的软件和硬件是密切相关的,由于软件模拟开发系统 不能对硬件部分进行诊断,同时也不能实时在线仿真,所以用户程序还需跟硬件 连接起来进行联调,同时对软件和硬件进行检查和诊断。整个单片机系统进行在 线调试时,需借助仿真开发工具来对用户软件及硬件电路进行诊断、调试。 在应用系统各模块电路调试成功后,将程序加载到在线仿真器上,这时就能 单步或连续地执行目标程序,同时也可以根据需要分段设置断点执行程序。而对 于一些与硬件相关的用户程序,如接口驱动程序等,则需要配合硬件,进行在线 调试,如果有逻辑错误,也要及时纠正修改。 程序调试完毕后, 利用编程器将
9、程序固化到单片机中, 使整个系统运行起来。六:总结与体会:经过上半学期对单片机的理论学习以及这三周的单片机的课程设计终于完成了我的数字温度计的设计,它的各方面性能基本上都已达到课程设计的要求。在本次设计过程中,我发现了很多问题,这些问题在单纯的学习课本上的知识时所不能遇到的,比如51单片机的端口驱动能力较弱,用P0口送段代码时要接上拉电阻,还有就是比较深入的理解了数码管的动态显示以及键盘的显示原理,对汇编语言也有了较深入的理解,这次课程设计使我对单片机的兴趣有了很大提升,我决定以此次课程设计为起点,争取巩固我的单片机基础,学好单片机。从这次的课程设计中,我真真切切的体会到了理论与实践的差别,所
10、以在以后的学习中,我会更加注意理论与实践相结合,多亲自动手操作,把所学的理论知识运用到实践中去,在实践中验证理论知识,以此来加深对理论的理解和掌握,这是我在这次课程设计中的最大收获。七:参考文献:1张毅刚单片机原理运用(第二版)高等教育出版社,2004年2杨欣51单片机应用从零开始 清华大学出版社,2007年3方佩敏新编传感器原理应用电路详解电子工业出版社,1993附件:源程序:#include #include #include #define uchar unsigned char #define uint unsigned intextern uint MnDS18B20(void);e
11、xtern void display( ); extern void lcd_Init(void); extern bit DS18B20_Init();void main(void) lcd_Init(); DS18B20_Init(); while(1) MnDS18B20(); display(); #include #include #include #define uchar unsigned char #define uint unsigned int#define SkipROM 0xcc /跳过ROM指令,此处不用读ROM中的序列号 #define TempCvt 0x44 /
12、温度转化命令#define ReadTemp 0xbe /读温度命令/*接口定义*/sbit DQ = P34; /数据线接口/*变量定义*/bit NP = 0; /正负标志uint TempReg = 0; /16bit温度值 uchar IntgerL = 0; /个位整数位uchar IntgerM = 0; /十位整数位uchar IntgerH = 0; /百位整数位uchar DecimalL = 0; /第一位小数uchar DecimalH = 0; /第二位小数uchar DecimalML = 0; /第三位小数uchar DecimalMH = 0; /第四位小数uin
13、t code TempTab = 0x0000, 0x0625, 0x1250, 0x1875, /小数部分转换表 0x2500, 0x3125, 0x3750, 0x4375, 0x5000, 0x5625, 0x6250, 0x6875, 0x7500, 0x8125, 0x8750, 0x9375 ;/*外部函数声明*/extern void delayus(uchar z); /us延时函数 extern void delay(uint z); /ms延时函数extern void write_com(uchar com); /写命令函数extern void write_data(u
14、char date); /液晶写数据;extern void N_nop(uint t); /延时函数/*函数名称:18B20_Init*功能描述:DS18B20初始化函数*入口参数:None*出口参数:None*返 回 值:01*/bit DS18B20_Init() DQ = 0; /数据线拉低 N_nop(500); /延时480us DQ = 1; /数据线拉高 N_nop(7); /延时25us if(DQ = 1) DQ = 1; /数据线拉高 return(0); /初始化失败返回0 else N_nop(240); /延时240us DQ = 1; /数据线拉高 return(
15、1); /初始化成功返回1(初始化成功则P3.4口被拉为低电平) /*函数名称:Write18B20*功能描述:向DS18B20写一个字节*入口参数:Data*出口参数:None*返 回 值:None*/void Write18B20(uchar Data) uchar data i; for (i = 8; i 0; i-) DQ = 0; DQ = Data & 0x01; /数据的发送时:先发送低位,后发送高位 N_nop(10); DQ = 1; Data = 1; /*函数名称:Read18B20*功能描述:从DS18B20读数据*入口参数:None*出口参数:None*返 回 值:
16、Data*/uchar Read18B20() uchar data i = 0; uchar data Data = 0; for (i = 8; i 0; i-) DQ = 0; /给脉冲信号 Data = 1; DQ = 1; /给脉冲信号,给一个低脉冲,接收一位数据 if(DQ) Data |= 0x80; /从低位开始接收 N_nop(10); return(Data);/*函数名称:Read18B20*功能描述:从DS18B20读数据*入口参数:None*出口参数:None*返 回 值:Data*/void GetTemp(void) uchar data TempL, TempH
17、; while(!DS18B20_Init(); /初始化不成功则继续初始化 Write18B20( SkipROM ); /发出跳过ROM指令 Write18B20( TempCvt ); /发出温度转化命令 N_nop(800); /延时800us while(!DS18B20_Init(); /初始化不成功则继续初始化 Write18B20( SkipROM ); /发出跳过ROM指令 Write18B20( ReadTemp); /发出读温度命令 TempL = Read18B20(); /调用读程序,读出两字节 TempH = Read18B20(); TempReg = TempH
18、; /低八位与高八位复合 TempReg = TempReg 4; / 正数与上0x07f0 Rwk2 = TempReg & 0x000f; / 符号位| 整数 | 小数(整数部分-55-125,为7位) IntgerH = Rwk1 / 100; /整数部分百位 IntgerM = Rwk1 % 100 / 10; /整数部分十位 IntgerL = Rwk1 % 10; /整数部分个位 Rwk3 = TempTabRwk2; DecimalL = Rwk3 & 0x000f; /小数部分 小数点后第四位 DecimalML = (Rwk3 & 0x00f0) 4; /小数点后第三位 De
19、cimalMH = (Rwk3 & 0x0f00) 8; /小数点后第二位 DecimalH = (Rwk3 & 0xf000) 12; /小数点后第一位/*函数名称:MnDS18B20*功能描述:DS18B20驱动函数*入口参数:None*出口参数:None*返 回 值:None*/void MnDS18B20(void) GetTemp(); /温度采集 DataCovt(); /采集值变换为BCD码#include #include #include #define uchar unsigned char #define uint unsigned int sbit RS = P35;/
20、数据/命令选择 写数据 RS=1;RW=0;D0D7数据;E高脉冲sbit RW = P36;/读写选择 写指令 RS=0;RW=0;D0D7指令码;E高脉冲;sbit En = P37;/使能信号;/*变量*/uchar code Team1 = NowTemperature:;uchar code Table = 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39;/*外部变量*/extern bit NP; extern uchar IntgerL; /个位整数位extern uchar IntgerM; /十位整数位extern ucha
21、r DecimalH; /第二位小数extern uchar DecimalMH; /第四位小数/uchar code table7 = Press S4 to set ;/uchar code table8 = standard temp! ; /*变量的定义*/uchar code table8 = 0x16,0x09,0x08,0x08,0x08,0x09,0x06,0x00 ; /自定义字符显示C ;/uchar code table1 = DS18B20 OK ! ;/uchar code table2 = TEMP IS: . ;/*ms延时函数*/void delay(uint
22、z) uint i, j; for(i = z; i 0; i-) for(j = 113; j 0; j-);/*us延时函数*/void delayus(uchar z) / while(z-); /*函数名称:N_nop*功能描述:短延时函数*入口参数:a*出口参数:None*返 回 值:None*/void N_nop(uint t) uint i; for(i = t; i 0; i-) _nop_();/*液晶写指令*/void write_com(uchar com) RS = 0; RW = 0; P1 = com; En = 1; delay(5); En = 0;/*液晶写数据*/void write_data(uchar date) RS = 1; RW = 0; P1 =date; En = 1; delay(5); En = 0;/*液晶初始化状态*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1