单片机课程设计报告.docx

上传人:b****8 文档编号:10463022 上传时间:2023-02-13 格式:DOCX 页数:26 大小:445.04KB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共26页
单片机课程设计报告.docx_第2页
第2页 / 共26页
单片机课程设计报告.docx_第3页
第3页 / 共26页
单片机课程设计报告.docx_第4页
第4页 / 共26页
单片机课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告.docx

单片机课程设计报告

 

 

电气与电子信息工程学院

单片机课程设计

 

设计题目:

数字式温度计设计与制作

  专业班级:

电子信息工程2010

(1)班

学  号:

 201040210123 

姓名:

XXX

指导教师:

XXXXXXXXX

设计时间:

2013/06/03~2013/06/16

设计地点:

K2—406

单片机课程设计成绩评定表

姓名

学号

201040210123

专业班级

电子信息工程2010

(1)班

课程设计题目:

数字温度计设计与制作

课程设计答辩或质疑记录:

1、单片机时钟电路的作用?

解:

单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。

机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。

单片机选择了12MHz晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这也是单片机的定时原理。

 

2、温度传感器接上后,为啥开始总显示85℃?

解:

温度传感器一旦接反就会立刻发热,有可能烧毁!

接反是导致该传感器总是显示85℃的原因。

面对着扁平的那一面,左负右正。

 

成绩评定依据:

实物制作(40%):

课程设计考勤情况(10%):

课程设计答辩情况(20%):

完成设计任务及报告规范性(30%):

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

2013年6月20日

目录

第一部分课程设计任务书4

一、课程设计题目4

二、课程设计内容4

三、进度安排4

四、基本要求5

五、课程设计考核办法与成绩评定5

第二部分课程设计7

1系统方案选择与论证7

1.1测温电路选取7

1.2显示电路选取7

2系统硬件电路设计7

2.1总体功能介绍7

2.2各功能模块硬件介绍8

3系统软件设计11

3.1系统总程序流图11

3.2系统子程序11

3.3keil调试13

3.4仿真结果14

4实物的组装与调试14

4.1调试结果14

4.2调试问题15

5心得体会15

附录16

附录1:

电路原理图16

附录2:

程序16

附录3:

使用元器件一览表21

参考文献21

第一部分课程设计任务书

2012~2013学年第2学期

学生姓名:

陈庚专业班级:

电子信息工程2010级

(1)班

指导教师:

李玉平王海华工作部门:

电气学院电信教研室

一、课程设计题目:

单片机课程设计

1.简易心率检测仪

6.遥控开关

2.电子时钟的设计与制作

7.水温控制系统

3.电子密码锁的设计与制作

8.音乐播放器的设计与制作

4.数字式温度计的设计与制作

9.多路数据采集系统

5.数字式电压表的设计与制作

10自选

二、课程设计内容

1.根据具体设计课题的技术指标和给定条件,以单片机为核心器件,能独立而正确地进行方案论证和电路设计与制作,要求概念清楚、方案合理、方法正确、步骤完整;

2.熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;

3.熟练使用单片机C/汇编语言进行软件设计;

4.熟练使用Proteus、Keil软件进行仿真电路测试;

5.熟练使用Protel软件设计印刷电路板;

6.学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;

7.撰写设计报告,参考毕业设计论文格式。

注:

详细要求和技术指标见附录。

三、进度安排

 

1.时间安排

序号

内容

学时安排(天)

1

方案论证和总体设计

2

2

硬件设计

2

3

软件设计

2

4

硬件测试

1

5

撰写和打印设计报告

1

合计

10

设计指导答辩地点:

K2—406

2.执行要求

单片机应用系统设计与制作多个选题,每组不超过3人,为避免雷同,在设计中每个同学所采用的方案不能一样。

四、基本要求

(1)根据要求确定系统设计方案;

(2)绘制系统框图、系统原理总图,印刷电路板图,列出元器件明细表;

(3)计算电路参数和选择元器件,画出软件框图,列出程序清单;

(4)仿真,测试与修改调整;

(5)对设计进行全面总结,写出课程设计报告。

