单片机应用系统设计工程实践报告

合集下载

单片机实训报告

单片机实训报告

单片机实训报告一、实训目的本次单片机实训的目的在于通过实际操作和项目实践,深入理解单片机的工作原理和应用开发,提高自身的硬件设计能力、软件编程能力以及解决实际问题的能力。

同时,培养团队合作精神和创新思维,为今后从事相关领域的工作打下坚实的基础。

二、实训设备在本次实训中,我们使用了以下主要设备:1、单片机开发板:用于实验和项目的开发与调试。

2、计算机:安装相关的编程软件和开发工具。

3、示波器:用于观察电路中的信号波形。

4、万用表:用于测量电路中的电压、电流等参数。

三、实训内容1、单片机基础知识学习首先,我们对单片机的基本结构、工作原理、指令系统等进行了系统的学习。

了解了单片机的内部组成,包括中央处理器(CPU)、存储器、输入输出端口等。

通过学习指令系统,掌握了如何使用汇编语言或 C 语言对单片机进行编程控制。

2、硬件电路设计在硬件电路设计方面,我们学习了如何根据实际需求设计单片机的最小系统,包括电源电路、时钟电路、复位电路等。

同时,还掌握了如何扩展外部存储器、输入输出设备等。

通过实际绘制电路图和制作电路板,提高了我们的硬件设计能力和动手实践能力。

3、软件编程在软件编程方面,我们使用了汇编语言和 C 语言两种编程方式。

通过编写简单的程序,如点亮 LED 灯、控制数码管显示、实现按键输入等,逐渐熟悉了单片机的编程方法和技巧。

同时,还学习了如何使用中断、定时器、串口通信等功能,提高了程序的复杂程度和实用性。

4、项目实践在项目实践环节,我们分组完成了一个基于单片机的温度控制系统的设计与实现。

该系统通过温度传感器采集环境温度,经过单片机处理后,控制风扇的转速和加热装置的工作状态,从而实现对环境温度的自动控制。

在项目实践过程中,我们充分运用了所学的知识和技能,从系统方案设计、硬件电路搭建、软件编程调试到系统测试优化,每个环节都进行了精心的设计和认真的实施。

四、实训过程在实训开始阶段,我们首先进行了单片机基础知识的学习和实验。

单片机实训报告总结

单片机实训报告总结

单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。

通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。

同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。

此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。

2.了解复杂电子产品生产制造的全过程。

3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。

4.能运用51单片机进行简单的单片机应用系统的硬件设计。

5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

它的电气性能指标:输入电压:~6V,典型值为5V。

可用干电池组供电,也可用直流稳压电源供电。

如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。

他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。

2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。

单片机实验报告总结

单片机实验报告总结

单片机实验报告总结单片机实验报告总结单片机实验心得体会单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。

在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。

这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。

将所学知识运用到实践中,在实践中发现问题,强化理论知识。

现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。

第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。

第一次实验体现了一个人对新事物的接受能力和敏感度。

虽然之前做过许多种实验。

但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。

所以第一次试验相对失败。

鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。

在做实验中,第二个问题应该是准备不充分吧。

一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。

后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。

于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。

这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。

发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。

三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。

于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。

但是编程是一件很严肃的事情,容不得半点错误。

于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。

单片机实训报告的方案

单片机实训报告的方案

一、实训背景随着电子技术的飞速发展,单片机作为电子系统中的核心控制单元,其应用领域日益广泛。

为了使学生深入了解单片机的工作原理、应用方法以及设计过程,提高学生的动手能力和团队合作精神,特制定本单片机实训报告方案。

二、实训目的1. 掌握单片机的基本原理和结构,熟悉其各个模块的功能。

2. 熟悉单片机应用系统的一般设计过程,培养系统设计能力。

3. 提高学生的动手能力,通过实际操作加深对单片机知识的理解。

4. 增强团队合作意识,培养学生沟通协调能力。

5. 培养学生的创新意识和解决问题的能力。

三、实训内容1. 单片机基础知识- 单片机的结构和工作原理- 单片机的指令系统- 单片机的编程方法- 单片机的接口技术2. 单片机应用系统设计- 单片机最小系统设计- 单片机与外部设备接口设计- 单片机程序设计- 单片机应用系统调试3. 实践项目- LED流水灯- 设计目的:通过控制LED灯的闪烁,熟悉单片机的I/O操作。

- 设计要求:实现LED灯的快速闪烁,并实现闪烁频率的可调。

