单片机课程设计5--基于PROTEUS的多功能数字电子钟的设计 - 图文

更新时间:2024-01-09 16:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机课程设计5

基于PROTEUS的多功能数字电子钟的设计

张浩然

数理与信息工程学院

2006年6月

1

前 言

单片机技术是现代电子工程领域一门迅速发展的技术,它的应用已经渗透到各种嵌入式系统中。可以毫不夸张地说:掌握单片机技术是电子信息类专业学生就业的一个重要条件。同时单片机技术又是一门实践性很强的学科。课程设计教学环节的设计和实施,在很大程度上决定了学生对单片机技术的掌握程度。

为了更好地完成课程设计这一重要教学环节,我们采用Proteus软件与Keil软件整合构建单片机虚拟实验平台。学生首先在PC上利用Proteus软件自己搭建硬件电路,并利用系统提供的功能完成电路分析、系统调试和输出显示的硬件设计部分;同时在Keil软件中编制程序,进行相应的编译和仿真,完成系统的软件设计部分。当系统的设计工作完成后,学生可以在PC上看到最终的运行效果。最后再通过proteus设计PCB,再完成真正硬件的调试。

采用以上方案具有以下优势:有利于促进课程和教学改革,更有利于人才的培养;从经济性、可移植性、可推广性角度讲,建立这样的课程设计平台是非常有意义的;利用仿真系统,可以节约开发时间和开发成本;利用仿真系统,具有很大的灵活性和可扩展性。

2

第一章 概述

Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。②支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍Proteus ISIS软件的工作环境和一些基本操作。

一、进入Proteus ISIS

双击桌面上的ISIS 6 Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus 6 Professional” →“ISIS 6 Professional”,出现如图1-1所示屏幕,表明进入Proteus ISIS集成环境。

图1-1 启动时的屏幕

3

二、工作界面

Proteus ISIS的工作界面是一种标准的Windows界面,如图1-2所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

图1-2 Proteus ISIS的工作界面

第二章 几个基本例子

例1--基本电路:交流电供电

4

1.- 点击 Pick Devices按钮,(该按钮位于工作区左边的面板中,就是那个P按钮),这是会打开标题为Pick Devices的对话框。

2.- 在Category列表框中 (位于左边) 找到Simulator Primitives,这是会在Results中列出该类的所有元件(如果该类有太多元件,你利用Sub-Category列表框过滤),ALTERNATOR就是我们要找的交流电电源。

5

3.- 在Results中双击 ALTERNATOR 会在The Object Selector(元件列表框)列出ALTERNATOR。

4.- 同样的方法添加LAMP,在Category->Optoelectronics-> LAMP。

6

5.- 单击 Pick Devices 对话框的OK按钮结束添加元件。

6.- 在The Object Selector(元件列表框)单击选择ALTERNATOR。

7.- 接着在位于主窗口左下角的角度调整工具条中设置在原理图窗口中ALTERNATOR的方向(这一步也可以在放置元件后再设置)。第一按钮是顺时针旋转90度,第二个按钮是逆时针旋转90度,第三个按钮是水平翻转,第四的按钮是垂直翻转,中间的那个可输入0, +/-90, +/-180, +/-270。

8.- 放置ALTERNATOR到原理图窗口中,方法很简单:完成步骤7后,在原理图窗口中单击左键即可。

7

9.- 用同样的方法放置 LAMP。

10.- 配置元件参数。

a.- 在原理图窗口中先右击再左击 ALTERNATOR,出现Edit Component对话框,按下面参数进行设置(第一、二个参数与仿真无关,起到标识作用)。

8

b.- 单击 OK完成。

c.- 同样方法设置LAMP的参数。

11.- 连接元件:

a.- 重新调整元件的角度。在步骤7时我们已经调整过了,但如果仍然不太符合要求,你可以重新调整,方法:在原理图窗口中右击该元件,再在角度调整工具条中设置。

b.- 把鼠标移到ALTERNATOR的一个引脚末端,这时鼠标变成×字型,单击左键一下并移动鼠标,会出现一条线,你可以再在原理图的其他地方单击左键几下以确定连接线的形状,最后在LAMP的一个引脚末端单击左键一下就完成一条连接线。其

9

实,你只要在需要连接的两个元件的引脚处分别单击左键一下,Proteus会自动完成这条连接线。

