单片机课设.docx

上传人:b****6 文档编号:7078676 上传时间:2023-01-17 格式:DOCX 页数:19 大小:1.73MB
下载 相关 举报
单片机课设.docx_第1页
第1页 / 共19页
单片机课设.docx_第2页
第2页 / 共19页
单片机课设.docx_第3页
第3页 / 共19页
单片机课设.docx_第4页
第4页 / 共19页
单片机课设.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课设.docx

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

单片机课设.docx

单片机课设

目录

1设计原理与方法1

1.1单片机概述1

1.2单片机引脚说明2

1.3设计原理3

2系统硬件设计4

3程序框图4

3.1主程序5

3.2定时器中断子程序5

4资源分配表6

5源程序6

6调试和性能分析10

6.1仿真调试10

6.2实物调试12

6.3性能分析14

7心得体会15

8参考文献16

本科生课程设计成绩评定表17

1设计原理与方法

1.1单片机概述

单片机是在一块芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称MCU。

51系列单片机内包含下列几部件:

(1)一个8位CPU;

(2)一个片内振荡器及时钟电路;

(3)4KBROM程序存储器;

(4)128BRAM数据存储器;

(5)可寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;

(6)32条可编程的I/O线(4个8位并行I/O端口);

(7)两个16位的定时/计数器;

(8)一个可编程的全双工串行口;

(9)5个中断源、两个优先级嵌套中断结构。

51系列单片机内部结构如图1-1所示。

图1-151系列单片机内部结构框图

1.2单片机引脚说明

可总线扩展的单片机有44个引脚的方形封装和40个引脚的双列直插式封装形式,最常用的40个引脚封装,如图1-2所示,各个引脚的功能说明如下。

图1-251单片机引脚

Vss:

接地端。

Vcc:

电源端,接+5V。

XTAL1,XTAL2:

接外部晶体或外部时钟信号。

RST/VPD:

①复位信号输入。

②接备用电源。

掉电后,在低功耗条件下保持内部RAM中的数据。

ALE/PROG:

①ALE地址锁存允许。

ALE输出脉冲的频率为振荡频率的1/6。

②PROG对8751单片机片内EPROM编程时,编程脉冲由该引脚引入。

PSEN:

程序存储器允许。

输出读外部程序存储器的选通信号。

EA/VPP:

①EA=0,单片机只访问外部程序存储器。

EA=1,单片机访问内部程序存储器。

②在8751单片机片内EPROM编程期间,此引脚引入21V编程电源VPP。

P0.0~P0.7:

P0口,数据/低八位地址复用总线端口。

P1.0~P1.7:

P1口,静态通用端口。

P2.0~P2.7:

P2口,高八位地址总线端口。

P3.0~P3.7:

P3口,双功能静态端口。

1.3设计原理

本设计的主要目的是实现两路正交的方波信号(两路信号相差90o),主要包括四个模块:

按键模块、单片机模块、数码管显示模块、波形显示模块,构成的原理框图如图1-3所示。

 

图1-3设计原理框图

本次设计中按键模块是用来改变方波的输出频率,采用的是按键查询方式而不是外部中断请求;数码管显示模块是用来显示方波的输出频率;波形显示模块是用示波器观察波形的相位差以及频率变化。

要实现两路方波信号的相位差为90o以及输出频率的变化,主要依靠单片机模块。

单片机模块中使用到了定时/计数器0和定时/计数器1,均工作于方式1,计数寄存器的位数是16位,由THx和TLx寄存器提供8位计数初值,当计满了预设的个数,THx和TLx回零,置位定时/计数器溢出中断标志TFx产生溢出中断。

当单片机接收到外部中断请求信号后,处理中断请求,输出信号取反,重新装入初值,开始定时,如此循环,产生方波信号。

要实现方波信号频率变化则当查询到按键按下后,改变两个定时/计数器的计数初值即改变定时时间,以此实现频率的变化。

要实现两路方波信号正交即相位相差90o就要求在该频率的方波第一次定时时,第二路方波相对与第一路方波延时1/4周期,即第一次装入初值是第一路方波的一半,其后定时中断产生后装入相同初值即可实现两路信号正交。

定时/计数器工作于方式1时的初值C计算公式为:

C=65536-(t/MC),其中t为预定时时间,MC为单片机的机器周期。

2系统硬件设计

系统硬件设计中通过单片机89C51的P2口的P2.0和P2.1两个引脚输出两路方波信号,与示波器相连接,观察波形。

通过P3口的P3.2和P3.3两个引脚接两个按键分别控制方波频率的增大和减小。