- 按键控制- 设计目的:通过按键控制LED灯的开关,熟悉单片机的中断系统。

- 设计要求:实现按键的识别和响应,控制LED灯的开关。

- 温度传感器- 设计目的:利用温度传感器采集环境温度,通过单片机处理并显示。

- 设计要求:实现温度的实时采集和显示,并具有超温报警功能。

- 智能小车- 设计目的:设计一款智能小车,实现避障、循迹等功能。

- 设计要求:实现小车的自动寻迹、避障和转向等功能。

四、实训步骤1. 理论学习- 讲解单片机的基本原理、结构、指令系统、编程方法等理论知识。

- 讲解单片机应用系统设计的一般流程和方法。

2. 实践操作- 学生分组,每组负责一个实践项目。

- 指导教师根据项目要求,讲解相关硬件和软件知识。

- 学生根据项目要求,进行硬件电路设计、软件编程和调试。

3. 作品展示- 学生完成项目后,进行作品展示和答辩。

- 指导教师对学生的作品进行评价和指导。

单片机实训总结报告万年历

单片机实训总结报告万年历

一、引言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

为了提高我们的实践能力和专业技能,我们选择了单片机实训作为课程的一部分。

在实训过程中,我们以万年历为例,通过学习单片机原理、编程和应用,实现了万年历的设计与制作。

本文将详细总结万年历实训的整个过程。

二、实训目标1. 掌握单片机的基本原理和编程方法;2. 熟悉万年历的设计与制作流程;3. 提高动手实践能力和团队合作精神;4. 培养创新思维和解决问题的能力。

三、实训内容1. 单片机原理及编程实训初期,我们学习了单片机的基本原理,包括CPU、存储器、输入输出接口等。

通过学习,我们了解了51单片机的结构、工作原理和指令系统。

在此基础上,我们学习了C语言编程,掌握了Keil软件的使用方法。

2. 万年历设计与制作万年历的设计与制作分为以下几个步骤:(1)需求分析:确定万年历的功能,包括显示年、月、日、星期、时分秒、农历、公历、节假日等。

(2)硬件设计:选择合适的单片机、显示屏、按键等硬件设备。

本实训选用AT89C51单片机、LCD1602显示屏和按键。

(3)软件设计:编写万年历的程序,实现功能需求。

程序主要包括以下几个模块:1)时钟模块:实现时分秒的计时功能;2)日期模块:实现年、月、日的显示和计算;3)星期模块:根据日期计算星期;4)农历模块:根据公历日期计算农历日期;5)节假日模块:显示节假日信息;6)按键模块:实现用户交互功能。

(4)调试与优化:对万年历程序进行调试,确保功能正常运行。

同时,对程序进行优化,提高运行效率。

3. 实训成果展示经过一段时间的努力,我们成功完成了万年历的设计与制作。

以下为万年历的部分功能展示:(1)显示当前日期、时间、星期和温度;(2)显示农历日期和节假日信息;(3)通过按键调整时间、日期和温度;(4)具有闹钟功能,可设置闹钟时间。

四、实训总结1. 提高了单片机编程能力:通过万年历的设计与制作,我们掌握了C语言编程方法,熟悉了Keil软件的使用。

单片机技术及应用和电工基础实习报告

单片机技术及应用和电工基础实习报告

单片机技术及应用和电工基础实习报告
一、前言
单片机和电工基础是电子信息类专业的重要基础课程。

本实习旨在通过实践操作加深对单片机技术及应用和电工基础理论知识的理解,培养学生动手能力和解决实际问题的能力。

二、单片机技术及应用实习内容
1. 认识单片机最小系统及其编程环境
2. 单片机输入输出口编程
3. 定时器/计数器编程
4. 串行通讯编程
5. 设计并调试一个小型系统
三、电工基础实习内容
1. 认识基本电气元件
2. 串联和并联电路的实验测量
3. 电桥电路的实验测量
4. 单相交流电路的实验测量
5. 三相电路实验测量
四、实习总结
通过本次实习,我们掌握了单片机系统的组成、编程方法、编程技巧等基础知识,并动手设计调试了一个小型控制系统。

同时,我们也加深了对电路原理、测量方法等电工基础知识的理解。

实习过程锻炼了
我们的动手能力和独立思考解决问题的能力,为将来从事相关工作打下了坚实基础。

五、附录
1. 单片机小型系统代码
2. 电路实验数据及分析。

单片机实训成果报告

单片机实训成果报告