c.- 修改连接线。如果连错了,你就在该连接线上双击右键就把它给删除掉了。如果要修改走线的形状,你可以在连接线上单击右键再在某一个位置上按住左键拖动,满意后再在原理图的空的地方单击一下右键。 最终结果:

12.- 开始仿真,找到主窗口底部的仿真工具条,单击左边第一个按钮。

13.- 原理图的放缩操作,你可以用放缩工具条来完成。说明一下: a.以当前点击的位置为屏幕中心显示

b.以屏幕中心对应的位置为中心向四周放大

c.以屏幕中心对应的位置为中心向四周缩小 d.显示整个原理图 e.显示选择的区域

14.- 配置Set Animation Options,这样使你的仿真结果更加形象。方法: 到System菜单看一下,那里有一个Set Animation Options选项,单击它出现以下对话框

10

左边的我们一般不用修改,我们要改的是右边的Animation Options, Show Wire Voltage by Colour? 元件间的连接线的颜色会随电压变化 Show Wire Current with Arrows? 元件间的连接线上显示电流方向 15.- 这个例子最后的工作就保存文件了。

例2--基本电路:电池、可调电阻、直流电流表、直流电压表

1.- 新建一个文档

2.- 使用Pick Devices添加以下元件(方法见例1)

- BATTERY - LAMP - POT-LIN

这里介绍一个更快捷的方法,就是使用Pick Devices的搜索功能(前提是

你知道要找的元件的名字至少知道名字的前几个字母),该功能位于Pick Devices 对话框的左上角。 3.- 搭好以下电路

11

POT-LIN的电阻值设为200 BATTERY的电压值设为12

3.- 添加直流电流表和直流电压表

a.- 找到这个工具条,红色圈的那个就是INSTRUMENTS(仪表元件)了。

b.- 单击这个按钮,会在The Object Selector(元件列表框)列出所有仪表,其中的DC AMMETER和DC VOLTMETER是我们要用到的,选中DC AMMETER并在原理图的适当位置单击左键,这样DC AMMETER就被放置到原理图中了。同理放置DC VOLTMETER。最终电路:

12

c.- 设置DC AMMETER和DC VOLTMETER,DC AMMETER和DC VOLTMETER 不会根据电路的实际电流、电压值来自动改变量程(比如DC AMMETER 默认的单位是A,它能测量的最小电流值是0.01A,如实际电路的电流值为9mA,那它就显示为0.00A),需要手动修改。操作跟修改一般元件一样。

13

Display Range 有三个值A、mA、uA e.- 仿真结果。在仿真过程中,你可以点击可调电阻POT-LIN上方的两个红色箭头来调节电阻值,这时LAMP的亮度也随之改变,DC AMMETER和DC VOLTMETER的显示值也随之改变。注意到了没有?!这个图好像有点特别,对了!!它就是例1后面介绍Set Animation Options中选择Show Wire Voltage by Colour? 和Show Wire Current with Arrows?后的效果。

例子3--逻辑测试 添加以下元件:

A-INPUT = LOGICSTATE

B-INPUT = LOGICSTATE

Q-OUTPUT = LOGICPROBE(BIG) AND = AND

14

例4.- 使用ADC、示波器和仿真表格.

1.- 添加以下元件:

ADC0808 555 POT-LIN LED-BLUE 电阻 添加GROUND、POWER

单击红色的那个按钮,在元件列表中会有GROUND、POWER 添加示波器

单击绿色的那个按钮,在元件列表中会有OSCILLOSCOPE 添加仿真图表

15

单击蓝色的那个按钮,在元件列表中会有ANALOGUE 放置仿真图表的方法:

选中ANALOGUE后,在原理图中单击左键,并按住左键拖动,这是你会看到一个虚线方框,释放左键后就可以看到ANALOGUE了。 2. - 按照上图连接好元件

3. - 设置参数,这里主要介绍一下示波器和仿真表格的设置

a. 示波器设置,示波器需要运行仿真后才可以对其参数进行设计

它有两个输入通道,它的设置与真实数字示波器的差不多。左边黑色的方框用于显示波形,其中绿色的线条就是代表某一通道的波形,默认它只显示通道1的波形,要切换为通道2需要使用右上角的方形按钮,这个按钮有两种状态,一个是CH1另一个是CH2,你可以通过单击它实现通道间互相切换。这个按钮下方还有一个方形按钮,这个方形按钮有三种状态,一个是仅显示一个通道、一个是同时显示两个通道(Dual)、另一个是显示两个通道之差(X-Y)。明显,要实现通道间互相切换必须使这个按钮处于第一种状态。还要注意的是,如果同时显示两个通道的波形,还需要改变其中一个的Y-POS,因为默认它们的Y-POS是一样的,它们的波形会重叠在一起。