数码管显示模块选用的是共阴极数码管,采用的是动态显示,在电路中采用74HC573来驱动四个数码管,段码显示是由单片机的P0口进行输出,位选是由P1.0~P1.3进行输出。

采用的是12M的晶振,即机器周期为1µs。

系统硬件原理图如图2-1所示。

图2-1系统硬件原理图

3程序框图

本次软件设计主要包括主程序、延时子程序、系统初始化程序、数码管显示模块子程序、键盘扫描模块子程序、定时器中断子程序。

3.1主程序

主程序包括系统初始化和一个死循环系统,循环系统内包括显示模块和键盘扫描模块。

当有中断请求信号产生时,跳出循环,执行中断程序。

主程序流程图如图3-1所示。

 

 

 

 

图3-1主程序流程图

3.2定时器中断子程序

定时计数器中断子程序有定时器0与定时器1中断,两个中断的入口地址有所差别,但操作基本相同:

首先对输出信号取反,定时器初值重新装入,定时开始。

定时器中断的流程框图如下图3-2所示。

 

图3-2定时器中断子程序流程图

4资源分配表

以下是本设计中单片机89C51的系统资源分配:

P3.2:

调整频率增大的按键

P3.3:

调整频率减小的按键

P2.0:

第一路方波输出端(定时/计数器0控制)

P2.1:

第二路方波输出端(定时/计数器1控制)

P0口:

数码管显示的段选输出

P1.0~P1.4:

数码管显示的位选输出

P2.6:

数码管段选锁存器控制端

P2.7:

数码管位选锁存器控制端

定时/计数器0:

控制P2.0口方波输出

定时/计数器1:

控制P2.1口方波输出

XTAL1和XTAL2接外部晶振,频率为12MHZ

5源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

floatfosc=12000000;//系统时钟系统

sbitkey1=P3^2;

sbitkey2=P3^3;

sbitoutput1=P2^0;

sbitoutput2=P2^1;

sbitu1=P2^6;

sbitu2=P2^7;

uintfreq,a;

ucharTIMERL,TIMERH;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

/********

延时子程序

********/

voiddelay(ucharn)

{uchari;

while(n--)

{for(i=255;i>0;i--);

}

}

/*********

显示模块子程序

*********/

voiddisplay(uintufreq)

{ucharge,shi,bai,qian;

qian=ufreq/1000;

ufreq=ufreq%1000;

bai=ufreq/100;

ufreq=ufreq%100;

shi=ufreq/10;

ge=ufreq%10;

P1=0xfe;

u2=1;

u2=0;

P0=table[qian];

u1=1;

u1=0;

delay

(1);

P1=0xfd;

u2=1;

u2=0;

P0=table[bai];

u1=1;

u1=0;

delay

(1);

P1=0xfb;

u2=1;

u2=0;

P0=table[shi];

u1=1;

u1=0;

delay

(1);

P1=0xf7;

u2=1;

u2=0;

P0=table[ge];

u1=1;

u1=0;

delay

(1);

}

/*********

系统初始化

***********/

voidinit()

{P3=0x0f;

freq=50;

a=10;

TIMERL=0xf0;

TIMERH=0xd8;

output1=1;

output2=0;

TH0=0xd8;

TL0=0xf0;

TH1=0xec;

TL1=0x78;

TMOD=0x11;

ET0=1;

ET1=1;

EA=1;

TR0=1;

TR1=1;

}

/***********

键盘扫描模块

************/

voidchuzhi(floatafreq)

{floatTF0,TF1;

TF0=(65536-fosc/(24.0*afreq));

TIMERH=(uint)TF0/256;

TIMERL=(uint)TF0%256;

TR0=0;

TR1=0;

TH0=TIMERH;

TL0=TIMERL;

TF1=(65536-fosc/(48.0*afreq));

TH1=(uint)TF1/256;

TL1=(uint)TF1%256;

output1=1;

output2=0;

TR0=1;

TR1=1;

}

voidkeyscan()

{if(key1==0)

{delay(10);

if(key1==0)

{while(!

key1);

freq+=a;

chuzhi(freq);

}}

if(key2==0)

{delay(10);

if(key2==0)

{while(!

key2);

freq-=a;

chuzhi(freq);}

}

}

/**********

主函数

***********/

voidmain()

{init();

while

(1)

{display(freq);

keyscan();

}

}

/************

定时器中断子程序

*************/

voidT0_timer()interrupt1

{output1=!

output1;

TL0=TIMERL;

TH0=TIMERH;

}

voidT1_timer()interrupt3

{output2=!

output2;

TL1=TIMERL;

TH1=TIMERH;

}

6调试和性能分析

在本次课程设计中,使用Proteus软件进行仿真调试。