一、实训背景随着科技的不断发展,单片机技术作为一种重要的电子技术,被广泛应用于各个领域。

为了提高学生的实践能力,加深对单片机技术的理解,我们学校组织了单片机实训课程。

通过本次实训,我们掌握了单片机的基本原理、编程方法和应用技术,提高了自己的动手能力和创新意识。

二、实训目的1. 熟悉单片机的基本结构和工作原理;2. 掌握单片机的编程方法和调试技巧;3. 培养学生解决实际问题的能力;4. 提高学生的团队协作和沟通能力。

三、实训内容1. 单片机基本原理:介绍了单片机的组成、工作原理、指令系统等基本知识。

2. 单片机编程:学习了C语言编程,掌握了单片机程序设计的基本方法和技巧。

3. 单片机应用:通过实际项目,如LED流水灯、电子钟、温度控制器等,掌握了单片机在实际工程中的应用。

4. 单片机调试:了解了单片机调试的基本方法,掌握了Keil、IAR等集成开发环境的使用。

四、实训成果1. 完成了LED流水灯项目:通过编程控制LED灯的亮灭,实现了流水灯效果。

项目代码如下:```c#include <reg51.h>void delay(unsigned int ms){unsigned int i, j;for (i = ms; i > 0; i--)for (j = 120; j > 0; j--);}void main(){while (1){P1 = 0x01; // 点亮第一个LED delay(500);P1 = 0x02; // 点亮第二个LED delay(500);P1 = 0x04; // 点亮第三个LED delay(500);P1 = 0x08; // 点亮第四个LED delay(500);P1 = 0x10; // 点亮第五个LED delay(500);P1 = 0x20; // 点亮第六个LED delay(500);P1 = 0x40; // 点亮第七个LED delay(500);P1 = 0x80; // 点亮第八个LED delay(500);}}```2. 完成了电子钟项目:通过编程实现电子钟的功能,包括时、分、秒的显示和计时。

单片机实训报告实训方案

单片机实训报告实训方案

一、实训目的1. 掌握单片机的基本原理和组成。

2. 熟悉51单片机的编程方法及开发工具。

3. 培养动手实践能力,提高问题分析和解决能力。

4. 理解单片机在实际应用中的地位和作用。

二、实训内容1. 单片机基本原理- 单片机的组成结构- CPU的工作原理- 存储器分类及功能- I/O接口电路2. 51单片机编程- C语言编程基础- 51单片机指令系统- 程序设计方法- 常用函数和中断系统3. 单片机开发工具- Keil uVision软件的使用- 串口调试助手的使用- 实验箱的连接与调试4. 实训项目- 项目一:LED流水灯- 实现功能:通过单片机控制LED灯的闪烁,形成流水灯效果。

- 实训目标:熟悉单片机基本编程方法,掌握LED灯的控制。

- 项目二:按键控制LED灯- 实现功能:通过按键控制LED灯的开关。

- 实训目标:掌握按键输入的处理方法,了解中断系统。

- 项目三:数字时钟- 实现功能:通过单片机实现数字时钟的功能,显示时分秒。

- 实训目标:掌握定时器的工作原理,了解时钟系统的设计。

- 项目四:温度传感器数据采集- 实现功能:通过温度传感器采集环境温度,并在LCD显示屏上显示。

- 实训目标:学习传感器应用,掌握A/D转换器的工作原理。

三、实训步骤1. 准备工作- 熟悉实训环境,了解实验设备。

- 安装Keil uVision软件,配置实验箱。

2. 理论学习- 学习单片机基本原理、编程方法和开发工具。

- 阅读相关教材和资料,掌握知识点。

3. 项目实施- 根据实训项目要求,进行程序设计。

- 利用Keil uVision软件进行编译、调试和烧录程序。

- 连接实验箱,进行实际操作。

4. 结果分析- 分析程序运行结果,发现问题并解决。

- 总结实训过程中的经验和教训。

5. 撰写报告- 按照实训报告模板,撰写实训报告。

四、实训要求1. 严格遵守实训纪律,按时完成实训任务。