五、课程设计考核办法与成绩评定

根据过程、报告、答辩等确定设计成绩,成绩分优、良、中、及格、不及格五等。

评定项目

基本内涵

分值

设计过程

考勤

10分

答辩

回答问题情况

20分

实物测试

正常无故障运行

40分

设计报告

完成设计任务、报告规范性等情况

30分

90~100分:

优;80~89分:

良;70~79分:

中;60~69分,及格;60分以下:

不及格

第二部分课程设计

1系统方案选择与论证

1.1测温电路选取

方案一:

测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻

方案二:

考虑使用温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。

比较以上两种方案,很容易看出,采用方案二,能够直接读取温度,而且电路设计比较简单,软件设计容易实现,故实际设计中拟采用方案二。

1.2显示电路选取

方案一:

采用LCD1602液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,显示多样,,显示数据清晰可观。

 

方案二:

采用LED数码管动态扫描,专门用来显示温度,并且采用动态扫描法与单片机连接时。

 

通过对比以上二种方案,本设计采用了LCD1602液晶显示屏作为数字式温度计显示模块,因为其价格适中,而且其可显示大量文字,显示多样,,显示数据清晰可观。

2系统硬件电路设计

2.1总体功能介绍

数字式温度计由四部分组成:

1、控制部分主芯片采用单片机AT89C52;2、显示部分采用LCD1602液晶显示屏实现显示环境温度,同时利用单片机定时器实现走时功能;3、温度采集部分采用DS18B20温度传感器采集温度;4、利用LED灯实现高温报警系统。

5、利用按键实现调时功能。

总体设计原理图如下:

2.2各功能模块硬件介绍

2.2.1控制模块

单片机控制模块

该方案是基于STC89C52单片机来实现系统控制。

通过编写程序控制外围电路来控制液晶显示屏,其I/O口的选取也是采取一般的选取方式。

其时钟电路采用12MHZ的时钟晶振。

2.2.2温度采集模块

DS18B20温度采集电路

该部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。

数字温度传感器DS18B20把采集到的温度通过数据引脚传到单片机的P3.4口,单片机接受温度并存储。

此部分只用到DS18B20和单片机,硬件很简单。

其测温范围为—10摄氏度到+50摄氏度。

每一片DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM中。

主机在进入操作程序前必须用读ROM(33H)命令将该DSl8B20的序列号读出。

程序可以先跳过ROM,启动所有DSl8B20进行温度变换,之后通过匹配ROM,再逐一地读回每个DSl8B20的温度数据。

其具体测温流程如下图所示。

DS18B20测温流程

2.2.3液晶显示模块

LCD1602液晶显示

通过采集ds18b20的温度,同步显示到LCD显示器上,精确到小数点后两位。

同时在液晶上显示走时功能和最高温度和最低温度。

1602采用标准的16脚接口,其引脚电路功能如下所示

第1脚:

VSS为电源地

第2脚:

VCC接5V电源正极

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(使用时可以通过一个10K的电位器调整对比度)。

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E端为使能(enable)端,高电平

(1)时读取信息,负跳变时执行指令。

第7~14脚:

D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。

15脚背光正极,16脚背光负极。

2.2.4独立按键和高温报警模块

独立按键电路

高温报警电路

这两个模块均为单片机外围辅助模块,其按键电路主要实现对时间的调节,可实现对时分秒的加减调节;而高温报警电路主要实现对高温提示作用,当温度在正常范围时,D1灯亮,当温度达到高温37度时,D1灯灭,D2灯亮,这样也就实现了报警提示功能。

3系统软件设计

3.1系统总程序流图

系统总的流程图

3.2系统子程序

3.2.1读取温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

DS18B20的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高位在后低位在前,共有12位数,小数4位,整数7位,还有一位符号位。

3.2.2时钟走时子程序

该时钟主要通过AT89C52单片机的定时器T0中断实现走时功能,同时通过开关设置时间。

具体程序流程图如下:

 

3.3keil调试