b.设置仿真图表,使用仿真图表前,我们要在需要观测的信号线上添加一个探针,有电压、电流两种探针

紫色的那两个就是探针了,本例使用电压探针,要观测的信号是555输出的波形,找到这条连接线,点击了电压探针符号后再在这条连接线的某一个位置上单击一下左键,这样就添加了一个电压探针,接着为这探针起个名字(A)(方法跟设置一般元件属性方法的类似)。现在要将这个电压探针跟仿真图表关联起来,菜单Graph中有一个叫Add Trace的子菜单,单击它会出现

16

由图可见,仿真图表可以连接四个探针,也就可以看到四个波形。本例我们只用一个探针,单击Probe P1下拉列表,你会看到(A),选中它后,单击OK就完成连接工作了。接着是配置仿真表格ANALOGUE,默认ANALOGUE的仿真时间是0S-1S,这个时间对本例来说实在太长了,我们需要0S-2mS就够了。还是菜单Graph,它里面有Edit Graph的子菜单,

在Stop time 中输入2m,单击OK完成。开始仿真ANALOGUE了,到菜单Graph,单击Simulate Graph,等待仿真完成后就会看到下图了

17

第三章 基于单片机的仿真例子

单片机电路设计

如图所示。电路的核心是单片机AT89C51。单片机的P1口八个引脚接LED显示器的段选码(a、b、c、d、e、f、g、dp)的引脚上,单片机的P2口六个引脚接LED显示器的位选码(1、2、3、4、5、6)的引脚上,电阻起限流作用,总线使电路图变得简洁。 程序设计

实现LED显示器的选通并显示字符。

18

电路图的绘制

1、将所需元器件加入到对象选择器窗口。Picking Components into the Schematic 单击对象选择器按钮,如图所示

弹出“Pick Devices”页面,在“Keywords”输入AT89C51,系统在对象库中进行搜索查找,并将搜索结果显示在“Results”中,如图所示。

19

在“Results”栏中的列表项中,双击“AT89C51”,则可将“AT89C51”添加至对象选择器窗口。

接着在“Keywords”栏中重新输入7SEG,如图所示。双击“7SEG-MPX6-CA-BLUE”,则可将“7SEG-MPX6-CA-BLUE”(6位共阳7段LED显示器)添加至对象选择器窗口。

20

最后,在“Keywords”栏中重新输入RES,选中“Match Whole Words”,如图所示。在“Results”栏中获得与RES完全匹配的搜索结果。双击“RES”,则可将“RES”(电阻)添加至对象选择器窗口。单击“OK”按钮,结束对象选择。

经过以上操作,在对象选择器窗口中,已有了7SEG-MPX6-CA-BLUE、AT89C51、RES三个元器件对象,若单击AT89C51,在预览窗口中,见到AT89C51的实物图,如图所示;若单击RES或7SEG-MPX6-CA-BLUE,在预览窗口中,见到RES和7SEG-MPX6-CA-BLUE的实物图,如图所示。此时,我们已注意到在绘图工具栏中的元器件按钮

处于选中状态。

21

2、放置元器件至图形编辑窗口Placing Components onto the Schematic

在对象选择器窗口中,选中7SEG-MPX6-CA-BLUE,将鼠标置于图形编辑窗口该对象的欲放位置、单击鼠标左键,该对象被完成放置。同理,将AT89C51和RES放置到图形编辑窗口中。如图所示。

若对象位置需要移动,将鼠标移到该对象上,单击鼠标右键,此时我们已经注意到,该对象的颜色已变至红色,表明该对象已被选中,按下鼠标左键,拖动鼠标,将对象移至新位置后,松开鼠标,完成移动操作。

22

由于电阻R1~R8的型号和电阻值均相同,因此可利用复制功能作图。将鼠标移到R1,单击鼠标右键,选中R1,在标准工具栏中,单击复制按钮我们已经注意到,电阻名的标识,系统自动加以区分。 3、放置总线至图形编辑窗口

单击绘图工具栏中的总线按钮

,使之处于选中状态。将鼠标置于图形编辑窗口,

