单片机课程设计报告格式Word格式.docx

上传人:b****6 文档编号:17635320 上传时间:2022-12-07 格式:DOCX 页数:30 大小:382.62KB
下载 相关 举报
单片机课程设计报告格式Word格式.docx_第1页
第1页 / 共30页
单片机课程设计报告格式Word格式.docx_第2页
第2页 / 共30页
单片机课程设计报告格式Word格式.docx_第3页
第3页 / 共30页
单片机课程设计报告格式Word格式.docx_第4页
第4页 / 共30页
单片机课程设计报告格式Word格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告格式Word格式.docx

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

单片机课程设计报告格式Word格式.docx

主控制器即单片机部分,用于存储程序和控制电路;

LED显示部分是指四位共阳极数码管,用来显示温度;

传感器部分,即温度传感器,用来采集温度,进行温度转换;

复位部分,即复位电路。

测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。

本设计能完成的温度测量范围是-55°

C~+128°

1、3本组成员所做的工作(字体小4号,黑体)

黄飞:

负责数字温度计proteus仿真及源程序编写

张侃:

焊接外接硬件电路,调试运行

刘新宇:

搜集STC89C52RC等芯片相关外围接线资料,校核整理实验元器件。

2、方案设计

方案Ⅰ:

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

方案设计框图如下:

方案Ⅱ:

考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,方案二电路比较简单,软件设计也比较简单,故采用了方案Ⅱ。

3、硬件设计

3.1硬件框图

按照系统设计功能的要求,确定系统由3个模块组成:

主控制器、测温电路和显示电路。

数字温度计总体电路结构框图所示:

3.2单片机的选择

单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用4节电池供电。

3.3复位电路设计

单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用6.8KΩ的阻值,电容采用电容值为10μ的电解电容。

3.4温度显示电路

四位共阳极数码管,能够显示小数和负温度。

零下时,第一个数码管显示负号。

当温度超过99.9时,四个数码管全部亮。

列扫描用P3.0~P3.3口来实现,列驱动用9012三极管。

电路图如下:

3.5温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

3.6系统总电路图如下:

3、6整体电路图

3.6单片机

单片机处理模块部分选用的芯片为STC89C52RC,属于89C51RC系列。

选用STC单片机的理由:

降低成本,提升性能,原有程序直接使用,硬件无需改动。

使产品更小,更轻,功耗更低用STC提供的专用工具可很容易的将2进制代码、16进制代码下载进STC相关的单片机。

3.6.1如图为STC89C52RC的引脚图;

STC89C52RC引脚图

3、6.2各引脚功能如表

89C52RC引脚功能

管脚

管脚编号

说明

LQFP44

PDIP40

PLCC44

P0.0~P0.7

37-30

39-32

43~36

P0:

P0口既可作为输入/输出口,也可作为地址/数据复用总线使

用。

当P0口作为输入/输出口时,P0是一个8位准双向口,上电复

位后处于开漏模式。

P0口内部无上拉电阻,所以作I/O口必须外接

10K-4.7K的上拉电阻。

当P0作为地址/数据复用总线使用时,是

低8位地址线[A0~A7],数据线的[D0~D7],此时无需外接上拉电

阻。

P1.0/T2

40

1

2

P1.0

标准I/O口PORT[0]

P.0/T2

T2

定时器/计数器2的外部输入

P1.1/T2EX

41

3

P.

标准I/O口PORT[1]

P./T2EX

4

T2EX

定时器/计数器2捕捉/重装方式的触发控制

P1.2

42

4

标准I/O口PORT[2]

P1.3

43

5

标准I/O口PORT[3]

P1.4

44

6

标准I/O口PORT[4]

P1.5

1

7

标准I/O口PORT[5]

P1.6

8

标准I/O口PORT[6]

P1.7

9

标准I/O口PORT[7]

P2.0~P2.7

18-25

21-28

24-3

Port2:

P2口内部有上拉电阻,既可作为输入/输出口,也可作为高8

位地址总线使用(A8~A5)。

当P2口作为输入/输出口时,P2是一

个8位准双向口。

P3.0/RxD

10

11

P3.0

标准I/O口PORT3[0]

0

RxD

串口1数据接收端

P3.1/TxD

3

P3.1

标准I/O口PORT3[1]

P3./TxD

TxD

串口1数据发送端

P3.2/INT0

12

14

P3.2

标准I/O口PORT3[2]

2

4

INT0

外部中断0,下降沿中断或低电平中断

P3.3/INT

13

15

P3.3

标准I/O口PORT3[3]

5

INT

