单片机课程设计

2020-03-02 10:00:30 来源:范文大全收藏下载本文

单片机课程设计

实验报告

——简易温度测量仪

专业班级:电科3班

姓名:李纯

学号:2220112515

摘要

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

温度检测仪是工业生产中应用比较广泛的一种检测装置。温度是生产工艺过程中最基本、最重要的控制参数之一,关系到生产条件的建立,产品的产量、质量、效率,以及生产设备的寿命与安全等。温度是物体冷热程度的表现参数。温度测量仪的由感温元件帮助完成检测。

本次课程设计制作一个基于单片机的简易温度测量仪,设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。

设计任务和要求

设计目标和实现方法

为了满足简易温度测量仪的基本要求,可以进行低精度,一定范围内的温度测量,本次设计基于51单片机,温度传感器DS18B20并用液晶屏显示数据。

整体方案论述

根据简单温度测量仪的功能和本方案中的设计指标要求,本系统选用了MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实

现对简单温度测量仪的设计。具体设计考虑如下:

由于要设计的是简单的温度测量仪,可以进行低精度,一定范围内温度的测量,对结果的精确程度与灵敏度要求不苛刻,故本次设计基于MCS 51 单片机为主控机,并用液晶屏显示数据即可。

实验资料

MCS 51 单片机

在HMOS技术大发展的背景下,Intel公司在MCS-48系列的基础上,于1980年推出了8位MCS-51系列单片机。它与以前的机型相比,功能增强了许多,就其指令和运行速度而言,超过了INTEL8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。较早的MCS-51典型时钟为12MHz,而目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高,现在已有400MHz的单片机问世。51系列单片机有8位CPU,片内带振荡器频率范围为1.2MHz-12MHz, 128B的数据存储器,4KB的程序存储器。程序存储器的寻址空间为64KB,片外数据存储器的寻址空间为64KB,有128个用户位寻址空间,21个字节特殊功能寄存器,4个8位的I/O并行接口:P0、P

1、P

2、P3,两个16位定时、计数器,两个优先级别的五个中断源,还有一个全双工的串行I/O接口,可多机通信。片内采用单总线结构有较强的位处理能力。

DS18B20数字温度传感器

DS18B20数字温度传感器接线方便,封装成后可应用于多种场

合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。其独特的单线接口方式使DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

液晶显示器

在电场的作用下,液晶分子的排列会产生变化,从而影响到它的光学性质,这种现象叫做电光效应。利用液晶的电光效应,英国科学家在上世纪制造了第一块液晶显示器即LCD。今天的液晶显示器中广泛采用的是定线状液晶,如果我们微观去看它,会发现它特象棉花棒。与传统的CRT相比,LCD不但体积小,厚度薄(14.1英寸的整机厚度可做到只有5厘米),重量轻、耗能少(1到10 微瓦/平方厘米)、工作电压低(1.5到6V)且无辐射,无闪烁并能直接与CMOS集成电路匹配。由于优点众多,LCD从1998年开始进入台式机应用领域。

实际制作与调试

原理图

MCS-51 单片机

温度传感器

元器件清单

最小系统板 1块 温度传感器DS18B20 1各 液晶显示器 1个 电阻 18KΩ 1个 滑动变阻器 0-2KΩ 1个 面包板 1块 导线若干

仿真图

Proteus ISIS是一种操作简便而又功能强大的原理图编辑工具,它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件实现了单片机仿真和SPICE电路仿真的结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真等功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。它支持主流单片机系统的仿真。目前支持的单片机类型有68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。它还具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的电路设计和仿真软件,功能极其强大。本次课程设计基于该软件绘制简易温度测量仪原理图,并进行仿真。得到结果如下

程序流程图

系统程序流程图

温度转换与显示子程序流程图

程序清单

#include #define uint unsigned int #define uchar unsigned char uchar code table[]=\"now temperature:\"; sbit ds = P2^2; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit dula=P2^6; sbit wela=P2^7;

void belay(uint i)//274us { unsigned char j, k; for(j = i; j > 0; j--) { for(k = 125; k > 0; k--); } } void dsWait() { unsigned int i;

while(ds); while(~ds); //检测到应答脉冲 i = 4; while(i>0) i--; } void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void write_com(uchar com) //写指令 本次单片机只用写不用读 { lcdrs=0; //写指令的时候rs=0 P0=com; delay(5); lcden=1; delay(5); lcden=0; } void writeData(uchar date) //写数字

要保证 LCDEN为1