单击鼠标左键,确定总线的起始位置;移动鼠标,屏幕出现粉红色细直线,找到总线的终了位置,单击鼠标左键,再单击鼠标右键,以表示确认并结束画总线操作。此后,粉红色细直线被蓝色的粗直线所替代,如图所示。

,拖动鼠标,按

下鼠标左键,将对象复制到新位置,如此反复,直到按下鼠标右键,结束复制。此时

4、元器件之间的连线Wiring Up Components on the Schematic

23

Proteus的智能化可以在你想要画线的时候进行自动检测。下面,我们来操作将电阻R1的右端连接到LED显示器的A端。当鼠标的指针靠近R1右端的连接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了R1的连接点,单击鼠标左键,移动鼠标(不用拖动鼠标),将鼠标的指针靠近LED显示器的A端的连接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了LED显示器的连接点,同时屏幕上出现了粉红色的连接,单击鼠标左键,粉红色的连接线变成了深绿色,同时,线形由直线自动变成了90o的折线,这是因为我们选中了线路自动路径功能。

Proteus具有线路自动路径功能(简称WAR),当选中两个连接点后,WAR将选择一个合适的路径连线。WAR可通过使用标准工具栏里的“WAR”命令按钮或打开,也可以在菜单栏的“Tools”下找到这个图标。

同理,我们可以完成其它连线。在此过程的任何时刻,都可以按ESC键或者单击鼠标的右键来放弃画线。

来关闭

24

5、元器件与总线的连线

画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可,如图所示。 6、给与总线连接的导线贴标签PART LABELS

单击绘图工具栏中的导线标签按钮

,使之处于选中状态。将鼠标置于图形编辑

窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,如图所示。

表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图所示。 在“string”栏中,输入标签名称(如a),单击“OK”按钮,结束对该导线的标签标定。同理,可以标注其它导线的标签,如图所示。注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。

25

至此,完成了整个电路图的绘制。

Keil C与Proteus连接调试

1、假若KeilC与Proteus均已正确安装在C:\\Program Files的目录里; 2、安装Keil C与Proteus的连接插件vdmagdi.exe;

3、进入KeilC μVision2开发集成环境,创建一个新项目(Project),并为该项目选定合适的单片机CPU器件(如:Atmel公司的AT89C51)。并为该项目加入KeilC源程序。

源程序如下: #define LEDS 6 #include \//led灯选通信号

unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char code LED_CODES[]= { 0xc0,0xF9,0xA4,0xB0,0x99,//0-4 0x92,0x82,0xF8,0x80,0x90,//5-9 0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E 0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- }; void main() {

char i=0; long int j; while(1) {

26

P2=0;

P1=LED_CODES[i]; P2=Select[i];

for(j=3000;j>0;j--); //该LED模型靠脉冲点亮,第i位靠脉冲点亮后,会

自动熄来头。

//修改循环次数,改变点亮下一位之前的延时,可得到不同的显示效果。

i++;

if(i>5) i=0; } }

4、单击“Project菜单/Options for Target”选项或者点击工具栏的“option for ta rget”按钮

,弹出窗口,点击“Debug”按钮,出现如图所示页面。

在出现的对话框里在右栏上部的下拉菜单里选中“Proteus VSM Driver”。并且还要点击一下“Use”前面表明选中的小圆点。

再点击“Setting”按钮,设置通信接口,在“Host”后面添上“127.0.0.1”,如果使用的不是同一台电脑,则需要在这里添上另一台电脑的IP地址(另一台电脑也应安装Proteus)。在“Port”后面添加“8000”。设置好的情形如图所示,点击“OK”按钮即可。最后将工程编译,进入调试状态,并运行。

27

5、Proteus的设置

进入Proteus的ISIS,鼠标左键点击菜单“Debug”, 选中“use romote debuger monitor”,如图所示。此后,便可实现KeilC与Proteus连接调试。

6、KeilC与Proteus连接仿真调试 单击仿真运行开始按钮,我们能清楚地观察到每一个引脚的电频变化,红色代表高电频,蓝色代表低电频。在LED显示器上,循环显示0、1、2、3、4、5。

28

第四章 用ISIS和ARES设计PCB

1.在ISIS中完成原理图

元件: 1N4148 BC547 CAP-ELEC 3EZ8V2D5 3EZ5V1D5 RES

CONN-D9 PIC16F877