2. 认真学习理论知识,熟练掌握编程方法和开发工具。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016-2017学年第1学期单片机应用系统设计/工程实践(课号:103G06B/D/E)实验报告项目名称:基于AT89C51单片机温度报警系统学号姓名班级学院信息科学与工程学院完成时间目录一、项目功能及要求 (3)1.1、课程设计的性质和目的 (3)1.3、项目设计要求 (3)二、系统方案设计及原理 (3)2.1、设计主要内容 (3)2.2 、AT89C51单片机简介 (3)2.3 、DS18B20简介 (4)2.4 、数码管显示 (5)2.5、报警电路 (6)三、系统结构及硬件实现 (7)3.1、总电路图 (7)3.2、单片机控制流程图 (8)四、软件设计过程 (8)五、实验结果及分析 (8)5.1 、Proteus仿真 (8)5.2 、C程序调试 (9)六、收获及自我评价 (14)七、参考文献 (15)一、项目功能及要求1.1、课程设计的性质和目的本温度报警器以AT89C51单片机为控制核心,由一数字温度传感器DS18B20测量被控温度,结合7段LED以及驱动LED的74LS245组合而成。

当被测量值超出预设范围则发出警报,且精度高。

利用现代虚拟仿真技术可对设计进行仿真实验,与单片机仿真联系紧密的为proteus仿真,利用keil软件设计单片机控制系统,然后与proteus进行联合调试,可对设计的正确性进行检验。

1.2、课程设计的要求1、遵循硬件设计模块化。

2、要求程序设计结构化。

3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。

4、要求程序结构合理,语句使用得当。

5、适当追求编程技巧和程序运行效率。

1.3、项目设计要求1、基于AT89C51单片机温度报警系统;2、设计3个按键分别为:设置按钮、温度加、温度减;3、DS18B20温度传感器采集温度,并在数码管上显示按键的区别;二、系统方案设计及原理2.1、设计主要内容本设计以AT89C51单片机为核心,从而建立一个控制系统,实现通过3个按键控制温度,以达到设置温度上下限的功能,并在数码管上显示三个数字当前的温度上下限设置值和DS18B20温度采集值的显示(精确到小数点后一位),当温度高于上限或者低于下限蜂鸣器报警。

2.2 、AT89C51单片机简介AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用A TMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案.AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器,32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,片内时钟振荡器。

此外,AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

AT89C51单片机的基本结构和外部引脚如下图所示。

图2.12.3 、DS18B20简介(1)DS18B20内部结构DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统的热敏电阻相比,只需一根线就能直接读出被测温度值,并可根据实际需求来编程实现9~12位数字值的读数方式。

DS18B20的外形如一只三极管,引脚名称及作用如下:GND:接地端,DQ:数据输入/输出脚,与TTL电平兼容,VDD:可接电源,也可接地。

因为每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。

采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;采用外部供电方式则VDD接+5V,多用一根导线,但测量速度较快,内部结构如图如图3-1.图3.1(2)DS18B20供电方式DS18B20可以采用外部电源供电和寄生电源供电两种模式。

外部电源供电模式是将DS18B20的GND直接接地,DQ与但单总线相连作为信号线,VDD与外部电源正极相连。

如图3.2图3.2(3)DS18B20的测温原理DS1820是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。

计数器被预置到对应于-55℃的一个值。

如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。

同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。

然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。

斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨率。

DS18B20内部对此计算的结果可提供0.5℃的分辨率。

温度以16bit带符号位扩展的二进制补码形式读出,DS18B20遵循单总线协议,每次测温时都必须有4个过程]:初始化、传送ROM操作命令、传送ROM操作命令、数据交换。

2.4 、数码管显示数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。

常见数码管有10根管脚。

管脚排列如下图所示。

其中COM为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。

共阳、阴极内部原理图(如图4.1),其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。

一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。

显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。

本次试验的显示电路如图4.2.图4.1图4.22.5、报警电路通过P2口控制,当温度高于设置的上限或者设置的下限时蜂鸣器响报警。

如图5.1.图5.2三、系统结构及硬件实现3.1、总电路图本电路是由A T89C51和DS18B20为核心,加上串口电路来实现对整个电路的控制和设计,电路图如下。

3.2、单片机控制流程图四、软件设计过程(1)、把程序在Keil uVision4中调试,成功无错误后生成Hex文件。

(2)、根据电路图在proteus软件中回去电路图,检查无错误。

(3)、双击89C51导入生成Hex文件。

(4)、点击proteus软件左下方的开始键,进行仿真,观察高低电平情况。

五、实验结果及分析5.1 、Proteus仿真(1)Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。

因此,Proteus有较高的推广利用价值。

(2)在仿真时按设置按钮,按一次设置温度上限,按第二次设置温度下限,按第三次回到当前温度显示值,其它两个按键是对设置值的加减;或者利用串口在上位机上进行设置,端口选择COM2,波特率选择9600,三个按钮的功能和仿真图里的按键功能一样,对温度进行设置。