{ lcdrs=1; //写数据的时候rs为1 P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() //初始化

{

dula=0; // 关闭数码管

wela=0; lcden=0; write_com(0x38); //显示设置

write_com(0x0f); //00001DCB(D=1开显示,C=1显示光标,B=1光标闪烁) write_com(0x06); // 00001NS(N=1当读或写一个字符后地址指针加1,且光标加一,S=1当写一个字符,整屏显示左移) write_com(0x01); //清屏

} //初始化DS18B20

//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit() { //一定要使用unsigned int型, 一个i++指令的时间, 作为与DS18B20通信的小时间间隔

//以下都是一样使用unsigned int型 unsigned int i; ds = 0; i = 100; while(i>0) i--; ds = 1; i = 4; while(i>0) i--; }

//向DS18B20读取一位数据

//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平, //之后DS18B20则会输出持续一段时间的一位数据 bit readBit() { unsigned int i; bit b;

ds = 0; i++; //3.25us ds = 1; i++; i++; b = ds; i = 8; while(i>0) i--; return b; }

//读取一字节数据, 通过调用readBit()来实现 unsigned char readByte() { unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i> 1); } return dat;

} //向DS18B20写入一字节数据 void writeByte(unsigned char dat) { unsigned int i; unsigned char j; bit b; for(j = 0; j >= 1; //写\"1\", 让低电平持续2个小延时, 高电平持续8个小延时 if(b) { ds = 0; i++; i++; ds = 1; i = 8; while(i>0) i--; } else //写\"0\", 让低电平持续8个小延时, 高电平持续2个小延时 {

ds = 0; i = 8; while(i>0) i--; ds = 1; i++; i++; } } } //向DS18B20发送温度转换命令 void sendChangeCmd() { dsInit(); //初始化DS18B20 // belay(1); //延时1ms dsWait() ; writeByte(0xcc); //写入跳过序列号命令字 writeByte(0x44); //写入温度转换命令字 } //向DS18B20发送读取数据命令 void sendReadCmd() { dsInit(); // belay(1); dsWait() ; writeByte(0xcc); //写入跳过序列号命令字

writeByte(0xbe); //写入读取数据令字 }

//获取当前温度值

unsigned int getTmpValue() { unsigned int value; //存放温度数值 float t; unsigned char low, high; sendReadCmd(); //连续读取两个字节数据 low = readByte(); high = readByte(); //将高低两个字节合成一个整形变量 value = (high

//DS18B20的精确度为0.0625度, 即读回数据的最低位代表0.0625度

t = value * 0.0625 ; //将它放大10倍, 使显示时可显示小数点后一位, 并对小数点后第二2进行4舍5入

//如t=11.0625, 进行计数后, 得到value = 111, 即11.1 度

value = t * 10 + 0.5; return value; }

//显示当前温度值, 精确到小数点后一位 void display(unsigned int v) { uchar tempArray[4]; tempArray[0]=(v/100)+48; tempArray[1]=((v%100)/10)+48; tempArray[2]=\'.\';

tempArray[3]=(v%10)+48; write_com(0x80+0x40); writeData(tempArray[0]); writeData(tempArray[1]); writeData(tempArray[2]); writeData(tempArray[3]); writeData(0xdf); writeData(\'c\'); }

void main() {

int num; unsigned int value; value=0; // value++; init(); write_com(0x80);//写在第一行 for(num=0;num

P1=0xff; while(1) { //启动温度转换 sendChangeCmd(); value = getTmpValue(); //显示3次 if(value>320)

{

belay(5) ;

if(value>320)

P1=0x00;

}

else

{

belay(5) ;

if(value

P1=0xff;

} display(value); } }

成品图

实验数据记录

实验结果分析

根据简单温度测量仪的最终结果,本次设计基本达到最初的方案中的设计指标要求,实现了对温度的低精度,一定范围内的测量。

课程设计总结

本次课程设计,我们组选择的是使用基于单片机设计一个简易温度测量仪。确定这个课题后,通过图书馆,网上查阅资料,与小组内的成员之间的交流,我们对课题有了一个比较充分的了解。

第一次上课时候,由于之前大家都把资料准备好了,就直接开始仿真。刚刚开始仿真时,大家根据资料将仿真图弄好,且把程序导入,但是仿真结果总是不对,经过细心排查后发现是程序少了一条,改正后,就出结果了。过程中也有对软件的不熟悉,使得仿真进行的不是很顺利,好在最后正确出现想要的结果了。

之后,开始连接面包板,这个课题需要连接的元器件较少,连线这方面也很顺利。但是结果就是一直出不来,以为是线路连错,反反复复检查错误不下余十遍后发现还是不能出来结果。由于我们班是最后一个做课设的,安排在考试周,时间也很紧张,大家也开始着急了。最后没有办法,组员觉得是星研软件的问题,于是将面包板带回宿舍,因为他们有单片机学习板,准备将程序导入到芯片内部进行尝试。果不其然,组员在宿舍将程序导入到芯片后脱离星研软件后,立马出来了实验结果。

在这次单片机课程设计中,我们组每个人都将自己的任务完成

的很好,相互合作使得整个课设过程终于顺利的完成。虽然过程中因为总是出不来实验结果等各种原因使整个过程感觉困难重重,但是还是很好的解决了。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正学以致用,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

单片机课程设计

《单片机课程设计.doc》
单片机课程设计
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文