外部中断1,下降沿中断或低电平中断

P3.4/T0

14

16

P3.4

标准I/O口PORT3[4]

6

T0

定时器/计数器0的外部输入

P3.5/T

17

P3.5

标准I/O口PORT3[5]

7

T1

定时器/计数器1的外部输入

P3.6/WR

18

P3.6

标准I/O口PORT3[6]

8

WR#

外部数据存储器写脉冲

P3.7/RD

13

17

19

P3.7

标准I/O口PORT3[7]

RD#

外部数据存储器读脉冲

P4.0

23

标准I/O口PORT4[0]

P4.1

28

34

标准I/O口PORT4[1]

P4.2/INT3#

39

P4.2

标准I/O口PORT4[2]

INT3#

外部中断3,下降沿中断或低电平中断

P4.3/INT2#

P4.3

标准I/O口PORT4[3]

外部中断2,下降沿中断或低电平中断

P4.4/PSEN#

26

29

32

P4.4

标准I/O口PORT4[4]

PSEN#

外部程序存储器选通信号输出引脚

P4.5/ALE

27

30

33

P4.5

标准I/O口PORT4[5]

ALE

地址锁存允许信号输出引脚/编程脉冲输入引脚

P4.6/EA#

31

35

P4.6

标准I/O口PORT4[6]

EA#

内外存储器选�引脚

RST

复位脚

XTAL1

19

21

内部时钟电路反相放大器输入端,接外部晶振的一个引

脚。

当直接使用外部时钟源时,此引脚是外部时钟源的输

入端。

XTAL2

20

内部时钟电路反相放大器的输出端,接外部晶振的另一

端。

当直接使用外部时钟源时,此引脚可浮空,此时

XTAL2实际将XTAL1输入的时钟进行输出。

VCC

38

电源正极

Gnd

22

电源负极,接地

3、6.3STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RX

和TXD分别是此放大器的输入端和输出端。

时钟可以由内部方式产生或外部

式产生。

内部方式的时钟电路如图所示,在RXD和TXD引脚上外接定元件内部电路部振荡器就产生自激振荡。

定时元件通常采用石英晶体和电容组成的联谐振回路。

晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF间选择,电容值的大小可对频率起微调的作用。

外部方式的时钟电路如图所示,RXD接地,TXD接外部振荡器。

对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。

片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

(a)内部方式时钟电路(b)外部方式时钟电路

时钟电路

3、6、4复位及复位电路

A复位操作

复位是单片机的初始化操作。

其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表所示。

一些寄存器的复位状态

寄存器

复位状态

PC

0000H

TCON

00H

ACC

TL0

PSW

TH0

SP

07H

TL1

DPTR

TH1

P0-P3

FFH

SCON

IP

XX000000B

SBUF

不定

IE

0X000000B

PCON

0XXX0000B

TMOD

B复位信号及其产生

RST引脚是复位信号的输入端。

复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。

若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。

产生复位信号的电路逻辑如图2-4所示

复位信号的电路逻辑图

整个复位电路包括芯片内、外两部分。

外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。

复位操作有上电自动复位相按键手动复位两种方式。

A、上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图所示。

这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。

B、按键手动复位有电平方式和脉冲方式两种。

其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图所示;

而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。

其电路如图所示:

(a)上电复位(b)按键电平复位(c)按键脉冲复位

复位电路

上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。

本系统的复位电路采用图(b)上电复位方式

STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。

时钟可以由内部方式产生或外部方式产生。

内部方式的时钟电路如图所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。

定时元件通常采用石英晶体和电容组成的并联谐振回路。

晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。

图时钟电路

4、软件设计

4、1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20主流程图如下:

4、2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,流程图如下:

4、3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令。

当采用12位分辨率时,转换时间约为750ms。

在本程序设计中,采用1s显示程序延时法等待转换的完成。

流程图如下:

4、4计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。

4、5显示数据刷新子程序

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。

5、系统调试

硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。

软件调试首先,并不是把编号的程序直接烧进单片机,而先用KeilC51编译器进行调试。

在使用KeilC51编译器时,对工程成功地进行编译(汇编)、连接以后,在主菜单中打开“调试”栏,点击“开始/停止调试模式”,即可进入软件模拟仿真调试状态,KeilC51内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能非常强大,可以在没有硬件和仿真器的情况下进行程序的调试,但是在时序上,软件模拟仿真是达不到硬件的时序的。

进入调试状态后,“调试”栏菜单项中原来不能用的命令现在已经可以使用了。

