您的当前位置:首页正文

秒表设计论文

2024-05-25 来源:步旅网
摘 要

摘 要

了解STC89C52芯片的工作原理和工作方式,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并用按钮实现秒表启动,停止,清零功能,分组计时,蜂鸣器报时,精确到0.01秒。

通过本次课程设计要求选用定时器的工作方式,画出使用单片机控制LED数码管显示电路图,并在实验箱实现其硬件电路,并编程完成软件部分,最后调试秒表启动、停止、清零功能,分组计时,蜂鸣器报时。

加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。掌握定时器、外部中断的设置和编程原理。通过此次课程设计能够将单片机软硬件结合起来,对程序进行编程,校验。

该实验通过单片机的定时器/计数器定时器和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管分组显示,在现实生活中应用广泛,具有现实意义。

本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成电子秒表的硬件电路的。电子秒表电路主要由STC89C52单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现四位数码显示和多次计时,能通过控制电路能控制时间的暂停和开始,能够多次计时,查询计时时间。

关键字:STC89C52,LED数码管,蜂鸣器,时钟,按键

I

ABSTRACT

ABSTRACT

Understand STC89C52 chip principle of work and the work method, using the chip to LED digital display control pipe, realize the port with single-chip computer control digital tube, show minutes and seconds, and button realize a stopwatch start, stop, reset function, group time, a buzzer tell time, accurate to 0.01 seconds.

Through this course design requirements choose timer way of working, painted using single-chip microcomputer control LED digital display the circuit diagram, and in the box to realize its hardware circuit and software programming to complete part, finally commissioning a stopwatch start and stop, reset function, group timing, to strike the buzzer.

Deepen our understanding of the single chip microcomputer curriculum review and master the comprehensive understanding of to the single chip course application further understanding. Master timer, set up and external interruption programming principle. Through this course design can combine SCM software and hardware, the procedure programming, calibration.

This experiment through the single chip microcomputer timer/counter timer and count the principle, design simple timer system, have the right timing, pause, reset, and also use digital tube group shows, in real life applications, have realistic meanings. This design is finished in the SCM system based on the smallest increase display circuit and control circuit to complete electronic stopwatch hardware circuit. Electronic stopwatch circuit by single chip minimize system STC89C52 main circuit, seven period of digital tube dynamic display of circuit and control circuit, it can realize the four digital display and the many time, can through the control circuit can control the time to halt and began, many times to timing, inquires the timing of time.

Key word: STC89C52, LED digital tube, a buzzer, clock, buttons

II

目 录

目 录

第1章

引言 ................................................................................................................. 1

1.1选题背景 .................................................................................................................... 1 1.2研究目标和意义 ........................................................................................................ 1 1.3研究思路 .................................................................................................................... 2 第2章

研究的理论基础 ............................................................................................. 3

2.1总体介绍 .................................................................................................................... 3 2.2时钟介绍 .................................................................................................................... 4 2.3复位及复位电路 ........................................................................................................ 4 2.4STC89C52主要功能 .................................................................................................. 9 第3章 第4章

控制芯片介绍 ................................................................................................. 3 单片机最小系统 ............................................................................................ 11

4.1单片机部分 ............................................................................................................... 11 4.2单片机与PC机接口部分. ....................................................................................... 11 第5章

系统功能 ....................................................................................................... 13

5.1系统实现 .................................................................................................................. 13 5.2元件清单 .................................................................................................................. 13 第6章 第7章

电路设计 ....................................................................................................... 14 模块框图 ....................................................................................................... 16

7.1按键模块 .................................................................................................................. 16 7.2时钟模块 .................................................................................................................. 17 7.3复位模块 .................................................................................................................. 18 7.4显示模块 .................................................................................................................. 19 7.5蜂鸣器模块 .............................................................................................................. 22 参考文献 ........................................................................................................................ 24 致谢 ................................................................................................................................ 25 附录 ................................................................................................................................ 26

III

第1章 引言

第1章 引言

1.1选题背景