加入POWER和 GROUND, PIC16F877有两个隐藏的引脚VDD和VSS,因此必须将POWER的string属性设为VDD, GROUND的string属性设为VSS。

2.修改封装,在ISIS中添加元件时,已经自动为该元件配置了一个封装(有部分

29

元件要手动添加封装)。但这个封装并不一定很适合你的设计,因此你需要重新添加合适的封装。下面以CAP-ELEC为例说明。 打开CAP-ELEC的属性对话框

单击?的按钮,打开封装选择对话框(前提是你已经安装了ARES)

选择一个合适的,单击OK完成。

调整好所有元件的封装后,到菜单Tools -> Netlist Compiler,接着打开Netlist

30

Compiler设置对话框,上面的设置保持默认就行了,单击OK生成网表文件。紧接的工作就是将网表文件导入到ARES。到菜单Tools -> Netlist to ARES,这样就会打开ARES(你也可以利用工具栏的相应按钮来完成这一操作)。 下面是ARES工作界面

可以看到右边的工作区是空的,而我们要使用的全部被放在左边的元件列表中。在放置元件前,我们必须要画一个版框,之后所有的元件将在版框内布线。我们用2D Graphics Box 工具绘制版框,

绘制前,我们要先给它设置颜色,因为这个是边框,所以我们应该选黄色(Board Edge),该设置工具位于主窗口底部。

31

在工作区点击后,按住左键不放,拖出一个适当大小的矩形,释放左键,我们就绘制好了版框。如果以后想修改这个版框,你需要再次单击2D Graphics Box中的矩形符号,在版框的边框上单击右键,这是会出现控制点,拖动控制点就可以调整版框的大小了。

我们要通过单击如下图标回到元件放置视图

接着我们要把元件放到版框内,为了得到一个合适的显示比例,我们按一下F8将得到下面的效果(这一步不是必需的)。

我们开始放置元件了。在使用自动放置所有元件这一个工具前,我们最好把具有标志性的元件先手工放置,比如本例的串口连接头J1。

先在元件列表中选中J1,把它放到版框内(方法跟ISIS中放置元件的一样),效果如下图:

32

放置其他元件,我们要使用自动放置所有元件这个工具,这个工具的位置见下图:

打开下面对话框,在这里我们不修改上面的设置,单击OK

得到下面的效果

33

我们把元件放整齐点,效果如下:

下面我们开始布线,找到下图的图标

34

单击它,打开下面对话框

单击Set Strategies按钮,设置布线策略(规则),打开下图所示对话框,我们按照下图分别设置Power和SIGNAL,(单面板,线宽T30)

自动布线的效果

35

接下来,我们手工调整连接线,并添加4个定位孔。要手工调整连接线需要单击下图所示的图标,这样那些连接线就可以被修改了。

修改时,记得通过主窗口底部的层切换列表来切换到你想编辑的那一层!!稍微修改后的效果。

36

添加4个焊盘,单击如下图标

在列表中选一个合适的

最终效果

37

38

第五章 基于51单片机的数字钟的设计

任 务 书

一、 任务

设计一款电子钟。

二、 设计要求

(一)合格要求:用PROTEUS画出原理图和PCB图,并完成下列任务:

⑴ 用4只LED数码管输出显示时和分。

⑵ 可通过按键设置闹钟功能,且停闹无须手工操作。 ⑶ 可通过按键设置分校时。 (4) 写出详细的设计报告。

(5) 给出电路的原理图、PCB图和源程序。

(二)优秀要求:根据PCB图制作PCB板,并焊接元件调试

39

数字电子钟

目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。要知道当前的时间,必须先开灯,故较为不便。现在市场上也出现了一些电子钟,它以六只LED数码管来显示时分秒,与传统的以指针显示秒的方式不同,违背了人们传统的习惯与理念,而且这类电子钟一般是采用大型显示器件,适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:时间误差。针对以上存在的问题,我们设计了一款采用LED显示器件显示的电子时钟,有效克服了时钟存在的误差问题。

1 系统主要功能

电子钟的主要功能有:整点报时;四只LED数码管显示当前时分;并且具有闹钟功能。

2 系统的硬件构成及功能

电脑钟的原理框图如图1所示。它由以下几个部件组成:单片机89C2051、电源、时分显示部件。

时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块以及显示驱动都通过89C2051的I/O口控制。

电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作。

40

图1 电子钟系统原理框图