调试程序看是否能仿真,如果运行正常再将在KeilC51编译器中调试好的程序烧写至单片机。

可根据电路的运行情况推测出程序出错的部分,修改程序后再经过KeilC51编译器调试后烧到单片机,反复检测直到能工作完全正常。

由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;

否则将无法读取测量结果。

本程序采用单片机汇编或C语言编写用KeilC51编译器编程调试。

软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成。

6、设计总结

本次的课程设计使我们进一步巩固了书本上的知识,做到了学以致用。

通过系统仿真软件protues和编译软件keil,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现,如温度上下限设置。

最后一步的焊接硬件也遇到了不少麻烦,P0端口没有加上拉电阻,P1端口没有加电阻导致数码管不亮或者亮度不够。

总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。

其次,要学致用,理论联系实际,这样才会取得事半功倍的效果。

此次课程设计断断续续经历了3个星期,我从中学到了许多。

从最开始的资料的收集,核对元器件,中间的电路板的焊接,程序的设计,到最好的调试和再调试。

这些都使我学到了好多,成长了好多。

通过查找各种资料,我更加熟练的运用所学过的信息检索方法。

也懂得了耐心的重要性,焊接电路培养了我的细心,调试过程挑战了我的坚持能力,打磨了我的性格。

这次经历不仅仅扩充了我的知识面,培养了动手能力,还教会了我怎样做好一件事的方法。

课程设计的过程带给我的是对所学知识的复习,是对新知识的拓展.是对遇到各种困难的坚持,也是对坚持就是胜利这种信仰的肯定。

虽然在这中间走过许多歪路,遇到很多失败,但是最终带给我是成功,是胜利的微笑。

在大学毕业走向社会的这个过度过程,它使我受益匪浅。

附录A

源程序(字体4号,黑体,居中)

//使用STC89C52RC单片机,12MHZ晶振,用共阳LED数码管

//P1口输出段码,P3口扫描

//#pragmasrc(d:

\aa.asm)

#include"

reg51.h"

intrins.h"

//_nop_();

延时函数用

#defineDisdataP1//段码输出口

#definediscanP3//扫描口

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;

//温度输入口

sbitDIN=P1^7;

//LED小数点控制

uinth;

//*******温度小数部分用查表法**********//

ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};

/*共阳LED段码表"

0"

"

1"

2"

3"

4"

5"

6"

7"

8"

9"

不亮"

-"

*/

ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};

//列扫描控制字

uchardatatemp_data[2]={0x00,0x00};

//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};

//显示单元数据,共4个数据,一个运算暂存用

/***********11微秒延时函数**********/

voiddelay(uintt)

{

for(;

t>

0;

t--);

}

/***********显示扫描函数**********/

scan()

chark;

for(k=0;

k<

4;

k++)//四位LED扫描控制

{

Disdata=dis_7[display[k]];

if(k==1){DIN=0;

discan=scan_con[k];

delay(90);

discan=0xff;

}

/***********18B20复位函数**********/

ow_reset(void)

charpresence=1;

while(presence)

DQ=1;

_nop_();

DQ=0;

//

delay(50);

//550us

//

delay(6);

//66us

presence=DQ;

//presence=0继续下一步

delay(45);

//延时500us

presence=~DQ;

DQ=1;

}

/**********18B20写命令函数*********/

//向1-WIRE总线上写一个字节

voidwrite_byte(ucharval)

uchari;

for(i=8;

i>

i--)//

DQ=0;

//5us

DQ=val&

0x01;

//最低位移出

delay(6);

//66us

val=val/2;

//右移一位

DQ=1;

delay

(1);

/*********18B20读1个字节函数********/

//从总线上读取一个字节

ucharread_byte(void)

ucharvalue=0;

i>

i--)

value>

>

=1;

DQ=0;

//4us

//4us

if(DQ)value|=0x80;

return(value);

/***********读出温度函数**********/

read_temp()

ow_reset();

//总线复位

write_byte(0xCC);

//发SkipROM命令

write_byte(0xBE);

//发读命令

temp_data[0]=read_byte();

//温度低8位

temp_data[1]=read_byte();

//温度高8位

//SkipROM

write_byte(0x44);

//发转换命令

/***********温度数据处理函数**********/

work_temp()

ucharn=0;

if(temp_data[1]>

127)

if(temp_data[0]!

=0x00)

{temp_data[1]=(255-temp_data[1]);

temp_data[0]=(256-temp_data[0]);

n=1;

}//负温度求补码

else

{temp_data[1]=(256-temp_data[1]);

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

当前位置:首页 > 高中教育 > 小学教育

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

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