如图5.1图5.15.2 、C程序调试在Kill4中对程序进行编写调试源代码如下:# include <reg51.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit but1=P1^0;sbit but2=P1^1;sbit but3=P1^2;sbit p34=P2^4;sbit p35=P2^5;sbit p36=P2^6;sbit dp=P0^7;sbit p37=P2^7;sbit DQ=P2^2; //定义DS18B20总线I/Osbit LING=P2^0; //定义响铃uchar shezhi=0;uint shangxian=300; //上限报警温度,默认值为60uint xiaxian=200; //下限报警温度,默认值为0uchar code LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};bit s1,s2,s3,s4;/*****延时子程序*****/void Delay(uint i){while( i-- );}void delayms(uint x){uchar i;while(x--);for(i=0;i<120;i++);}void Init_DS18B20(void){unsigned char x=0;DQ=1;Delay(8); //稍做延时DQ=0; //单片机将DQ拉低Delay(80); //精确延时,大于480usDQ=1; //拉高总线Delay(14);x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay(20);}/*****读一个字节*****/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat=0;for (i=8;i>0;i--){DQ=0; // 给脉冲信号dat>>=1;DQ=1; // 给脉冲信号if(DQ) dat|=0x80;Delay(4);}return(dat); }/*****写一个字节*****/void WriteOneChar(unsigned char dat){ unsigned char i=0;for (i=8; i>0; i--){DQ=0;DQ=dat&0x01;Delay(5);DQ=1; dat>>=1;}}void Tmpchange(void) //发送温度转换命令{Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0x44); //启动温度转}unsigned int ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Tmpchange();Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器a=ReadOneChar(); //读低8位b=ReadOneChar(); //读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; //放大10倍输出并四舍五入return(t);}Disp_Temperature(uint e) //显示温度{ uint a,b,c,d;a=e/1000; //计算得到十位数b=e/100-a*10; //计算得到个位数字d=e%10; //计算得到小数点后两位c=(e%100)/10; //计算得到小数点后一位p34=0;p35=0;p36=0;p37=0;P0 =LEDData[d]; //显示小数点后两位p34=1;p35=0;p36=0;p37=0;Delay(500);p34=0;p35=0;p36=0;p37=0;P0 =LEDData[c]; //显示小数点后一位dp=0;p34=0;p35=1;p36=0;p37=0;Delay(500);p34=0;p35=0;p36=0;p37=0;P0 =LEDData[b]; //显示个位p34=0;p35=0;p36=1;p37=0;Delay(500);p34=0;p35=0;p36=0;p37=0;P0 =LEDData[a]; //显示十位p34=0;p35=0;p36=0;p37=1;Delay(500);p34=0;p35=0;p36=0;p37=0; //关闭显示}void initUart(void)//串口初始化9600{TMOD|=0x20;SCON=0xfc;TH1=0xfd;TL1=0xfd;EA=1;ES=1;TR1=1;}void uart(void) interrupt 4 //串口中断处理函数{if(RI){RI=0;if(SBUF=='a'){s1=1;}if(SBUF=='b'){s2=1;}if(SBUF=='c'){s3=1;}}}/*****主函数*****/void main(void){uint z,e;IT0=1;IT1=1;EX0=1;EX1=1;EA=1;initUart();while(1){if(but1==0 || s1==1){ //判断按钮setDelay(100);if(but1==0 || s1==1){s1=0;while(but1==0);shezhi++;if(shezhi==3)shezhi=0;}}else if(but2==0 || s2==1){ //判断按钮+ Delay(100);if(but2==0 || s2==1){s2=0;while(but2==0);if(shezhi==1)xiaxian++;else if(shezhi==2)shangxian++;}}else if(but3==0 || s3==1){ //判断按钮-Delay(100);if(but3==0 || s3==1){s3=0;while(but3==0);if(shezhi==1)xiaxian--;else if(shezhi==2)shangxian--;}}if(shezhi==0){e=ReadTemperature(); //获取温度值if(e>shangxian || e<xiaxian){LING=0; //温度不在范围内报警}else LING=1;Disp_Temperature(e); //显示温度}else if(shezhi==1){Disp_Temperature(xiaxian); //显示温度下限}else if(shezhi==2){Disp_Temperature(shangxian); //显示温度上限}}}六、收获及自我评价这次课程设计不光是要掌握模单片机书本上的理论基础,还需要我们锻炼自己的动手能力。

相关文档
最新文档