2.1 AT89C2051单片机及其引脚说明

AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。

AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。

41

图2 AT89C2051引脚配置

AT89C2051芯片的20个引脚功能为: VCC 电源电压。 GND 接地。

RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。

XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2 来自反向振荡放大器的输出。 P1口 8位双向I/O口。引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。

P3口 引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。 2.2 时分显示部件

由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图7所示。

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极

42

管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。

图3 LED数码管结构原理图

众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表1。

表1 各段码位的对应关系

段码位 显示段 D7 dp D6 g D5 f D4 e D3 d D2 c D1 b D0 a 需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,??D7位与dp段连接,如表1所示,表2为用于LED数码管显示的十六进制数和空白字符与P的显示段码。

表2 LED显示段码

字型 0 共阳极段C0H 共阴极段3FH 字型 9 共阳极段90H 共阴极段6FH 43

1 2 3 4 5 6 7 8 F9H A4H BOH 99H 92H 82H F8H 80H 06H 5BH 4FH 66H 6DH 7DH 07H 7FH A B C D E F 空白 P 88H 83H C6H A1H 86H 84H FFH 8CH 77H 7CH 39H 5EH 79H 71H 00H 73H 注:(1)本表所列各字符的显示段码均为小数点不亮的情况。 (2)“空白”字符即没有任何显示。

根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当P0口输出的段码为1100 0000,数码管显示的字符为0。

数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。 为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。

系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。

3 系统的软件构成及功能

44

本系统的软件系统主要可分为主程序和定时器中断程序两大模块。在程序过程中,加入了抗干扰措施。下面对部分模块作介绍。 3.1 系统主程序设计

主程序的功能是完成系统的初始化,程序流程如图4所示。 3.2 中断程序设计

中断程序(如图5所示)完成时间计数,时间调整,误差消除等功能。中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms×8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。

图4 系统主程序流程图

45

图5 定时中断程序

4 结束语

上述电子钟,无论在外观上还是功能上都实现了较为完善的设计。特别值得一提的是本系统在精度上的设计,突破传统的方法,对可能产生的积累误差采用“抵消法”,从而有效地降低了时间误差。

由于计数时产生的积累误差所导致的时间误差,是所有的电子计时系统共同存在的问题。但在目前市场上的电子时钟产品,如计算机中的时钟,手机中的时钟等并没有有效的采取消除误差的措施。本系统设计的消除积累误差来减少时间误差的软件方法,并不需要任何的硬件,因此在不增加成本的情况下,可以普遍用于所有的电子时钟产品。

46

电子钟基本部分参考电路原理图

P17P10P11P12P13P14P15P16R11kR21KR31KR41KR51KR61KR71KR78R15R8200200R9200R10200R11200R12200R13200R1420001+5V1K0111711PP2345671PP23456PP111111PPP11111PPPPPPPPPPPPPPPPPPPPPPPMMMOOOCC7S3C7S3P10AP10AP11BP11BHP17P10AP12CP12CGP16P11BC1P13DP13DFP12P12CU1P14EP14EEP11P13DPP10P15FP15FDP10P14E5XTAL1P1.012CP15P15F22pC2X1P1.113PP11P16GP16GPP12HP17HBP14P16GCRYSTAL14AP13H4P1.2XTAL2P1.315PP13P1.416PP14C322pP1.517PP15S17S2EI7S4E1IGHMRSTP1.618PP16S1GHHOVS7S2SMC7S4M5P1.719PP17H+MSHI622uMGE7P3.2/INT0R168P3.3/INT19P3.4/T011k11P3.5/T1P3.0/RXD2HSHIP3.7P3.1/TXD3HGEAT89C2051Q1R172002N5401BUZ1BUZZER

47

电子钟基本部分参考PCB图

48

电子钟基本部分参考电路器件清单

名称 数量 备注 AT89C2051 1 按扭 3 4插脚 晶振 1 6MHZ LED数码管 4 共阴 蜂鸣器 1 5V 电容 2 30pf 电容 3 104 电容 2 22uF 三极管 5 9012或5401(PNP) 电阻 4.7K 10 电阻 200 10 线路板 不定 64×77mm 主要设备:

① 单片机仿真器(带AT89C2051仿真头) ② 焊接实验工具箱一套 ③ 5V电源 ④ 制板设备

49

本文来源:https://www.bwwdw.com/article/oi9o.html

Top