99秒马表课程的设计说明书.docx
《99秒马表课程的设计说明书.docx》由会员分享,可在线阅读,更多相关《99秒马表课程的设计说明书.docx(22页珍藏版)》请在冰豆网上搜索。
99秒马表课程的设计说明书
信息与电气工程学院
课程设计说明书
(2013/2014学年第二学期)
课程名称:
单片机应用课程设计
题目:
99秒马表
专业班级:
电气工程及其自动化0000班
目录
一、课程设计目的2
1.1概述2
1.2设计要求2
二、课程设计正文2
2.1整体设计2
2.2器件清单3
2.3主要器件说明4
2.3.1STC90C52AD的功能参数介绍4
2.3.2译码单元6
2.3.3共阴极数码管7
2.4单元电路设计8
2.4.1时钟模块8
2.4.2复位电路模块8
2.4.3控制模块8
2.4.4显示模块9
2.5系统调试9
2.4系统分析10
2.5系统设计10
2.5.1程序流程图10
2.5.2T0中断服务程序框图11
2.6系统实施11
三、总结:
12
四、参考文献13
附录一:
C语言设计程序代码:
14
附录二:
设计原理图及PCB图16
附录三、课程设计评语及成绩18
99秒马表单片机设计
一、课程设计目的
1.1.概述
单片机原理及应用课程设计是学生综合运用所学知识,全面掌握单片微型计算机及其接口的工作原理、编程和使用方法的重要实践环节。
通过独立或协作提出并论证设计方案,进行软、硬件调试,最后获得正确的运行结果,可以加深和巩固对理论教学和实验教学内容的掌握,进一步建立计算机应用系统整体概念,初步掌握单片机软、硬件开发方法,为以后进行实际单片机软、硬件应用开发奠定良好的基础。
课程设计的主要内容:
根据单片机原理及应用课程的要求,主要进行两个方面的设计,即单片机最小系统和接口技术应用设计。
其中,单片机最小系统主要要求学生熟悉单片机的内部结构和引脚功能、引脚的使用、复位电路、时钟电路、4个并行接口和一个串行接口的实际应用,从而可构成最小应用系统,并编程进行简单使用。
接口技术应用设计主要要求学生能综合运用单片机、存储器、常用接口芯片构成单片机应用系统,有针对性地进行软、硬件设计与开发。
1.2.设计要求
设计并制作出一个以单片机为核心的计时控制系统:
①设计方案;②设计键盘输入电路;③设计显示电路;④合理分配地址,编写系统程序;⑤用Protel设计硬件电路原理图和PCB图;⑥软硬件联机调试
(1)开始时,显示“00”,第1次按下按键后开始计时。
(2)第2次按下按键后,计时停止。
(3)第3次按下按键后,计时归零。
(4)程序循环。
二、课程设计正文
2.1整体设计
采用单片机的TO定时器,使其工作在方式1,产生一个100ms定时中断,循环10次,到1s时,秒加1;到99秒时清零,循环显示。
显示数码管只需两个两个,I/O口足够用,但为了更好的学习和以后工作时单片机的使用,本次课程设计数码管用CD4511译码器译码,属于动态显示。
(1)在“单片机系统”区域中,把单片机的P0.0-P0.3端口分别连接到一个CD4511的a-d端口上;要求:
P0.0对应着A(7),P0.1对应着B
(1),P0.2对应着C
(2),P0.3对应着D(3)。
(2)在“单片机系统”区域中,把单片机的P2.0-P2.1端口连接到数码管的2位位选线上,在某一时刻,只让某一位的位选线处于选通状态,其他各位的位选线处于关闭状态,同时,段码线上输出相应位要显示的字符段码。
如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。
(3)按键设计:
单片机的P1.7管脚通过按键开关接地,不按下开关时P1.7口保持高电平。
总体设计思路图
2.2器件清单
万能板器件:
电阻:
1K(9个)360(7个)4.7K(2个)
按键开关:
1个
CD4511:
(1个)三极管(NPN型)9014:
2个
共阴极数码管:
(2个)
万能电路板:
1个
导线若干
课程设计配发的小电路板(ISP-MCUBasiccircuit)电路板器件:
标识符
器件名称
规格型号
数量
标识符
器件名称
规格型号
数量
U1
单片机
STC90C52AD
1
C11C12
瓷片电容
22p或30p
2
U2
RS232驱动
MAX232
1
C13-C17
独石电容
0.22uF(224)
5
J1-J4,CRY
LstsHsts
接线插孔座
排母
86针
C1C2
电解电容
1.0uF/50V
2
C3C4C0
电解电容
10uF/50V
3
CRY
晶体谐振器
6MHz
1
C5-C8
电解电容
47uF(22uF)
4
High,Low,PS
发光二极管
φ3
3
JPS
接线端子
电源用
1
R1
金属膜电阻
200Ω
1
RST
按钮
小(0.2×0.3)
1
R0
金属膜电阻
6.8K
1
JDB
DB9插座
DB9针形座
1
R2R3R4
金属膜电阻
3.3K
3
U1
DIP插座
DIP40
1
R9
金属膜电阻
1M
1
U2
DIP插座
DIP16
1
2.3主要器件说明
2.3.1STC90C52AD的功能参数介绍
STC90C52AD是由宏晶公司生产的高性能八位单片机。
如图一所示。
该芯片采用FLASH存储技术,内部具有8KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机。
STC90C52AD可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。
只要程序长度小于8K,四个I/O口全部提供给用户。
可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,STC90C52AD
适合许多嵌入式控制领域。
工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。
STC90C52AD芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。
STC90C52AD单片机为40引脚芯片如图一所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。
P0口可作为通用I/O口,但须外接上拉电阻,所以在设计显示数码管我们避免了使用P0口这样大大简化了动态显示电路。
P1口:
8位、双向I/0口,内部含有上拉电阻。
P1口可作普通I/O口。
输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。
P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。
在FLASH并行编程和校验时,P1口可输入低字节地址。
在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。
P2口:
具有内部上拉电阻的8位双向I/O口。
P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。
若负载为低电平,则通过内部上拉电阻向外部输出电流。
在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:
具有内部上拉电阻的8位双向口。
P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。
若外部的负载是低电平,则通过内部上拉电阻向输出电流。
在本设计中,P3口作为时间设置的4按键输入,因为有上拉电阻,所以可以通过按键直接接地,简化了电路。
在与FLASH并行编程和校验时,P3口可输入某些控制信号。
P3口除了通用I/O口功能外,还有替代功能如表1所示。
表1P3口的第二功能
端口引脚
各个功能
P3.0
RXD(串行口输入端)
P3.1
TXD(串行口输出端)
P3.2
INT0(外部中断0请求输入端,低电平有效)
P3.3
INT1(外部中断1请求输入端,低电平有效)
P3.4
T0(定时/计数器0计数脉冲输入端)
P3.5
T1(定时/计数器1计数脉冲输入端)
P3.6
WR(外部数据存储器写选通信号输出端,低电平有效)
P3.7
RD(外部数据存储器读选通信号输出端,低电平有效)
单片机使用宏晶公司支持串口下载程序(ISP)的单片机,为STC90C52AD课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。
该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。
课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。
课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。
2.3.2译码单元
其功能介绍如下:
BI:
4脚是消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。
LT:
3脚是测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入DCBA状态如何,七段均发亮,显示“8”。
它主要用来检测数码管是否损坏。
LE:
锁定控制端,当LE=0时,允许译码输出。
LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。
A1、A2、A3、A4、为8421BCD码输入端。
a、b、c、d、e、f、g:
为译码输出端,输出为高电平1有效。
2.3.3共阴极数码管
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
这次课程设计,由于所用数码管较少,I/O口完全够用,所以采用静态显示。
2.4单元电路设计
本设计主要分为时钟电路模块,复位电路模块,显示模块和控制模块。
设计方案如下
2.4.1时钟模块
如上图所示89C51单片机的时钟信号通常用内部振荡方法得到,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方法。
由于单片机内部有一个高增益反相放大器,当外接晶振后就构成了自激振荡器并产生振荡时钟脉冲。
晶振通常选择6MHz、12MHz、24MHz。
本设计采用12MHz晶振。
图中电容C1、C2起到稳固振荡频率、快速起振的作用。
电容值一般为5—30pF。
本设计选用30pF电容。
2.4.2复位电路模块
复位操作完成电路的初始化,使单片机从一种确定的状态开始运行。
由上图可知,控制模块实际上就是单片机的最小系统。
本设计采用常用的上电且开关复位电路。
上电后,由于电容的充电,使RST持续一段高电平时间。
当单片机已在运行中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
此处C3电容取10uF,R2=K。
2.4.3控制模块
2.4.4显示模块
显示部分电路设计如上图:
为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms。
2.5系统调试
硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。
若亮度不理想,可以调整P1口的电阻大小,一般情况下取200Ω电阻即可获得满意的亮度效果。
实验室制作时,可结合示波器测试晶振及P1,P2端口的波形情况进行综合硬件测试分析。
硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试:
是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试:
是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用CPU芯片调试。
2.4系统分析
通过软件编程,将相应的端口赋成变量的形式。
分别通过调用中断子程序,动态显示子程序,时间调整子程序,整点报时子程序等来控制各端口的输出,以达到理想的效果。
2.5系统设计
2.5.1程序流程图
2.5.2T0中断服务程序框图
2.6系统实施
软件调试是通过对程序的编译、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
软件编程是在keil软件环境下编程的。
调试过程中使用了仿真软件Proteus在计算机上先进行仿真实验,验证了软硬件的可行性。
(附仿真图)
三、总结:
这次单片机课程设计我们历时两个星期,在我们班里算是倒数几组完成的吧,但经过这两个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。
现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
没想到这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结!
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如PCB制图、C语言等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名电气专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
四、参考文献
[1]张毅刚.单片机原理及应用.高等教育出版社,2003
[2]权明富,齐佳音,舒华英.客户价值评价指标体系设计[J].南开管理评,2004,7(3):
17-18.
[3]苏家键等.单片机原理及应用技术.北京:
高等教育出版社,2004
[4]钟睿.MCS-51 单片机原理及应用开发技术.北京:
中国铁道出版社,2006
[5]蓝清华等.单片机应用教程.北京:
清华大学出版社,1999
附录一:
C语言设计程序代码:
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharshi,ge,aa,keycount,temp;
sbitanjian=P1^7;
sbitxuan1=P2^0;
sbitxuan2=P2^1;
ucharcodetable[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
voiddisplay(shi,ge);
voidkey();
voidinit();
voiddelay(uintz);
/*-----主程序-----*/
voidmain()
{
init();//初始化
while
(1)
{
key();
if(keycount==1)
TR0=1;//开中断
if(keycount==2)
TR0=0;
if(keycount==3)
{
temp=0;
keycount=0;
}
if(aa==10)
{
aa=0;
temp++;
if(temp==99)
{
temp=0;
}
}
display(shi,ge);
}
}
/*------初始化程序-------*/
voidinit()
{
keycount=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
}
/*-----定时器中断-----*/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
/*-----显示子程序-----*/
voiddisplay(shi,ge)
{
shi=temp/10;
ge=temp%10;
P0=table[shi];xuan1=1;delay(70);
P0=table[ge];xuan2=1;delay(70);
}
/*-----按键检测子程序-----*/
voidkey()
{
if(anjian==0)
{
delay(5);//消抖
if(anjian==0)
keycount++;
}
while(!
anjian)
display(shi,ge);//等待按键弹起
}
/*-----延时子程序-----*/
voiddelay(uintz)//延时约1ms
{
uintx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
附录二:
设计原理图及PCB图
附录三、课程设计评语及成绩
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日