调试的内容主要为软硬件的协同,观察波形输出结果是否能够与设计方案所设计的那样达到要求。

6.1仿真调试

调试结果如下:

1)在Proteus软件中运行仿真,示波器窗口中出现正交的两路方波信号,数码管显示波形信号的频率,显然波形频率为50Hz,符合程序初始化的结果,50Hz时仿真结果如图6-1所示。

图6-1仿真结果初始状态(50Hz)

2)按下S1键调节方波频率,使方波频率不断增加,仿真结果如图6-2所示。

图6-2仿真结果频率增加(4050Hz)

3)按下S2键调节方波频率,使方波频率不断减小,仿真结果如图6-3所示。

图6-3仿真结果频率减小(20Hz)

6.2实物调试

实物图如下6-4所示。

将HEX文件加载后,用示波器观察单片机的P2.0和P2.4口,得到输出结果。

1)系统运行的初始状态如图6-5所示,与仿真结果一致。

图6-4实物图

图6-5实物结果初始状态(50Hz)

2)按下S1键调节方波频率,可见方波频率增加,结果如图6-6及6-7所示,由图可以看出在实物的调试中,当频率增加到5KHz时,输出方波开始出现一定程度的失真。

图6-6实物结果频率增加(1050Hz)

图6-7实物结果频率增加(5550Hz)

3)按下S2键调节方波频率,可见方波频率减小,结果如图6-8所示。

图6-8实物结果频率减小(20Hz)

6.3性能分析

在本次设计中,两路输出方波正交且频率可调。

频率调节的精度和初始值可通过程序中的两个值即可进行调节。

理论上方波的最高频率可以达到500KHz,但由于运行程序所需时间及各种因素,在实际的过程中,软件仿真可以取得较为理想的输出波形,实物调试中当波形频率达到5KHz的时候,即出现一定程度的失真。

总体看来,设计的结果达到了课程设计的要求,在一定范围内,输出波形稳定,调节也比较简单。

7心得体会

通过为期一个星期的认真学习和实际操作,我终于完成了本次单片机原理与应用的课程设计。

在本次课程设计的过程中,我学到了很多,充分理解单片机应用的基本原理。

在实际仿真过程中,也遇到了很多困难,但都在自己的自我学习和同学的帮助下得到很好的解决,通过对电路的仿真使理论知识更加直观生动的展现了出来,加深了我的理解。

本次课程设计中,我首先学习怎样使用Proteus和Keil软件。

以前的课设我已经接触过Proteus软件,但为了充分了解了Proteus和Keil软件的结构组成以及主要功能,我从图书馆借了相关书籍和在网上了很多相关资料。

然后通过电脑运行Proteus软件进行了一些简单的仿真。

我又学习了一些单片机编程的知识,并通过使用Keil软件进行了编程训练。

通过实际的操作Proteus和Keil软件,我真切的体会到理论与实际的差距,虽然之前做了充分的准备,但到实际操作的时候还是遇到很多的问题,通过查找资料和与同学讨论顺利了解决了操作问题。

基本掌握了使用Proteus和Keil软件进行仿真,我开始完成本次课设中我的任务。

首先根据单片机的理论知识设计好电路图,然后进行理论分析,使自己的电路图具有可行性。

然后对电路图进行仿真,最后通过不停地修改终于实现了所要达到的要求。

课设的最后一部分就是写实验报告了,有很多人都认为既然是课程设计最重要的就是操作了,实际上实验报告也是非常重要的,通过实验报告我们可以对本次课设进行总结,对自己的出现问题进行详细的分析和解决方法,以免自己在以后再犯类似的错误。

这才是最重要的,这样自己才能进步,才能有所收获。

课程设计实验报告的严格要求让我们以后在写论文或者报告时候更加的规范,对我们以后有很大的益处。

总体上来说,完成本次单片机课设的过程中遇到很多困难,但通过本次课设自己也收获颇丰。

而且通过本次课设让我更深的了解了单片机这门课,使我产生了浓厚的兴趣,从中我找到了乐趣,获得了成就感。

8参考文献

[1]李群芳,张士军.单片机微型计算机与接口技术.北京:

电子工业出版社,2008

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

电子工业出版社,2009

[3]姚燕南,薛钧义.微型计算机原理与接口技术.北京:

高等教育出版社,2004

[4]汪道辉.单片机系统设计与实践.北京:

电子工业出版社,2006

[5]楼然苗.51系列单片机设计实例.北京:

北京航空航天出版社,2003

 

本科生课程设计成绩评定表

姓名

性别

专业、班级

课程设计题目:

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

 

成绩评定依据:

 

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

 

指导教师签字:

年月日

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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