1 引言
电子打铃课题设计着重于实践和动手能力的培养,通过阅读并学习本论文可以大概了解单片机的发展及其工作方法,了解汇编语言,掌握一定的MCS—51单片机知以及用指令编程方法和技巧。能用MCS—51单片机指令编制出一些实用的小程序。
另一方面通过本论文可以了解电子打铃打铃器的时钟走时、显示、定时器等的工作方式以及时钟控制打铃编程方法。时钟走时是利用定时器计数进行的,显示由键盘显示接口电路与五个数码显示组成,利用可实现对键盘、显示器的自动扫描并且可以减轻对CPU的负担,具有显示稳定、程序简单、不会出现误动作的特点。
时钟控制就是利用键盘输入一个时设定的时间值,再经过程序中的比较判断程序来控制时钟走。
的性价比。
2.2 机型选择
机型选择的出发点及依据,可根据市场情况,选择成熟、稳定、货源充足的机型产品。同时还应根据应用系统的要求考虑所选的单片机应具有很高的性价比。
另一方面为提高经济效率,缩短研制周期,最好选用最熟悉的机种和器件。采用性能优良的单片机开发工具也很能加快系统的研制过程。
2.3 器件选择
应用系统除单片机以外,系统通常还有传感器、模拟电路、输入输出设备。这些部件的选择应符合系统的精度、速度和可靠性等方面的要求。
2.4 软、硬件功能的划分
系统的软件与硬件的设计是紧密联系在一起的,在某场合硬件和软件具有一定的互换性。为了降低成本、简化硬件结构,某些功能可由软件来完成。若为了提高工作速度、精度、减少软件的工作量、提高可靠性,也可以采用硬件来完成。总之,硬件、软件两者是相辅相成的,可根据实际应用情况来合理选择。
3 模块电路设计与比较
1
毕 业 论 文
3.1 时钟方案选择
方案一:因为题目中只要求显示小时和分钟,因此可以用门电路组合构成时钟发生器,但此方案硬件复杂,稳定性低,且不易控制。
方案二:采用时钟芯片。该芯片可以进行时分秒的计数,可编程接口,还具有报警功能和掉电保存功能,并且可以对其方便的进行程序控制,完全能满足题目的要求。
3.2 显示模块的选择
方案一:采用数码管显示。数码管亮度高、体积小、重量轻,但其显示信息简单、有限,在本题目中应用很大。
方案二:采用液晶显示。液晶显示功耗低,轻便防震。由于本题显示信息比较简单,采用液晶显示界面不清晰,操作不方便。
3.3 其他设计的考虑
闹铃响采用带音乐芯片的扬声器,为实现题目中接触止闹功能,我们可以采用触发开关控制闹铃的启动。通过单片机的中断定时控制闹铃停止。
4 系统模块设计及电路图
4.1 键盘接口电路设计
我们采用 2 × 8 的键盘,原理图如图所示。
4.2电源电路设计
2
毕 业 论 文
4.3 显示模块
4.4 数码管驱动模块
5 测试方法及结果
5.1 测试方法 采用先分别调试各单元模块,调通后再进行整机调试的方法,
以提高调试效率。
( 1) 时钟测试 在带有单片机的电路板上编程调试,使其在液晶上显示出时分秒,并可以通过键盘控制设定时间和闹铃开关的时间。利用仿真机调试成功后通过编程器将程序写入芯片中调试,调试结果显示,该模块可以显示时分秒,可以正常工作。
( 2) 闹钟测试 通过键盘控制设定闹钟开关和闹钟响的时间,并通过单片机程序驱动音乐电路发声。经过调试,闹钟功能正常,满足题目的基本要求。
3
毕 业 论 文
5.2 测试结果
5.2.1 基本要求
上电复位后,由显示信息可知达到数字显示时间、闹钟开、关状态、闹钟灯熄灭的显示要求,
可进行时间设定,在新的时间点上运行,实现时间设置功能;可进行闹钟时间设定,在新的时间点到达时,发出声报警,实现闹钟设置功能;时间到达闹钟设置值时,系统发出声报警,实现闹钟控制。 5.2.2 自行发挥部分 多闹钟设置
系统可以设置多个闹钟时间,目前以1个为例设计了系统,可实现多点启闹及 显示日历、星期
6 电子打铃的研制过程
电子打铃的研制过程实际上是一个应用系统的研制过程。所谓应用系统,就是利用单片机为某应用目的而设计的单片机专用系统(在调试过程中通常称为目标系统)。
电子打铃和一般的计算机应用系统一样,也是由硬件和软件组成。硬件指单片机、扩展的存储器、输入输出设备、控制设备、执行部件等组成的系统。软件是各种各种应用程序的总称。硬件和软件只有紧密结合,协调一致,才能组成高性能的应用系统。在系统的研制过程中,软硬件的功能总是在不断地调整,以便相互适应,相互配合,以达到最佳的性价比。
电子音时钟的研制过程主要包括总体设计、硬件设计、软件设计、在线仿真调试、程序固化等几个阶段。
6.1 硬件设计
硬件设计的主要任务是根据总体设计要求,以及在所选的机型上的基础上,确定系统扩展所用到的外围电路等,然后设计出系统电路原理图。
对于电路芯片的选择原则应根据系统对它的速度、精度、价格的要求而确定。除此之外,还应考虑和系统中的传感器、放大器相匹配问题。
1.地址译码电路的设计:MCS-51系统有充足的存储空间,包括64KB程序存储器和64KB的数据存储器,在应用系统中一般不需要这么大的容量。为了简化
4
毕 业 论 文
硬件线路,同时还要使用到的存储器空间地址连续,通常采用译码器、线选法相结合的办法。
2.线驱动器的设计:MCS-51系统单片机扩展功能比较强,但扩展总线负载能力有限。若所扩展的电路负载超过总线负载能力时,系统便不能可靠地工作。此情况下必须在部线上加驱动器。
3. 其它电路的设计:由于单片机具有很多的特点,它被大量地应用于工业测控系统中,而在这些系统中,经常要对一些现场物理量进行测量或者将其采集下来进行信号处理之后,再反过来去控制被测对象或相关设备。在这种情况下,应用系统的硬件设计就应该包括与此有关的外围电路。例如,键盘、显示器、开关、输入输出设备、采样、放大、应用系统各部分的驱动能力等外围电路,要进行全盘合理的设计。
4.可靠性设计:课题设计的可靠性是一项最重要最基本的技术指标,这是硬件设计时必须考虑的一个指标。
可靠性是指在规定的条件规定的时间内完成规定功能的能力。规定的条件包括环境条件(如温度、湿度、振动等)、供电条件等。规定的时间一般指平均故障时间,平均无故障时间、连续正常运行时间等。规定的功能随单片机的应用系统不同而不同。单片机应用系统在实际工件中,可能会受到各种外部和内部的干扰,使系统工作产生错误或故障,为了降低错误和故障的产生机率,常采用以下可提高可靠性的措施: (1)提高元件的可靠性;
(2)提高印刷电路板和组装的质量,设计电路板时布线及接地方法要符合要求; (3)对供电电源采用扩干扰措施; (4)输入输出通道扩干扰措施。
6.1 工艺设计,包括机箱、面板、配线、接插件等,这也是一个初次进行系统设计人员容易疏忽但又十分重要的问题。在设计时要充分考虑到安装、调试、维修的方便。
6.2 软件设计
在电子打铃的研制中,软件设计是工作量最大而也是最重要的一环,其设计的一般方法和步骤如下。 6.2.1 系统定义
5
毕 业 论 文
系统定义是指在软件设计前,首先要进一步明确设计软件所要完成的任务,然后结合硬件结构,而确定软件承担的任务细节。其软件定义内容有: (1)确定各输入/输出的功能,信号的类别,电平范围,与系统接口方式,占用口地址,读取的输入方式等。
(2)定义分配存储器空间,包括系统主程序,常数表格,功能子程序块的划分,入口地址等。
(3)若有断电保护措施,应定义数据暂存区标志单元等。
(4)面板开关,按键等控制输入量的定义与软件编制密切有关,系统运行过程的显示,运算结果的显示,正常运行和出错显示等也是由软件完成的。所以事先要给予以定义。 6.2.2 设计细节
(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。根据它们之间的联系和时间上的关系,设计出合理的软件总体结构,使其清晰、简捷、流程合理。
(2)培养结构化程序设计风格,各功能程序实行模块化、子程序化。既便于调试、链接,又便于移植、修改。
(3)建立正确的数学模型。即根据功能要求,描述出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。
(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,多花一份时间来设计程序流程图,就可以节约几倍源程序编辑调试时间。
(5)注意在程序的有关位置处写上功能注释,提高程序的可读性。 (6)加强软件抗干扰设计,它是提高计算机应用系统可靠性的有力措施。
6.3 软件结构设计
合理的软件结构是设计出一个性能优良的单片机应用于系统软件的基础,必须充分重视。依据系统的定义,把整个工作分解为若干相对独立的操作,再考虑各操作之间的相互联系及时间关系而设计出一个合理的软件结构。
对于简单的课题设计,可采用顺序结构设计方法,其系统软件由主程序和若
6
毕 业 论 文
干个中断服务程序构成。明确主次序和中断服务程序完成的操作及指定各中断的优先级。
对于复杂的课题设计,可采用实时多任务操作系统,此操作系统应具备任务调度,实时控制,实时时钟,输入输出和中断控制,系统调用,多个任务并行运行等功能。以提高系统的实时性和并行性。
在程序设计方法上,模块程序设计是单片机应用中常用的程序设计方法。这种模块化程序便于设计和调试,容易完成可供多个程序共享的优点,但各个模块之间的连接有一定的难度。根据需要也可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制个从属的程序和子程序。这种方法比较符合人伞兵日常思维。缺点是上一级的程序错误会对整个程序产生影响。
软件结构设计和程序设计方法确定后,根据系统功能定义,可先画出程序粗框图,再对粗框图进行扩充和具体化,即对存储器,寄存器,标志位等工作单元作具体的分配和说明。再绘制出详细 的流程图(细框图)。
程序流程图设计出以后,便可着手编写程序,单片机应用程序一般采用汇编语言较好,编写完成后可以手工或通过主处理器连机用开发系统上的交叉汇编程序汇编成目标码程序,再经过调试正常运行后,固化到EPROM中去,完成了整个应用系统的设计。
6.4 程序设计的基本方法
当给定一个题目,进行程序设计时,一般应按以下几个步骤进行:分析题目,确定算法,程序结构的设计,编写源程序,汇编和调试。 6.4.1 分析题目
分析题目就是明确题目的任务,弄清所给顶的原始数据和应得到的结果,以及运算精度和速度的要求等。分析题目是整个程序设计的重点。若任务比较简单,其原始数据和目的要求等比较清楚,就容易确定设计方法。而对于比较复杂的课题,必须作全面深入的分析,才能为以后的工作打下基础。 6.4.2 确定方法
确定方法就是选择解决问题的方法。例如,对于单纯的数值计算问题,汇编语言指令本身只能进行加、减、乘、除….等基本运算,但是实际问题可能是计算某个函数之后才解方程。在这种情况下,确定算法就是设法用基本运算方法来解决其它的复杂问题。往往算法不是唯一的。不同的方法在占用存储单元数,计算精
7
毕 业 论 文
度,编程工作量等方面是有差别的,这就需要进行比较和选择。 6.4.3 程序结构的设计
程序结构的设计是算法转化为程序的准备阶段。如果算法比较简单,这一不可以省掉,直接按算法编写程序。如果比较复杂,同需要进行程序结构的设计。程序结构的设计一般采用流程图法。流程图是有规定的图形符号配合文字说明来表示算法或处理总是的步骤。客观存在具有直观.易懂的特点,是程序结构设计的有力工具。
6.4.4 流程图的绘制
有一个由粗到细的过程,需要反复修改,求得完善。程序的基本结构是有顺序结构,分支结构和子程序结构等四类。当程序较大时,应根据功能将整个程序分类若干模块。 6.4.5 编写源程序
程序结构设计完成之后,下一步是编写程序。在编程之前要规划好寄存器和存储器的使用。对于程序区,表格,数据缓冲区,档志单元等作好系统安排。编程根据程序流程图来进行,所编写的源程序要力求简单明了,层次清晰,运行时间短,占用存储空间小。 6.4.6 汇编和调试
对于编好的程序,要进行汇编和调试。汇编是将源程序变为可执行的目的程序。在汇编过程中,可能发现源程序的某些错误,需作修改。汇编完成后还要通过调试来检查所 编程序是否正常运行。调试方法一般是输入给定的数据,使程序运行,检查程序运行结果是否正确。调试工作可以先部分(或模块)而后总体。在调试过程中一般总会发生不正常情况,而要反复修改程序,直到获得正确的结果为止。
7 电子打铃的调试
电子打铃设计完成后,依据硬件的设计试制和组装样机及软件设计完成后,便进入系统的调试阶段。调试电子打铃的一般方法如下。
7.1 硬件调试方法
电子打铃的硬件和软件调试是分不开的,许多硬件故障是在软件设计时才发现的。但通常是应先排除系统中明显的硬件故障后才和软件结合起来调试。 7.1.1 常见的硬件故障
8
毕 业 论 文
(1)常见的错误:样机硬件的逻辑错误是由于设计错误或加工过程中的工艺性错误所造成的。这类错误包括错线.开路.短路.相位错等。
(2)器件失效:有两方面的原因,一是器件本身已损坏或性能不符合要求;二是由于组装错误造成元器件失效,如电解电容.二极管的极性错误,集成块安装方向错误等。
(3)可靠性差:引起可靠性差的原因很多,如金属化孔与接插件接触不良会造成系统时好时坏,经不起振动;内部和外部的干扰.电源纹波系数大.器件负载过大等造成逻辑电平不稳定;走线和布局不合理等也会引起系统可靠差。 (4)电源故障:若样机存在电源故障,系统加电后将造成器件损坏。电源故障包括:电压值不符合设计要求电源引线和插座不对.功率不足.负载能力差等。 7.1.2 调试方法
(1)脱机调试:在样机加电之前,先用万用表等工具,根据硬件电气原理图和装配图仔细检查站样机线路的正确性,并核对元器件的型号.规格和安装是否符合要求。应特别注意电源的下走线,防止电源之间的适中和极性错误,并重点检查扩展系统总线是否存在相互间的适中或与其他信号线的短路。对于样机所用电源事先必须单独调试,调试好后,检查其电压值.负载能力.极性等均符合要求,才能加到系统的各个部件上。在不插片子的情况下,加电检查各插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上各点电位是否正常,若有高压,联机时将会损坏开发机。
(2)联机调试:通过脱机调试可排除一些明显的硬件故障。有些故障还是要通过联机调试才能发现和排除。
联机前先断电,将单片机开发系统的仿真头插到样机的单片机插座上,检查一下开发机与样机之间的电源.接地是否良好。一切正常,即可打开电源。通电后执行开发机的读写指令,对用户样机的存储器I/O端口进行读写操作逻辑检查,若有故障,可用示波器观察有关波形(如选中的译码器输出波形.主导写控制信号.地址数据波形以及有关控制电平)。通过对波形的观察分析,寻找故障原因,并进一步排除故障。可能的故障有:线路连接上有逻辑错误.有短路和断路现象.集成电路失效等。在用户系统的样机(主机部分)调试好后,可以插上用户系统的其他外围部件如.键盘.显示器输出驱动板、A/D、D/A板等。 再对这些板进行初步的调试。在调试过程中若发现用户系统工作不稳定,可能有下列情况:
9
毕 业 论 文
电源系统供电电流不足,联机时公共地线接触不良;拥护系统主板负载过大;用户的各级电源滤波不完善等。对这些问题一定要认真查处原因,加以排除。
7.2 软件调试方法
软件调试与所选用的软件结构和程序设计技术有关。如果采用模块程序设计技术,则逐个模块分别调试。调试各子程序暗无天日定要符合现场环境,即入口条件和出口条件。调试的手段可采用单步运行或段点运行方式,通过检查用户系统CPU的现场、RAM的内容和I/O口的状态,检查程序执行结果是否符合设计要求。通过检测可以发现程序中的死循环错误、机器码错误及转移地址的错误,同时也可以发现用户系统中的硬件故障、软件算法及硬件设计故障。在调试过程中不断调整用户系统的软件和硬件,逐步通过一个一个程序模块。
各模块通过以后,可以把有关的功能模块联合起来一起进行综合调试。在这个阶段若发生故障,可以考虑各子程序在运行时是破坏现场,缓冲单元是否发生冲突,标志位的建立和清除上设计上有没有失误,堆栈区有没有溢出。输入设备的状态是否正常等等。若用户系统是在开发机的监控程序下运行时,还要考虑用户缓冲单元是否和监控程序的工作单元发生冲突。
经单步和断点运行调试后,还应进行连续调试,这是因为单步运行只能验证程序的正确与否,而不能确定定时的精度、CPU的实时响应等问题。待全部调试完成后应反复运行多次,除了观察稳定性之外,还要观察用户系统的操作是否符合原始设计要求、安排的用户操作是否合理等,必要时再作适当的修正。 如果采用实时多任务操作系统,一般是逐个任务进行调试,调试方法与上相似只是实时多任务操作系统的应用程序是由若干个任务程序组成,一般是逐个进行调试,在调试某一个任务时,同时也调试相关的子程序、中断服务程序和一些操作系统的程序。调试完后,再使各任务同时运行,如果操作系统无错误,一般情况下系统就能正常运行。
软件和硬件联调完成后,反复运行正常则可将用户系统固化到EPROM中,插入用户样机后,用户系统即能脱机工作,至此系统研制完成。
10
毕 业 论 文
结 论
本系统以AT89C51为核心部件,利用软件编程,通过键盘控制和液晶显示实现了时钟功能、闹钟功能,并完成了对环境温度和市电信号频率及有效值的测量显示,能实现题目的基本要求和发挥部分。尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。由于时间有限和本身知识水平的发挥,我们认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步的改进与完善等。
此次毕业设计中,我们组做的是一个可在线调整的单片机电子打铃,从毕业设计任务下达到设计任务的完成,整个过程经历了确定设计目标、拟订设计项目、执行设计任务、完成设计任务四个步骤。在这四个步骤中,执行设计任务是最艰辛的,但同时也是我们组团队精神得到最大发挥的时候,是我们组最具有成就感的阶段。
在执行设计任务的过程中,零件的选购、实物的焊接以及到后来论文的完成都不是最难的,最难的是硬件的调试,因为理论与实践总是存在着差距,想出来的东西没有经过实践的检验是不可靠的,任何一个小小的疏忽大意都能导致失败。比如说,因为P0口与其它口的区别,要在AT89C51单片机的P0口上驱动LED的显示必须加上上拉电阻(资料书上只简单地用一句话来描述),但是我们
11
毕 业 论 文
在拟订设计项目的过程中忽略了这一点,以至在调试的过程中没有达到原定的计划,即无法驱动LED发光。在查阅了大量的资料书并对实物进行详细的检查分析后,我们组终于发现问题地所在并及时地解决了问题,之后再一次对硬件进行调试,这次终于成功了。这只是一个例子,在设计的过程中遇到的问题远远不止这一个。从这一方面来说,我认识到要做成一件事是很难的,期中必定有很多的阻碍,但是我们一定要慢慢来,一点一点地找出问题,再一点一点地解决它,这样的话,到达成功的彼岸也就仅仅是时间的问题了。我想,通过这次设计,特别是通过对硬件的制作而不单单是对原理的论述,我学到的不仅仅是电子方面的知识,更重要的是,我学到了作为一名电子设计者所必需的心理素质,那就是——决心加上耐心!
当然,在制作的过程中我也强烈地感受到团队的力量,没有团队地共同努力是不可能完成设计任务地。除此之外,没有老师的关心与帮助也是很难达到设计要求的,在此再次向三位指导老师:鲁杰爽、鲁杰爽及彭俊珍老师表示感谢!
经过本次毕业课题设计,在为不经意中我已掌握了不少关于单片机的实用知识。我深感自豪、充实、略有些成就感。同时也使我的能力进一步提高。为我毕业后能更好的适应社会工作打下一定的基础。为此,我忠心的感谢各级领导及指导老师的大力支持。
经过两个星期的单片机电子打铃的课题的设计,我从中学到了很多东西。如:如何设计硬件电路,如何编写、调试软件程序等。这使我受益非浅,感受很深。这不仅使我重温了单片机的基本结构及工作原理,接口技术,而且进一步熟悉了如何使用单片机汇编语言编写程序和调用程序的方法与技巧。能够熟练地对小键盘进行操作,对单片机常用的几种芯片也有了更深一步的了解,而且学会了如何利用计算机进行程序汇编和写入程序存储进行调试,使我对整个制作流程有了深刻的了解和体会。特别是认识到使用单片机进行软件、硬件的开发过程中应注意设计要求、经过及解决一些客观存在问题的重要性及其意义。在电子打铃课题的设计制作过程使我们对单片机的设计、开发产生了更加深厚的兴趣,但是也遇到了很多问题和挫折,然而经过自己不断的探索和请教学习后,还是将它们一一解决,并得到了很多很深刻的教训和许多宝贵经验,找出自身整个设计过程中所存在的问题,并认识到自己在以后应该怎样去克服它们。在整个设计过程中我的动手能力与解决问题的能力也进一步提高。
12
毕 业 论 文
虽本次设计中我走了不少的弯路,吃了不少的苦头。但是,我从中得到了更多。使我对单片机的开发产生了浓厚的兴趣,对我的将来充满斗志和信心。我相信,将来的社会,只要能想到的就能做。因为科技无边,智慧无限。我相信我们的能力。
由于我们设计的电子打铃课题的重点在于软件程序的设计,利用PROTEL99电路图设计应用软件进行设计硬件电路图的原理图与PCB电路板图,利用计算机进行编写程序,编译程序和编程器将程序写入到AT89C2051存储器里。在单片机上进行调试。在软件设计时,由于相对应单片机的中断系统指令系统内部和外部存储器不是很了解,所以出现了许多不必要的麻烦。就拿编程来说,由于没有处理好子程序的返回和时钟中断程序时间就导致时钟运行到指定的时间后不打转而是继续走时,由于没有把握好计数、显示等一些细节地方,而导致时钟计数不准确、不能正常显示时间等一系列相当严重的问题。在经过反复检查、分析、调试之后,从中发现了中断时的数值设置不太适合,不能使用两个时钟标准等一系列问题,经过自己的反复修改、调试和验证,最终才得以解决达到设计的要求。在整个设计过程中,程序的调试是其中一个非常重要的环节。在调试过程中,小键盘的操作是十分必要的,特别是在调试程序中,有时往往需要在程序中设置断点来判断程序是否正确,通过它,我们可以很快找到出错的地方,对程序进行分析并加以修正。其中有一点是值得我们注意的:在程序设计之前一定要知道设计要求,要清楚地知道本程序所有内容以及程序的执行过程,据此画出本程序的流程图,然后根据流程图进行程序设计,这样的程序比较有条理,各部的程序可以分别进行调试和检查。有利于后面对程序 进行修改和调试,特别值得注意的是,程序在编写的过程中,要有鲜明的思想,不能主次不分,主程序与子程序混在一起,不知道那是主,那是次,要编定出主程序,再根据设计的要求编写子程序,使整个程序严密,有条理。有利于后面的调试修改。
在这次的电子打铃的课题设计过程中,我对所学的PROTEL99设计应用软件有了更深一步的理解与掌握,能够十分熟练的运用其各个菜单的功能,在设计电路时要细心,有耐心,每一个环节都不能有半点的差错,每一个连接点都不能粗心,否则就不能成功。就拿电路原理图转化为PCB板图来说,如果有一个元件没有封装或封装错误,一个元件的管脚编号不一至,在转化时就会出错。有时我们所使用的元件在元件库中无法找到,这就需要我们自己制作,在整个制作过程中,
13
毕 业 论 文
元件的定义是很关键很重要的一步,我们必须对元件的每一管脚功能都很熟悉,以及元件的每一项参数也要了解。元件的引脚也要画的均匀,它们的每一步都是连贯的,都是一环扣一环,对所做的元器件不进行了解就不可能制作出一个合格的元器件。
此次课题设计大体分为准备、设计、调试验证、整理四个阶段。就准备来说,主要查资料。其目的是温故专业知识,熟悉AT89C2051等芯片;再者设计阶段主要是原理图设计、程序设计等。在前阶段的基础上,根据设计目的做出设计计划。此阶段要求熟练操作计算机软件。如PROTEL及汇编等应用软件。同时,要具有一定的编程能力以及应用能力;而调试验证阶段主要就程序的调试,及验证结果。此阶段要掌握编程器及单片机实验电路板的应用。使程序达到预期效果。整理阶段就是把设计的原理图及程序做装饰。使其通俗易懂,一目了然,有条有理。然后把课题设计所涉及的必用资料,以书面的形式打印出来,装订成本。提交答辩。此次毕业设计也就圆满完成。
在这个设计过程中,我们如果没有对以上的知识进行学习就不可能对它们整体化,系统化;也就不能完成课题设计。我们如果没有细心和耐心,没有刻苦钻研,艰苦奋斗的精神,整个课题就不可能设计成功。经过本次课题设计,使我的专业知识得到进一步提高,特别是在单片机编程、汇编语言的应用,计算机的操作,单片微型计算机实验板的使用,编程器和电脑的配合使用,以及Protel 99SE软件的熟练应用等方面。无论是那一方面都马虎不得。因为它们步步相连,环环相扣。对待它们只有耐心、恒心,更要细心和信心。
总之,本次单片机电子打铃课题的设计让我学到了很多东西,使我受益非浅。
14
毕 业 论 文
致谢
衷心感谢我的指导老师鲁杰爽老师。感谢他在我的毕业设计期间对我的精心指导和教诲。在毕业设计过程中,鲁老师无论是在理论上还是在实践中,都给了我很大的帮助。使我在程序调试等各个方面得到了很大的提高。鲁老师治学态度严谨,工作态度认真负责,为人亲切和蔼,学术理论和实践经验丰富,是我学习的好榜样。
同时感谢和我合作的本小组成员(邵莉、朱云霞、张兰、曾玲、夏奎、陈春、李桂林、徐沛然、张杰、李维、扬洋、黄京端、李学亮、王力、沙长园)。在调试的过程中,我们团结合作,充分发挥了集体的力量。遇到技术难关,我们一起商讨解决办法,提出合理方案。在整个开发过程中,是他们给了我无私的协助,帮助我顺利地完成这次毕业设计。
本次用单片机设计的电子打铃至此已全部完成,从开始至结束的一切工作都经同组同学齐心协力的努力下,以及鲁杰爽老师和彭俊珍老师的关怀、支持和指导下,才能顺利的完成(因为无论是资料的采集、零件选购、软件设计、还是硬件焊接、外观设计、论文编写都是由先讨论、后确定、再经过老师的指导,最后经过分工合作来完成的),在这次的设计中体现出我们强大的团队精神,让我们感受到团队的力量。享受到了学以致用,用以助学的快乐。特别是两位老师无微
15
毕 业 论 文
不至的关心,更另我们感受到学院的温暖。老师的伟大。
通过本次毕业设计,使我们对书本又有了更深层次的认识,增强了每位组员的动手能力,特别是认识到理论与实际异同。理论需要实际的验证,实际需要理论为基础和指导。
在此向鲁杰爽、刘华东、彭俊珍三位指导老师表示感谢!
参考文献
刘华东.单片机原理与应用.北京:电子工业出版社,2002. 谢自美.电子线路设计·实验·测试(第二版) .武汉:华中科技大学出版社,2000. 何小艇.电子系统设计.浙江:浙江大学出版社,2004. 胡宴如.模拟电子技术.北京:高等教育出版社,2004. 胡翔俊.电路基础.北京:高等教育出版社,2004. 杨树.数字电子技术.北京:高等教育出版社,2004.
16
毕 业 论 文
附录 A: 原理图
17
LED6R181kR191kR102KR122KR142KR162K2K2K2K23456789119G1G2Y1Y2Y3Y4Y5Y6Y7Y8abcdefghabcdefghabcdefghabcdefgh7a6b4c2d1e9f10g5habcdefgh1817161514131211R212Rk222Rk232Rk242Rk252Rk262Rk272kR282k7a6b4c2d1e9f10g5h7a6b4c2d1e9f10g5h7a6b4c2d1e9f10g5h7a6b4c2d1e9f10g5habcdefghU2数码管数码管数码管LED5LED4数码管LED3LED2数码管LED1数码管7a6b4c2d1e9f10g5habcdefghR201kP0.0P0.1R11P0.2P0.3R13P0.4P0.5R15P0.6P0.7R17Vn+2KA1A2A3A4A5A6A7A8VnVn+VnVn+Vn+VnVnVn+Vn+U13838VnSN74LS541338833VCC8附录 B: PCB图(正面)
P10P11P12P13P14P15P16P17Q1PNP1R1R24.7KS1S2S3S4S5S6R853304.7K4.7K4.7KR3R4Q2PNP1Q3PNP1Q4PNP1R54.7KINT1INT0T1T0EA/VPX1X2RESETRDWR89C51KBQ5PNP1R64.7KQ6PNP1P00P01P02P03P04P05P06P07393837363534333212345678P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.71312VCC1514R9314.7K1918P20P21P22P23P24P25P26P272122232425262728Y112M9VCC1716RXDTXDALE/PPSEN10113029毕 业 论 文
C8722uR812KR82100S7R32VCC4.7KQ329012123J221CON2CON3VCCJ11D14007D24007Q878051VCC323R391KQ33D401C3210nR334.7KD44007D34007C12200/25V2C2220/16VC3CAP8Vn18
毕 业 论 文
附录 C: PCB图(反面)
附录 D: 应用程序
19
毕 业 论 文
ORG 0000H ;设置程序起始地址
START:LJMP L0030
ORG 000BH ;设置T0中断起始地址 INTT00:LJMP INTT1
ORG 001BH ;设置T1中断起始地址 INTT01:LJMP INTT1 ORG 0030H
L0030:MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV CLR CLR CLR CLR MOV MOV MOV MOV MOV MOV MOV MOV SETB 60H,#00H 61H,#00H 62H,#00H 63H,#00H 64H,#00H 65H,#00H
50H,#00H 51H,#00H 52H,#00H 53H,#00H 54H,#00H 5AH,#07h 5BH,#00h 5CH,#00h
10H 11H 12H 13H
R7,#00H R2,#00H P1,#0FFH P3,#0FFH SP,#66H TMOD,#11H 8BH,#38H 8DH,#38H PT1 ;数码管显示缓冲单元清零 ;秒计数缓冲单元清零 ;分计数缓冲单元清零 ;时计数缓冲单元清零 ;星期计数缓冲单元清零 ;日期计数缓冲单元清零 ;对中断处理的单双两部分单元清零 ;对基础计时清零 ;对扫描计数清零 ;输出口初始化 ;输出口初始化 ;设置堆栈的起始地址 ;定时器1的初始化 ;对定时器给初值 ;对定时器给初值 ;设置中断的优先级
20
毕 业 论 文
SETB RS1 ;工作寄存器的设置 SETB RS0 ;T1使用第三组寄存器 MOV R1,#0FH
SETB ET1 ;开中断,启动定时器 SETB TR1 SETB EA CLR TR0
CLR RS1 CLR RS0
L01:LCALL DISPLAY1 LCALL K1 LJMP L01 ORG 0100H 址
INTT1:PUSH ACC PUSH PSW PUSH DPH PUSH DPL MOV A,B PUSH ACC
SETB RS0 SETB RS1 CLR TR1 MOV TH1,#0FCH MOV TL1,#38H
SETB TR1 LOOP2:CPL 10H 反
JNB 10H,LOOPA1 CJNE R7,#00H,LOOP3 LJMP LOOP4
LOOP3:DEC R7 LOOP4:INC R2 CJNE R2,#06H,LOOP5 ;主程序使用第零组寄存器 ;调用显示子程序 ;调用键处理子程序 ;死循环
;设置定时器中断子程序的起始地 ;保护现场 ;设定工程环境
;定时器使用第三组寄存器 ;关中断
;重设定时器初值 ;启动中断
;对中断处理的单双两部分单元取 ;(10H)的位是否为0,是则转移 ;(R7)等于0吗?是则顺序执行 ;R7减1 ;R2加1
;(R2)等于0吗?是则顺序执行
21
毕 业 论 文
LOOP5:JNC LOOP6 ;判断进位是否为0,是则顺序执行 LJMP LOOP7
LOOP6:MOV R2,#00H ;对R2清零
LOOP7:CJNE R2,#00H,LOOP8 ;R2等于0吗?是则顺序执行(显示第一位码)
MOV A,60H ;秒的个位 MOV DPTR,#DATA1 ;查显示字码 MOVC MOV ORL CLR MOV LJMP LOOP8:CJNE 第二位码)
MOV MOV MOVC MOV ORL CLR MOV LJMP LOOP9:CJNE 第三位码)
MOV MOV MOVC MOV ORL CLR MOV LJMP LOOPA1:LJMP A,@A+DPTR
P0,A P2,#7FH P2.0 R1,P2 LOOPA
R2,#01H,LOOP9 A,61H DPTR,#DATA1 A,@A+DPTR
P0,A P2,#7FH P2.1 R1,P2 LOOPA
R2,#02H,LOOP10 A,62H DPTR,#DATA1 A,@A+DPTR
P0,A P2,#7FH P2.2 R1,P2 LOOPA LOOPA1
22
;从P0送出去 ;将P2口的低7位置1
;对显示位位码清零(三极管导通) ;将P2口的内容读出来 ;R2等于1吗?是则顺序执行(显示 ;秒的十位 ;查显示字码 ;从P0送出去 ;将P2口的低7位置1
;对显示位位码清零(三极管导通) ;将P2口的内容读出来 ;R2等于2吗?是则顺序执行(显示 ;分的个位 ;查显示字码 ;从P0送出去 ;将P2口的低7位置1
;对显示位位码清零(三极管导通) ;将P2口的内容读出来 毕 业 论 文
LOOP10:CJNE R2,#03H,LOOP11 ;R2等于3吗?是则顺序执行(显示第四位码)
MOV A,63H ;分的十位 MOV DPTR,#DATA1 ;查显示字码 MOVC A,@A+DPTR
MOV P0,A ;从P0送出去 ORL P2,#7FH ;将P2口的低7位置1
CLR P2.3 MOV R1,P2 LJMP LOOPA
LOOP11:CJNE R2,#04H,LOOP12 五位码)
MOV A,64H MOV DPTR,#DATA1 MOVC A,@A+DPTR
MOV P0,A ORL P2,#7FH CLR P2.4 MOV R1,P2 LJMP LOOPA
LOOP12: CJNE R2,#05H,LOOPA 第六位码)
MOV A,65H MOV DPTR,#DATA1 MOVC A,@A+DPTR
MOV R1,A MOV P0,A ORL P2,#7FH CLR P2.5 MOV R1,P2 LJMP LOOPA
LOOPA:MOV A,R1 JB ACC.6,L034BH MOV A,R2 ;对显示位位码清零(三极管导通) ;将P2口的内容读出来 ;R2等于4吗?是则顺序执行(显示第 ;时的个位 ;查显示字码 ;从P0送出去 ;将P2口的低7位置1
;对显示位位码清零(三极管导通) ;将P2口的内容读出来 ;R2等于5吗?是则顺序执行(显示 ;时的十位 ;查显示字码
;从P0送出去
;将P2口的低7位置1 ;对显示位位码清零(三极管导通) ;将P2口的内容读出来 ;键盘处理(去抖动)
;(ACC.6)的位是否为1,是则转移 ;当前所点亮的数码管的键值
23
毕 业 论 文
CJNE A,5AH,L0349H ;(A)等于(5AH)吗?是则顺序执行 INC R3
CJNE R3,#08H,L034AH ;(R3)等于08H吗?是则顺序执行 L034AH:JC L034BH ;有借位吗?有则转移 MOV 5BH,R2
SETB 11H ;对11H置1 L0349H:MOV R3,#00H MOV L034BH:LJMP LOPA1:CJNE LOOP13:MOV INC
MOV INC DA MOV CJNE MOV MOV INC DA MOV CJNE MOV MOV INC DA MOV CJNE MOV MOV INC DA MOV 5AH,R2
LOOPRET R7,#00H,LOOPRET R7,#0CFH 5CH A,50H A A 50H,A
A,#60H,LOOP14 50H,#00H A,51H A A 51H,A
A,#60H,LOOP14 51H,#00H A,52H A A 52H,A
A,#24H,LOOP14 52H,#00H A,53H
A A 53H,A
24
;显示时间
;R7等于0吗?是则顺序执行 ;给计数器一个1000的值 ;一秒到
;50H是秒计时的寄存器的单元 ;是否到了60秒?是则顺序执行 ;分开始计时前,秒单元要清零 ;一分计时
;51H是分计时的寄存器的单元 ;是否到了60分?是则顺序执行 ;时开始计时前,分单元要清零 ;一小时计时
;52H是小时计时的寄存器的单元 ;是否到了24小时?是则顺序执行 ;星期开始计时前,时单元要清零 ;53H是星期计时的寄存器的单元 毕 业 论 文
CJNE A,#08H,LOOP14A ;是否到了一星期?是则顺序执行 MOV 53H,01H LOOP14A:MOV A,54H
INC A ;54H是月计时的寄存器的单元 DA A MOV 54H,A
CJNE A,#31H ,LOOP14 ;是否到了两个星期?是则顺序执行 MOV LOOP14:LJMP LOOPRET:POP MOV POP POP POP POP RETI DATA1:DB DB DISPLAY1:MOV ANL MOV MOV SWAP ANL MOV MOV ANL MOV MOV SWAP ANL MOV MOV ANL 54H,#01H LOOPRET
ACC ;恢复现场 B,A DPL DPH PSW ACC
;中断返回
0C0H,0F9H,0A4H,0B0H,99H,092,82H,0F8H,80H 90H,50H,0D0H,030H,0B0H,070H,0F0H,0F0H A,50H ;显示处理子程序
A,#0FH ;一个字节要两位数码管显示 60H,A ;取低四位 A,50H A A,0FH
61H,A ;取高四位 A,51H ;显示第一个字节 A,#0FH 62H,A A,51H A A,#0FH 63H,A
A,52H ;显示第二个字节 A,0FH
25
毕 业 论 文
MOV 64H,A MOV A,52H SWAP A ANL A,#0FH MOV 65H,A RET
K1:JNB 11H ,L00BFH ;键盘处理子程序(如果有键按下,则11H为1,见顺序执行) CLR 11H MOV A,5BH
ANL A,#0FH
CJNE A,#07H,L00F3H L00F3H:JNC L00BFH MOV B,A ADD A,B ADD A,B
MOV DPTR,#L0000H JMP @A+DPTR L0000H:LJMP L0001H LJMP L0002H LJMP L0003H LJMP L0004H LJMP L0005H L0001H:LJMP L00BFH L0002H:LJMP L00BFH
L0003H:MOV A,51H ADD A,#99H DA A MOV 51H,A CJNE A,#99H,L00BFH MOV 51H,#59H
LJMP L00BFH
L0004H:MOV A,51H INC A ;看A的键值是否小于07H的? ;是否有进位,有则转移 ;分减一计时
;51H是分计时的寄存器的单元 ;分加一计时
;51H是分计时的寄存器的单元 26
毕 业 论 文
DA A MOV 51H,A CJNE A,#60H,L00BFH MOV 51H,#00H LJMP L00BFH
L0005H:MOV A,52H ;时减一计时
ADD A,#99H ;52H是分计时的寄存器的单元 DA A MOV 52H,A CJNE A,#99H,L00BFH MOV 52H,#23H LJMP L00BFH
L0006H:MOV A,52H INC A DA A MOV 52H,A CJNE A,#24H,L00BFH MOV 52H,#00H L00BFH:RET
END
图1:单片机结构框图
;时加一计时
;52H是分计时的寄存器的单元 27
毕 业 论 文
图2: AT89C51引脚图
芯片介绍:MCS-51系列单片机是美国Intel公司开发的8位单片机,又可以分
为多个子系列。MCS-51系列单片机共有40条引脚,包括32条I/O接口引脚、4条控制引脚、2条电
P1.0 1 40 VC C
源引脚、2条时钟引脚。 P1.1 2 39 P0.0/AD 0
P1.2 3 38 P0.1/AD 1 引脚说明: P1.3 4 37 P0.2/AD 2
P0.0~P0.7:P0口8位口线,第P1.4 5 36 P0.3/AD 3
P1.5 6 35 P0.4/AD 4一功能作为通用I/O接口,第二P1.6 7 34 P0.5/AD 5
功能作为存储器扩展时的地址/P1.7 8 33 P0.6/AD 6
AT89C51 RST 9 32 P0.7/AD 7
数据复用口。 RXD/P3.0 10 31 EA/VPP TXD/P3.1 11 30 ALE/PROG P1.0~P1.7:P1口8位口线,通INT0/P3.2 12 29 PSEN
用I/O接口无第二功能。 INT1/P3.3 13 28 P2.7/A15
T0/P3.4 14 27 P2.6/A14 P2.0~P2.7:P2口8位口线,第T1/P3.5 15 26 P2.5/A13 WR/P3.6 16 25 P2.4/A12 一功能作为通用I/O接口,第二RD/P3.7 17 24 P2.3/A11
功能作为存储器扩展时传送高8XTAL2 18 23 P2.2/A10
XTAL1 19 22 P2.1/A9 位地址。 VS S 20 21 P2.0/A8
P3.0~P3.7:P3口8位口线,第
一功能作为通用I/O接口,第二功能作为为单片机的控制信号。
ALE/ PROG:地址锁存允许/编程脉冲输入信号线(输出信号) PSEN:片外程序存储器开发信号引脚(输出信号) EA/Vpp:片外程序存储器使用信号引脚/编程电源输入引脚
RST/VPD:复位/备用电源引脚
图3:程序框图
28
毕 业 论 文
1、简化程序框图
2、初始化框图
3、主程序框图
4、显示子程序
29
毕 业 论 文
表1:元件清单
元件名称 电阻 电阻 三极管 开关 电容 电容 双向二极管 变压器 规格 330Ω 1Ω PNP 四脚 200uF 100uF 7.5V 支 25 1 6 7 2 3 1 1 元件名称 电阻 电阻 三极管 数码管 电容 电容 稳压二极管 规格 10k 1k 9012 10脚 100uF 1uF 4007 支 10 5 4 6 1 1 5 元件名称 电阻 电阻 三极管 电容 电容 三端稳压 继电器 规格 4.7k 2k D401 1000uF 16v10uF CW7805 AGY23299 支 1 1 1 1 1 1 1 30
因篇幅问题不能全部显示,请点此查看更多更全内容