在keil调试过程中,发现走时总是很慢,不管设置定时器初值,其走时人很慢,而且没多大变化,后来通过询问老师,和自己不停调试,发现时程序延时除了问题,最终将显示程序从主程序移到中断程序中就解决了此问题。

3.4仿真结果

4实物的组装与调试

4.1调试结果

4.2调试问题

刚开始接液晶时,液晶灯亮,但没有显示任何数值,后经过检查,发现是V0脚必须接一滑动变阻器,同时接地,通过调节滑动变阻器的阻值来调节液晶显示器对比度,这样就很好的显示出结果来。

5心得体会

此次课程设计使用单片机实现,在选题中,我们到图书馆,网上查询资料,最终我们小组决定做数字式温度计。

因为这学期刚好开设了单片机课程,所以方案上手还是比较顺利。

在设计过程中,我们发现理论学习是一回事,真正做实物却又感觉确实很难,如调试程序过程就是一个考验人耐心的过程,有时一个很小的问题就要调试好久。

仿真时,出现时钟走时很慢的现象,当时以为是定时器设置初值时出了问题,但不管怎么调,最终还是一样,最终在请教老师后,才知道是程序延时除了问题,把显示程序移到中断程序中就可以了。

在制作实物的时候,我们也遇到不少问题,开始液晶不显示数值,后来通过在液晶14号引脚接滑动变阻器调节才解决这一问题。

但在大家的耐心讨论下,这些问题我们都一一解决了。

最终,我们的数字式温度计也成功制作出来了。

这次课程设计,让我懂得要想真正学好单片机,不光要学好课本知识,还要不断增强自己的实践动手能力,通过做实物,不断积累经验。

同时,我们也学到了团结合作的精神。

附录

附录1:

电路原理图

 

附录2:

程序

#include

#include

#include

#include

#include

#include

#include

#include"LCD1602.h"

sbitkey1=P1^0;

sbitkey2=P1^1;

sbits1=P3^0;

sbits2=P3^1;

sbits3=P3^2;

unsignedcharwarn[10]={0x20,0x57,0x41,0x52,0x4e,0x49,0x4e,0x47,'\0'};

unsignedchart[2],*pt,s1num;

unsignedcharcount=0,num=0,num1=0,num2=0;

unsigned

charTempBuffer1[17]={0x2b,0x31,0x32,0x37,0x2e,0x30,0x30,0xdf,0x43,

0x20,0x4C,0x3A,0x2D,0x20,0x35,0x35,'\0'};

unsignedcharTempBuffer0[17]={0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,

0x20,0x20,0x48,0x3A,0x2B,0x31,0x32,0x35,'\0'};

unsignedcharcodedotcode[4]={0,25,50,75};

voidcovert1(void)

{

unsignedcharx=0x00,y=0x00;

t[0]=*pt;

pt++;

t[1]=*pt;

if(t[1]>0x07)

{

TempBuffer1[0]=0x2d;

t[1]=~t[1];

t[0]=~t[0];

x=t[0]+1;

t[0]=x;

if(x>255)

t[1]++;

}

elseTempBuffer1[0]=0x2b;

t[1]<<=4;

t[1]=t[1]&0x70;

x=t[0];

x>>=4;

x=x&0x0f;

t[1]=t[1]|x;

TempBuffer1[1]=t[1]/100+0x30;

if(TempBuffer1[1]==0x30)TempBuffer1[1]=0xfe;

TempBuffer1[2]=(t[1]%100)/10+0x30;

if((TempBuffer1[0]==0x2d)&&(TempBuffer1[2]>2+0x30))

key1=0;

elsekey1=1;

if(TempBuffer1[2]>8+0x30)key2=0;elsekey2=1;

TempBuffer1[3]=(t[1]%100)%10+0x30;

t[0]=t[0]&0x0c;

t[0]>>=2;

x=t[0];

y=dotcode[x];

TempBuffer1[5]=y/10+0x30;

TempBuffer1[6]=y%10+0x30;

}

voiddelay2(unsignedchari)

{

while(i--);

}

voidinit()

{

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

}

voidtime()