单片机自二十世纪七十年代以来,以及其好的性价比受到人们的重视和关注,所以发展很快,应用广泛。单片机的特点是体积小,集成度高,重量强,抗干扰能力强,对环境的要求低,价格低廉,可靠性高,灵活性强,开发较为容易。正因为单片机以广泛的应用与工业自动化控制,自动检测,智能仪表,智能化家用电器,航空航天和军事技术领域等各个方面我们可以开发利用单片机系统以获得很高的经济效应,更重要的意义是单片机的应用改变了控制系统的设计思想和方法。这种以软件结合硬件或取代硬件并能提高系统性能的控制技术称为控制技术,列入,本文所要论述的通过单片机来控制LED显示屏。

单片机具有体积小,成本低,抗干扰能力强,面向控制,可以实现分机各分布式控制的特点。本秒表/时钟设计就是利用单片机的上述特点,采用目前市场上性价比比较高单的STC89C52单片机设计而成的最小系统。他在实际生活中具有广泛的应用。

秒表是电器制造,电信,工业自动化控制。国防、实验室及科研单位理想的计时。

1.2研究目标和意义

本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成电子秒表的硬件电路,以达到0.01s的精度以及启动、暂停、清零等功能。显示电子秒表电路主要由STC89C52单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现四位数码显示和多次计时,能通过控制电路能控制时间的暂停和开始,能够多次计时,查询计时时间。秒表是一种常用的测时仪器。它是利用摆的等时性控制指针转动而计时的。在它的正面是一个大表盘,上方有小表盘.秒针沿大表盘转动,分针沿小表盘转动。分针和秒针所指的时间和就是所测的时间间隔。在表正上方有一表把,上有一按钮。旋动按钮,上紧发条,这是秒

1

电子科技大学成都学院课程设计

表走动的动力。用大拇指控下按钮,秒表开始计时;再按下按钮,秒表停止走动,进行读数;再按一次,秒表回零,准备下一次计时。(注意:使用这类秒表一定要完成这一程序后才能进行下一次计时。这类表不能在按停后又重新开动秒表连续计时。为了解决这一问题,有的秒表在表把左侧装有一按钮,当表走动时将此按钮向上推,表停走;向下推,即继续累计计时。)

秒表的精度一般在0.1-0.2秒,计时误差主要是开表、停表不准造成的。秒表在使用前上发条时不宜上得过紧,以免断裂。使用完后应将表开动,使发条完全放开。不同型号的秒表,分针和秒针旋转一周所计的时间可能不同,使用时要注意。

本设计从总体要求出发,采用自顶向下逐步细化的方法,将系统模块化,使得系统具有很强的扩充性,并且在实现设计的基础上,采用maxplus的仿真环境得到理想的仿真效果。本设计完成的中途计时功能,实现了在许多特定场合进行时间追踪的功能,在社会生活中具有广泛的应用价值。

了解基于单片机STC89C52的秒表系统的成因及其影响因素对认识基于单片机STC89C52的秒表系统有重要的意义,带计时器功能的秒表的应用也很重要.通过以下的介绍可以了解带计时器功能的秒表的发展现状和相关技术理论。以下介绍了和基于单片机STC89C52的秒表系统相关的设计用以比较,重点是单片机STC89C52的秒表。

1.3研究思路

用STC89C52设计一个2位LED数码管显示“秒表”,显示时间为00~99秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键。再增加一个“暂停”按键,开始计数,数码管显示从00开始每秒自动加一;按“复位”按键,系统清零,数码管显示00;按“暂停”按键,系统暂停计数,数码管显示当时的计数;按“快加”按键,系统每10ms快速加一,即数码管在原先的计数上快速加一。

2

第2章 研究的理论基础

第2章 研究的理论基础

2.1总体介绍

STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

单片机总控制电路如下图2-1:

图2-1单片机总控制电路

3

电子科技大学成都学院课程设计

2.2时钟介绍

STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图4—2(a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。

外部方式的时钟电路如图4—2(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。

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

图2-2时钟电路

2.3复位及复位电路

复位操作

4

第2章 研究的理论基础

复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

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

表2-1一些寄存器的复位状态

寄存器 PC ACC PSW SP DPTR P0-P3 IP IE TMOD

复位状态 0000H 00H 00H 07H 0000H FFH XX000000B 0X000000B

00H

寄存器 TCON TL0 TH0 TL1 TH1 SCON SBUF PCON

复位状态 00H 00H 00H 00H 00H 00H 不定 0XXX0000B

复位信号及其产生

RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。

产生复位信号的电路逻辑如图2—3所示:

5

电子科技大学成都学院课程设计

图2-3复位信号的电路逻辑图

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

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

上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图2-4所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。

按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图2-4所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,

其电路如图2-4所示:

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

图2-4复位电路

6

第2章 研究的理论基础

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

本系统的复位电路采用图4—4(b)上电复位方式。 STC89C52具体介绍如下: ① 主电源引脚(2根)

VCC(Pin40):电源输入,接+5V电源 GND(Pin20):接地线 ②外接晶振引脚(2根)

XTAL1(Pin19):片内振荡电路的输入端 XTAL2(Pin20):片内振荡电路的输出端 ③控制引脚(4根)

RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。 ALE/PROG(Pin30):地址锁存允许信号 PSEN(Pin29):外部存储器读选通信号

EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。 ④可编程输入/输出引脚(32根)

STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7 P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7 P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7

7

电子科技大学成都学院课程设计

2.4STC89C52主要功能

表2-2 STC89C52主要功能

主要功能特性

兼容MCS51指令系统 32个双向I/O口 3个16位可编程定时/计数器中断 2个串行中断 2个外部中断源 2个读写中断口线 低功耗空闲和掉电模式 8K可反复擦写Flash ROM 256x8bit内部RAM 时钟频率0-24MHz 可编程UART串行通道 共6个中断源 3级加密位 软件设置睡眠和唤醒功能 8

第3章 控制芯片的介绍

第3章控制芯片介绍

STC89C52单片机的外型如图所示:

图3-1STC外形

STC89C52单片机简介控制

STC89C52是一种低功耗,高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

和atmel的对比

STC89C52RC单片机: 8K字节程序存储空间; 512字节数据存储空间; 内带4K字节EEPROM存储空间;

9

电子科技大学成都学院课程设计

可直接使用串口下载; AT89S52单片机: 8K字节程序存储空间; 256字节数据存储空间; 没有内带EEPROM存储空间;

图3-2 STC89C52引脚标注

单片机广泛用于工业控制、智能仪器仪表、计算机设备及网络、通信领域、家用电器、医用设备、军用设备等各个方面。对于单片机这样的集成电路,要设计让它完成一个特定的工作任务,除完成设计相关的硬件电路外,还要设计相应的控制软件,才能使整个电路按照设计要求自动地进行工作。所以,电子电路学习到单片机这个知识层次时,除要学习相关硬件知识,还学习相关软件设计知识,才能对单片机进行控制和应用。单片机的开发和应用,是利用硬件和软件的结合来实现的。由于单片机的功能强大,充分理解各引脚功能,灵活编写控制程序去控制引脚功能,完成各种需要的设计。

10

第4章 单片机最小系统

第4章单片机最小系统

单片机最小系统就是能让单片机工作起来的一个最基本的组成电路。如图所示的电路就是由AT89S51组成的最小单片机系统。以单片机AT89S51为核心,AT89S51的18、19引脚外接石英晶体振荡电路,9引脚外接S17、R2、C1组成的复位电路,20脚接地,40、31脚接电源Vcc,就构成了AT89S51的最小系统

4.1单片机部分

图4-1单片机最小系统

4.2单片机与PC机接口部分.

11

电子科技大学成都学院课程设计

图4-2PL2303外形

PL2303 的高兼容驱动可在大多操作系统上模拟成传统COM 端口,并允许基于COM 端口应用可方便地转换成USB接口应用,通讯波特率高达6 Mb/s。在工作模式和休眠模式时都具有功耗低,是嵌入式系统手持设备的理想选择。该器件具有以下特征:完全兼容USB1.1 协议;可调节的3~5 V 输出电压,满足3V、3.3V和5V不同应用需求;支持完整的RS232接口,可编程设置的波特率:75b/s~6 Mb/s,并为外部串行接口提供电源;512 字节可调的双向数据缓存;支持默认的ROM和外部EEPROM存储设备配置信息,具有I2C 总线接口,支持从外部MODEM 信号远程唤醒;支持Windows98,Windows2000,WindowsXP,Windows Vista,Windows7等操作系统;28引脚的SOIC封装.

图4-3 PL2303

12

第5章 系统功能

第5章系统功能

5.1系统实现

此次实训设计的电子秒表可以实现用开关K1实现秒表的启动,用开关K2实现秒表的数据保存,用开关K3实现秒表的数据的翻页查看,用开关K4实现秒表的停止;将数据显示在数码管上,供使用者数取。

上述功能主要涉及到单片机定时器、键盘和LED的使用方法. 此设计采用AT89C51单片机为核心控制元件,结合数码管、三极管等器件构成一个显示值达99.99的电子秒表。利用了单片机的延时电路、按键复位电路、定时中断等电路,实现了电子秒表的启动、保存、翻页查看、停止的功能和数码管的动态显示的功能。

5.2元件清单

表5-1元件清单

元件名 Stc89c52 四段数码管 PNP三极管 10K电阻 无极性电容(30PF) 电解电容 整流二极管 按键 12M晶振 电源插座 下载线 数量 1 1 4 5 2 1 4 5 1 1 1 13

电子科技大学成都学院课程设计

第6章电路设计

在本课程设计中,我们定义了5组static的静态变量,所谓的静态变量也就是储存在静态储存区内的变量。Static的作用有三条:

1.隐藏

2.保持内容的持久 3.Static的默认初始化为0

我们主要利用了static的2.3两个作用定义了如下5组静态变量: static int b, num,num1,num2,num3,num4;

static int num_1,num1_1,num2_1,num3_1,num4_1; static int num_2,num1_2,num2_2,num3_2,num4_2; static int num_3,num1_3,num2_3,num3_3,num4_3; static int num_4,num1_4,num2_4,num3_4,num4_4;

这样保证了最近五次记录的数据在不掉电的情况下,程序将会进行自动保存在静态储存区内,方便我们可以随时对数据的读取操作。

以上就是本次课程设计主要的控制电路及程序实现方式,以最简单最精确

的控制方式,不仅满足了课程设计的基本要求并且还扩展了多个功能。这也许就是我们预想中最好的结果。

14

第6章 电路设计

图6-1实现流程框图

15

电子科技大学成都学院课程设计

第7章模块框图

本次实训电子秒表所使用到的模块:

7.1按键模块

K1:start启动,stop停止,K2:清零,K3:查看分组计时;将三个按键与P1.0、P1.1、P1.2相接。通过扫描按键,读取按键实现三个功能的控制。

图7-1按键框图

一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如上图所示:

图7-2按键过程信号

从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时 5ms 以

16

第7章 模块框图

上 ,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别过程。从而提高了系统的可靠性。 查询方式案件实验(配套试验四部分程序)

/******************************************************************** * 名称 : Delay()

* 功能 : 实现按键功能,当按键按下时,相应的LED亮灭交替 * 输入 : 无 * 输出 : 无

********************************************************************/ void KEY() {

if(KEY1==0 || KEY2==0 || KEY3==0) {

Delay(2); //20毫秒软件防抖

if(KEY1==0 || KEY2==0 || KEY3==0) {

if(KEY1 == 0) {

LED1 = ~ LED1; //LED显示取反 }

else if(KEY2 == 0) {

LED2 = ~ LED2; } else {

LED3 = ~ LED3; } }

Delay(50); //延时0.5秒再进行下次按键的检测 } }

7.2时钟模块

单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元, 外接晶体以及电容C1 和C2 构成并联谐振电路接在放大器的反馈回路中,决定单片机

17

电子科技大学成都学院课程设计

的工作速度。

一般选用12MHz石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性,晶体频率可在1. 2MHz~12MHz 之间任选,电容C1 和C2 的典型值在20pF~100pF 之间选择。C1,C2的典型值为30PF。

图7-3时钟芯片

7.3复位模块

STC89S52的复位输入引脚RST 为89S52提供了初始化的手段,可以使程序从指定处开始执行,在89S52的时钟电路工作后,只要RST 引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作。只要RST 保持高电平,则单片机循环复位。只有当RST 由高电平变低电平以后,89S52才从0000H 地址开始执行程序。本系统采用按键复位方式的复位电路。

18

第7章 模块框图

图7-4复位电路

7.4显示模块

LED数码管采用的是有发光二极管按一定的结构组合起来的显示器件。本次实训采用的是共阳极的方式。A—G因脚输入不同的二进制编码可显示不同的数字。而且本次实训采用的是软件破译方式,通过译码程序来得到要显示的数字的字段码。

图7-5数码管显示

19

电子科技大学成都学院课程设计

我们用的是共阴数码管。数码管的位选是通过74HC138连接的。数码管的段通过74HC573驱动。74HC138和74HC573的使用可以看前面两节。

uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_W[8] = {0,1,2,3,4,5,6,7}; //这里是需要往三八译码器送的数据 /******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) {

uchar i = 0,j = 0; while(1) {

P0 = table[i]; // 数码管段值

P2 = LED_W[j]; //点亮某一位数码管 Delay(2); j++; i++;

if(j == 8) //每个数码管都点亮了一次。 { j = 0; i = 0; } } }

数码管移动显示

/******************************************************************** * 名称 : Time0_Int()

* 功能 : 定时器中断,中断中实现 Count 加一 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Time0_Int() interrupt 1 {

TH0 = 0x4c; TL0 = 0x00; Time_temp++;

if(Time_temp == 4) //定时器溢出时间50毫秒,隔0.2秒,数码管的数据 改变一次 {

LED_temp++;

20

第7章 模块框图

Time_temp = 0; } }

/******************************************************************** * 名称 : Main()

* 功能 : 数码管的显示 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main(void) {

uchar i = 0,j = 0; Time0_Init(); while(1) {

P0 = table[(i + LED_temp) % 8]; //数码管段值 P2 = LED_W[j]; //点亮某一位数码管 Delay(2); j++; i++;

if(j == 8) //每个数码管都点亮了一次。 { j = 0; i = 0; } } }

21

电子科技大学成都学院课程设计

7.5蜂鸣器模块

总体原理:

乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。

单片机产生不同频率脉冲信号的原理:

1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O 反相,然后重复计时此半周期的时间再对I/O 反相,就可以在I/O 脚上得到此频率的脉冲。

2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:

例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。

计数脉冲值与频率的关系公式如下: N=Fi/2/Fr

(N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率)

图7-6蜂鸣器

22

附录

⑶ 其计数值的求法如下: T=65536-N=65536-Fi/2/Fr 计算举例:

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、 高音DO(1046Hz)的计数值。

T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr 低音DO 的T=65536-500000/262=63627 中音DO 的T=65536-500000/523=64580 高音DO 的T=65536-500000/1047=65059

将蜂鸣器定以为Buzzer,使每秒和每分都能报时

void Buzzer() {

if(b==0)

for(x=0;x<40;x++) {

display_1(); buzzer=~buzzer; }; }

23

电子科技大学成都学院课程设计

参考文献

[1]马争,《微计算机与单片机原理及应用》,北京:高等教育出版社,2009

[2]杨素行,《模拟电子技术基础简明教程》(第三版),北京:高等教育出版社,2006 [3]郭天翔,《新概念51单片机C语言教程》,北京:电子工业出版社,2009 [4]张天凡,《完全手册—51单片机C语言开发详解》,北京:电子工业出版社,2008 [5]胡翔骏,《电路分析》,北京:高等教育出版社,2002

[6]张毅刚.彭喜元,《单片机原理与应用设计》,北京:电子工业出版社,2004 [7]张毅刚,《单片机原理及应用》,北京:高等教育出版社,2006

[8]张毅坤,《单片机微型技术原理及应用》(第二版),西安:西安电子科技大学出版社,2009 [9]李全利,迟荣强,《单片机原理及接口技术》,北京:高等教育出版社,2008 [10]康华光,《电子技术基础》,北京:高等教育出版社,2001 [11]阎石,《模拟电子技术基础》,北京:高等教育出版社,2001

[12]陈光东,《单片机微型计算机原理及其C语言程序设计》,武汉:华中科技大学出版社,2004 [13]杨宇,《单片机与控制技术》,北京:北京航空航天大学出版社,2005

24

致谢

致谢

通过这次课程设计锻炼了我们的实践能力,也是对我们以后的实际工作能力的具体训练和考察过程。现在是一个高科技的是时代,单片机已经成为当今计算机应用中空前活跃的领域。因此对于我们这一专业的同学来说,学好单片机并正确应用单片机是非常重要的。

此次单片机课程设计,从选题到定稿,从理论到实践,学到了很多重要的东西。同时也巩固了以前单片机的知识,学到了书上没有的东西,加强了动手能力和同学,老师之间的协作能力。只有理论的知识是不行的,要把所学的理论知识与实践相互结合,从中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次课程设计还让我学会了如何培养我们的创新知识,从而不断地战胜自己超越自己,学习坚持不懈,不轻言放弃。

回顾此次课程设计,至今我感慨颇多,的确,从选稿到定稿,从理论到实践,可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固以前学过的知识,而且可以学到很多课本上没有学到过的知识。设计过程中我遇到了很多的问题,在老师的帮助下得到了解决,同时,在老师身上学到了很多实用的知识。总体来说,这次学习使我受益匪浅。在摸索如何设计该程序使之实现所需功能的过程中,培养了我的设计思想,增加了实际操作能力。在让我体会到设计艰辛的同时,更让我体会到成功的喜悦和快乐。

对于这次课程设计的收尾,我要感谢的有很多,首先要感谢尊敬的刘老师,他给我们的课程设计提出了许多宝贵的意见和很多的帮助。感谢我的搭档,有他们才有我们课程设计的顺利完成,我们每个人都尽了自己最大的努力来做好它。还要感谢大量书籍的作者,是你们为我们提供了大量的材料,谢谢!

25

电子科技大学成都学院课程设计

附录

/*秒表*/

#include

#define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; sbit T=P3^4;

sbit buzzer=P1^2;

/*********不带小数点数码管数值**********/ uchar code table[]= {

0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, };

/*********带小数点数码管数值***********/ uchar code apple[]= {

0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef, };

/*************组别显示***************/ uchar code group[]= {

0x06,0x5b,0x4f,0x66,0x6d, };

uint a,x;

static int b, num,num1,num2,num3,num4;

static int num_1,num1_1,num2_1,num3_1,num4_1; static int num_2,num1_2,num2_2,num3_2,num4_2; void delay(uint z); void Buzzer(); void display_1();

26

附录

void display_2(); void display_3();

void main() {

T2MOD=0; T2CON=0;

RCAP2H=(65536-10000)/256; RCAP2L=(65536-10000)%256; TH2=RCAP2H; TL2=RCAP2H; EA=1; ET2=1; TR2=0; EX1=1; IT1=1; EX0=1; IT0=1; while(1) {

if(b==0)

for(x=0;x<11;x++) {

display_1(); }; if(b==1)

for(x=0;x<11;x++) {

display_2(); }; if(b==2)

for(x=0;x<11;x++) {

display_3(); };

if(TR2==0&&T==0) {

b++; while(!T)

27

电子科技大学成都学院课程设计

{

if(b==0)

for(x=0;x<11;x++) {

display_1(); }; if(b==1)

for(x=0;x<11;x++) {

display_2(); }; if(b==2)

for(x=0;x<11;x++) {

display_3(); };

if(b==3)

for(x=0;x<11;x++) {

display_1(); b=0; }; } } } }

void display_1() {

P0=table[num%10]; P2=7;

delay(50);

P0=table[num/10]; P2=6;

28

附录

delay(50); P0=apple[num1]; P2=5;

delay(50);

P0=table[num2]; P2=4;

delay(50); P0=apple[num3]; P2=3;

delay(50); P0=table[num4]; P2=2;

delay(50); P0=0x40; P2=1;

delay(50); P0=group[b]; P2=0;

delay(50);

if(num==100) {

num=0; num1++; buzzer=0; delay(1); buzzer=1; }

if(num1==10) {

num1=0; num2++; }

29

电子科技大学成都学院课程设计

if(num2==6) {

num=0; num1=0; num2=0; num3++; Buzzer(); }

if(num3==10) {

num3=0; num4++;

}

if(num4==6) {

num=0; num1=0; num2=0; num3=0; num4=0; } }

void display_2() {

P0=table[num_1%10]; P2=7;

delay(50);

P0=table[num_1/10]; P2=6;

delay(50);

P0=apple[num1_1];

30

附录

P2=5;

delay(50);

P0=table[num2_1]; P2=4;

delay(50); P0=apple[num3_1]; P2=3;

delay(50); P0=table[num4_1]; P2=2;

delay(50); P0=0x40; P2=1;

delay(100); P0=group[b];; P2=0;

delay(50);

if(num_1==100) {

num_1=0; num1_1++; buzzer=0; delay(1); buzzer=1; }

if(num1_1==10) {

num1_1=0; num2_1++; }

if(num2_1==6) {

num_1=0;

31

电子科技大学成都学院课程设计

num1_1=0; num2_1=0;

num3_1++; Buzzer();

}

if(num3_1==10) {

num3_1=0; num4_1++;

}

if(num4_1==6) {

num_1=0; num1_1=0; num2_1=0; num3_1=0; num4_1=0; } }

void display_3() {

P0=table[num_2%10]; P2=7;

delay(50);

P0=table[num_2/10]; P2=6;

delay(50);

P0=apple[num1_2]; P2=5;

delay(50);

32

附录

P0=table[num2_2]; P2=4;

delay(50); P0=apple[num3_2]; P2=3;

delay(50); P0=table[num4_2]; P2=2;

delay(50); P0=0x40; P2=1;

delay(50); P0=group[b];; P2=0;

delay(50);

if(num_2==100) {

num_2=0; num1_2++; buzzer=0; delay(1); buzzer=1; }

if(num1_2==10) {

num1_2=0; num2_2++; }

if(num2_2==6) {

num_2=0; num1_2=0; num2_2=0; num3_2++;

33

电子科技大学成都学院课程设计

Buzzer(); }

if(num3_2==10) {

num3_2=0; num4_2++;

}

if(num4_2==6) {

num_2=0; num1_2=0; num2_2=0; num3_2=0; num4_2=0; } }

void dingshi0() interrupt 5 {

TF2=0; if(b==0) num++; if(b==1) num_1++; if(b==2) num_2++; }

void exter0() interrupt 0 {

TR2=~TR2;

34

附录

}

void zhongduan() interrupt 2 {

if(TR2==0) {

num=0; num1=0; num2=0; num3=0; num4=0;

num_1=0; num1_1=0; num2_1=0; num3_1=0; num4_1=0;

num_2=0; num1_2=0; num2_2=0; num3_2=0; num4_2=0; b=0; } else {

// TR2=0; b++;

if(b==3) b=0; } }

void Buzzer() {

if(b==0)

for(x=0;x<40;x++)

35

电子科技大学成都学院课程设计

{

display_1(); buzzer=~buzzer; }; if(b==1)

for(x=0;x<40;x++) {

display_2(); buzzer=~buzzer; }; if(b==2)

for(x=0;x<40;x++) {

display_3(); buzzer=~buzzer; };

if(b==3)

{

display_1(); buzzer=~buzzer; b=0; };

buzzer=1; }

void delay(uint z) {

while(z--); }

36

因篇幅问题不能全部显示,请点此查看更多更全内容