您好,欢迎访问三七文档
《单片机原理及接口》课程设计报告题目:智能散热系统专业名称:通信工程班级:创新142学号:201411403128姓名:刘小杰2015年12月课程设计报告首页院、系(部)信息工程学院专业通信工程班级创新142学号201411403128姓名刘小杰任课教师陈玮课程名称单片机原理及接口成绩评语签字:年月日复核人意见签字:年月日课程设计报告的要求:首先应先介绍课程设计的基本内容(包括设计目标)、设计的背景及意义。其次是方案论证:说明设计的原理并进行方案选择,再然后进行硬件电路的设计及原理说明,和软件的流程说明。第三是过程(设计或实验)论述:对设计调试工作的详细表述。最后是结论或总结:对整个研究工作进行归纳和综合、包括心得体会。大致内容按上面要求来写,也可以参考网上“单片机课程设计报告”来扩充。文章中的格式规定:图:图的名称采用中文,图名在图片下面格式为:图1-1,后接图名。表格:表名在表格上面。正文五号字一级标题四号加粗二级标题小四加粗行距:1.5倍附录的程序:两列页边距:上下2.5厘米左右2.8厘米不要目录需要中文摘要排版参考毕业设计论文格式(见下页)参考文献若有可写打印的报告里面不需要附录程序电子版里面需要报告里面应该有各模块电路图调试现象图刻盘要求:最后,除了打印的,全班把每个人的程序(keil项目及hex文件)、电路(proteus文件或硬件的照片及电路原理图)和报告打包压缩后命名为“班级名-学号-姓名”(如电信091-123456-陈玮)刻盘。散热系统刘小杰信息工程学院摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。关键词:单片机,程序,DS18B20温度传感器,LCD1602液晶显示屏,定时器,直流电机等等1课程设计的基本内容为实现系统能采集当前环境温度,当温度达到一定值时触发直流风扇的转动进行主动散热,并且随着温度的变化而改变风力大小,风力与温度成正比,本系统设置了三个档来控制风力的大小,20C°--22C°为一档,22C°--24C°为二档,24C°--26C°为三档(为了演示方便而设计的三档,在实际用途中可依据要求来设置)。本智能散热系统根据环境温度智能调控风力的功能可以放置在一些硬件中以达到降温的功能。2方案论证2.1设计原理及方案选择通过DS18B20温度传感器来采集当前环境的温度,通过LCD1602液晶显示屏来显示温度以及工作时间,CPU根据当前温度来控制电机的速度。2.2硬件电路设计及原理说明使用P1.1口来连接电机,P0口连接LCD1602,P2.5口为读/写选择端,P2.6为命令/数据选择端,P2.7为使能端,P3.7口为数据总线,P3.4口为定时器0,P3.5为定时器1.图为DS18B20原理图图为LCD1602原理图图为外部电路接线图3设计过程论述3.1DS18B20温度传感器DS18b20采用单总线的结构,单总线的特点就是只有一根数据线,系统中的数据交换都由这根线进行。DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括:1、初始化时序2、写时序3、读时序DS18B20的初始化主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待初始化时序图初始化程序unsignedcharDs18b20Init(){unsignedinti;DSIO=0;//将总线拉低480us~960usi=70;while(i--);//延时642usDSIO=1;//然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低i=0;while(DSIO)//等待DS18B20拉低总线{i++;if(i50000)//等待50MSreturn0;//初始化失败}return1;//初始化成功}主机发出各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线恢复。而DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写操作时序图向DS18B20写入一个字节voidDs18b20WriteByte(unsignedchardat){unsignedinti,j;for(j=0;j8;j++){DSIO=0;//每写入一位数据之前先把总线拉低1usi++;DSIO=dat&0x01;//然后写入一个数据,从最低位开始i=6;while(i--);//延时68us,持续时间最少60usDSIO=1;//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat=1;}}读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。作为从机DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60微秒才能完成读操作时序图读取一个字节unsignedcharDs18b20ReadByte(){unsignedcharbyte,bi;unsignedinti,j;for(j=8;j0;j--){DSIO=0;//先将总线拉低1usi++;DSIO=1;//然后释放总线i++;i++;//延时6us等待数据稳定bi=DSIO;//读取数据,从最高位开始读取byte=(byte1)|(bi7);/*将byte右移一位,然后或上左移7位后的bi,注意移动之后移掉那位补0。*/i=4;//读取完之后等待48us再接着读取下一个数while(i--);}returnbyte;}DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(地址:28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,并且每个DS18B20的序列号都不相同,因此它可以看作是该DS18B20的地址序列码;最后8位则是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。由于每一个DS18B20的ROM数据都各不相同,因此微控制器就可以通过单总线对多个DS18B20进行寻址,从而实现一根总线上挂接多个DS18B20的目的。DS18B20的存储器由一个高速暂存RAM和一个非易失性、电可擦除(E2)RAM组成。DS18B20经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。所以当我们只想简单的读取温度值的时候,只用读取暂存器中的第0和第1个字节就可以了。简单的读取温度值的步骤如下:1、跳过ROM操作2、发送温度转换命令3、跳过ROM操作4、发送读取温度命令5、读取温度值开始转换温度voidDs18b20ChangTemp(){Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令Ds18b20WriteByte(0x44);//温度转换命令Delay1ms(100);}发送读取温度命令voidDs18b20ReadTempCom(){Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令Ds18b20WriteByte(0xbe);//发送读取温度命令}读取温度intDs18b20ReadTemp(){unsignedinttemp=0;unsignedchartmh,tml;Ds18b20ChangTemp();//先写入转换命令Ds18b20ReadTempCom();//然后等待转换完后发送读取温度命令tml=Ds18b20ReadByte();//读取温度值共16位,先读低字节tmh=Ds18b20ReadByte();//再读高字节temp=tmh;temp=8;temp|=tml;returntemp;}3.2LCD1602液晶显示屏LCD1602的引脚操作步骤:1、初始化2、写命令(RS=L)设置显示坐标3、写数据(RS=H)写入一个字节命令voidLcdWriteCom(unsignedcharcom)//写入命令{RS=0;RW=0;GPIO_LCD=com;Delay1ms(10);LCDE=1;Delay1ms(10);LCDE=0;}写入一个字节数据voidLcdWriteData(unsignedchardat)//写入数据{RS=1;RW=0;GPIO_LCD=dat;Delay1ms(10);LCDE=1;Delay1ms(10);LCDE=0;}初始化voidLcdInit()//LCD初始化子程序{LcdWriteCom(0x38);//设置显示模式LcdWriteCom(0x0c);//开显示不显示光标,光标不闪烁LcdWriteCom(0x06);//写一个指针加1LcdWriteCom(0x01);//清屏LcdWriteCom(0x80);//设置数据指针起点}1602的指令码DL:0时:选择4位数据总线模式。1时:选择8位数据总线模式。N:0时:选择显示一行。1时:选择显示两行。F:0选择5*7模式,1选择5*10模式。一般只有5*7模式。显示开/关及按键显示RAM地址映射图3.3编程调试过程出现的问题当控制电机速度的程序放在定时器1的中断中则会导致液晶显示屏出现闪烁,这是因为每中断一次就进入中断程序,则读取温度的程序就没有运行,所欲显示就会出错,而当控制电机的程序放在主程序中,则电机的速度则无法控制,只有转或不转。这个问题无法突破就无法实现调节风力大小以及正确显示温度的功能,尝试了多种办法后发现在读取温度的时候先将定时器关闭,读取温度结束后就开启定时器。4、程序清单#includereg51.hvoidTime1Config();/*相关字符的重定义*/#defineucharunsignedchar#defineuintunsignedint#defineLCD1602_DATAPINSP0sbitLCD1602_E=P2^7;//定义P2.7口为使能端sbitLCD1602_RW=P2^5;//定义P2.5口为读/写选择端(H/L)sbitLCD1602_RS=P2^6;//定义P2.6口为数据/命令选择端(H/L)sbitDSPORT=P3^7;//定义P3.7口为总线sbitPWM=P1^1;//定义P1.1为电机电压输出端/*定义一些相关变量*/unsignedchartimer1;floattp;inttemp,speed;unsignedchartable[]={'0','1','2','3','4','5','6','7','8','9'};in
本文标题:智能散热系统
链接地址:https://www.777doc.com/doc-2315647 .html