{

if(count==2)

{

count=0;

num++;

TempBuffer0[7]=num%10+0x30;

TempBuffer0[6]=num/10+0x30;

if(num==60)

{

num1++;

num=0;

TempBuffer0[4]=num1%10+0x30;

TempBuffer0[3]=num1/10+0x30;

if(num1==60)

{

num1=0;

num2++;

TempBuffer0[1]=num2%10+0x30;

TempBuffer0[0]=num2/10+0x30;

if(num2==24)

num2=0;

}

}

}

}

voidkeyscan()

{

if(s1==0)

{

delay2(5);

if(s1==0)

{

s1num++;

while(!

s1);

if(s1num==1)

{

TR0=0;

LCD_Write(LCD_COMMAND,0x80+7);

LCD_Write(LCD_COMMAND,0x09);

}

if(s1num==2)

{

LCD_Write1(4);

}

if(s1num==3)

{

LCD_Write1

(1);

}

if(s1num==4)

{

s1num=0;

TR0=1;

LCD_Write(LCD_COMMAND,0x0c);

}

}

}

if(s1num!

=0)

{

if(s2==0)

{

delay2(50);

if(s2==0)

{

while(!

s2);

if(s1num==1)

{

num++;

if(num==60)

num=0;

TempBuffer0[7]=num%10+0x30;

TempBuffer0[6]=num/10+0x30;

}

if(s1num==2)

{

num1++;

if(num1==60)

num1=0;

TempBuffer0[4]=num1%10+0x30;

TempBuffer0[3]=num1/10+0x30;

}

if(s1num==3)

{

num2++;

if(num2==24)

num2=0;

TempBuffer0[1]=num2%10+0x30;

TempBuffer0[0]=num2/10+0x30;

}

}

}

}

if(s1num!

=0)

{

if(s3==0)

{

delay2(50);

if(s3==0)

{

while(!

s3);

if(s1num==1)

{

num--;

if(num==0)

num=59;

TempBuffer0[7]=num%10+0x30;

TempBuffer0[6]=num/10+0x30;

}

if(s1num==2)

{

num1--;

if(num1==0)

num1=59;

TempBuffer0[4]=num1%10+0x30;

TempBuffer0[3]=num1/10+0x30;

}

if(s1num==3)

{

num2--;

if(num2==0)

num2=23;

TempBuffer0[1]=num2%10+0x30;

TempBuffer0[0]=num2/10+0x30;

}

}

}

}

}

voidmain()

{

unsignedcharTH=125,TL=-55;

init();

while

(1)

{

pt=ReadTemperature(TH,TL,0x7f);

delay2(100);

keyscan();

time();

covert1();

LCD_Initial();

LCD_Print(0,0,TempBuffer0);

if(TempBuffer1[2]<8+0x30)

LCD_Print(0,1,TempBuffer1);

else

LCD_Print(0,1,warn);

}

}

voidT0_time()interrupt1

{

TH0=0x3c;

TL0=0xb0;

count++;

}

附录3:

使用元器件一览表

组件

数量

组件

数量

STC89C52

一片

30pf瓷片电容

两个

12M晶振

一个

10K排阻

一个

按键

三个

330电阻

一个

LED灯

二个

10k排阻

两个

5v电源

一个

芯片底座

一个

LCD1602液晶

一个

10uf极性电容

一个

参考文献

[1]李朝青,单片机原理及接口技术(简明修订版)[M].北京:

北京航空航天大学出版社,1998

[2]李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994

[3]金伟正.单线数字温度传感器的原理与应用[J].电子技术与应用,2000

[4]李钢.1-Wire总线数字温度传感器DS18B20原理及应用.现代电子技术[J],2005

[5]苏麟祥.DS1820数字温度传感器的功能特性及其应用.世界采矿快报,

2000(9)

[6]沙占友等.智能化集成温度传感器原理与应用.北京:

机械工业出版社,2002

[7]郭天祥.51单片机C语言教程.北京:

电子工业出版社.

[8]胡汉才.单片机原理及接口技术[M].北京:

清华大学出版社,1996

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1