基于STC89C52RC的电子秒表

发布时间:
来源: 电子工程世界

1 设计题目

  • 设计一个电子秒表

2 设计目的

  • 巩固模拟和数字电子技术基础知识,学习51单片机,并用其设计电子产品。

  • 掌握熟悉产品开发的调试方法,增强工程实践能力和综合分析问题的能力。

3 设计内容及要求

  • 学习51单片机内部资源,要求熟练掌握单片机I/O口,定时器和中断系统的使用。其主要学习以下内容:

中央处理器
存储器组织
片内并行接口
8051的芯片引脚
中断
定时器/计数器(T/C)
  • 设计电子秒表,用51单片机STC89C52设计控制电路,用4位数码管显示,能从00.00秒计时到99.99秒。

秒表计数器元器件选型
秒表计数器单片机控制电路设计
软件流程框图绘制、应用程序编制,仿真调试
电路原理图绘制
电路板设计与制作焊接
下载程序调试

4 设计过程

  • 总体设计

此次电子秒表设计包括: 单片机为STC89C52RC,晶振电路由12MHz晶振和电容构成,复位电路由按键、电容限流电阻构成,按键电路由按键、上拉电阻构成,数码管显示电路由8段共阳数码管构成。其电路总设计框图如下:


  • 关键元件选取

STC89C52RC
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统的51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作 1、数据存储器(RAM):片内为128B(52子系列为256B),片外最多可扩64KB。片内128B的RAM以高速RAM的形式集成,可加快单片机运行的速度和降低功耗 2、程序存储器(Flash ROM):片内集成有8KB的Flash存储器,如片内容量不够,片外可外扩至64KB 3、中断系统:具有6个中断源,2级中断优先权 4、定时器/计数器:2个16位定时器/计数器(52子系列有3个),4种工作方式 5、看门狗定时器WDT:当CPU由于干扰使程序陷入死循环或跑飞时,WDT可使程序恢复正常运行 关键引脚 RESET:复位信号输入,在引脚加上持续时间大于2个机器周期的高电平,可使单片机复位。正常工作,此脚电平应 ≤ 0.5V。当看门狗定时器溢出输出时,该脚将输出长达96个时钟振荡周期的高电平 (EA) ̅:1,读取内部存储器。0,读取外部存储器 ALE:为CPU访问外部程序存储器或外部数据存储器提供地址锁存信号,将低8位地址锁存在片外的地址锁存器中

PNP型三极管
三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种电流控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开关。晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有PNP和NPN两种。PNP型三极管,是由2块P型半导体中间夹着1块N型半导体所组成的三极管,所以称为PNP型三极管 E端高电压的时候,当B端也是高电压,那么E和C之间是断开的;当B端是低电压,那么E和C直接导通,实现开关的作用

8段共阳数码管
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,3、8脚在内部是短路的,只需选其一即可。当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮


  • 具体电路设计,基于Altium Designer 20

晶振模块
晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生谐波(也就是不希望存在的其他频率的波)这个波对电路的影响不大,但会降低电路的时钟振荡器的稳定性,为了电路的稳定性起见 ATMEL公司只是建议在晶振的两引脚处接入两个10pf-50pf的瓷片电容接地来削减谐波对电路的稳定性的影响,所以晶振所配的电容在10pf-50pf之间都可以的

单片机复位模块
复位电路工作原理如上所示,VCC上电时,使极性电容C充电,在200欧电阻上出现高电位电压,使得单片机复位;几个毫秒后,C充满,200欧电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S1,C放电,放电结束后,又充电,在200电阻上出现高电压,使得单片机进入复位状态,直到S1松手,C又充电完毕,随后,单片机进入工作状态

三极管开关放大模块
如上图,PNP型三极管作为电子开关,当基级b为低电平,三极管集电极c和发射极e打通,集电极c为高电平,使数码管使能;当基级b为高电平,三极管集电极c和发射极e断开,集电极c为低电平,使数码管消隐。三极管处于放大区时,I_c=βI_b,将单片机IO口的微弱电流放大,驱动数码管

数码管电路
STC89C52RC的P2口作为驱动8段数码管的引脚,分别控制段码a,b,c,d,e,f,g,h。当IO为低电平,则对应段码亮起;当IO为高电平,则对应段码熄灭

按键模块
按键模块如上图所示,上拉电阻在上电时默认将按键右端置为高电平。一旦按键按下,电阻下方为低电平并传给STC89C52对应引脚

  • 程序设计

此次的程序设计由C语言实现。定义了8个自定义函数,2个全局变量,它们分别为:
1、my_info() 启动时用来显示自己的个人信息函数
2、T0_initial() 定时器0初始化函数
3、INT_initial() 外部中断初始化函数
4、key_check() 按键检测函数
5、display_num(char num,char spot) 显示函数
6、seg_enable(char i) 控制数码管的使能函数
7、display_time() 数码管显示函数
8、delay() 4ms延时函数
9、count 控制计数,初始化0
10、flag 检测按键,按键的标志位,初始化0
以下是本次程序设计的流程图,分为主函数执行流程图和中断函数执行流程图:

定时器0中断流程图

外部中断INT0中断流程图

外部中断INT1中断流程图

主函数执行流程图

此次设计的时99.99秒表,精度为0.01s=10ms,所以需让定时器0每0.01s进入一次中断,执行count++并且重新给计数器赋初值。根据51单片机外部12MHz晶振自定义进入中断的时间公式 (2^16-X)*10^(-6)=自定义进入中断时间,计算可得X=55536,转换成16进制为(55536)_D=(D8F0)_H,将D8赋值给高八位TH0,将F0赋值给低八位TL0。

5 仿真过程,Proteus 8 与 Keil 联动

启用Enable Remote

激活uVersion4中的Proteus选项

编译工程

启动调试

全速运行


6 制作与实现

  • 元件的购买与焊接

元件的取材与焊接
以下是此次温度测量放大电路焊接所需要元器件

元件采购清单

  • 系统调试

此次课程设计利用的是人眼的滞留效应,又由于STC89C52的IO口有限,需将每个数码管依次延时5ms。由于我对汇编语言的理解不是很深,不清楚延时语句delay到底执行的时间,我想到在delay语句中写入引脚电平取反,这样一来一定会生成周期固定的PWM波。系统上电,借助示波器观察引脚的波形,发现是周期为8ms,占空比为50%的PWM波,即延时程序延时了4ms,符合要求。其他示数一切正常。

7 遇到的问题与解决方法

  • 单片机复位电路未接Vcc

由于复位电路没有接Vcc,系统启动时Reset引脚始终为低电平,在运行过程中按下按键没有反应。之后接上VCC后,复位电路模块正常工作,系统能够正常复位

8 心得体会

我始终认为电子信息工程是一个非常有潜力的专业,并且我对该专业充满了浓厚的兴趣。虽然说专业课让我学得喘不过气来,难度颇大,但我相信这只是一个阶段性的过渡期
属于工科的电子信息工程需要我有缜密的分析思维,强大的动手能力和学习能力,这些素养还需后期慢慢培养。时光荏苒,如今我已是一名大三的人了,在大学度过的两年里,我收获了许许多多宝贵的经验,积累了一定的专业知识与素养,回首看看两年前的自己,我发现自己已不再是刚进大学的是那个对专业一无所知的小白了。我清楚地知道目前我学到的只是专业的冰山一角,剩下的还需要我跟随老师的脚步,课外自己慢慢摸索
此次的电子秒表运用到了很多之前专业课的知识,尤其是数字电子技术,模拟电子技术。落实到具体的课程设计我才恍然大悟专业知识并不是白学的,原来是这么运用的,也难怪很久以前专业课老师每次上课都会给我们埋下伏笔。以前自己还没有这么深的感触,但越到后来的专业课程设计我渐渐感觉到专业课知识起到对课程设计的支配与指导作用
2年下来,算算做过的课程实验加课程设计大概有30个左右,之前都是老师带着我们做着课程设计与实验。现在我逐渐摸清了要想做出一个能实现具体功能的成品需要哪几个步骤,常用哪几个模块,怎么把这几个模块联系起来。以我现在的能力,我能够自己设计出能够实现简易功能的成品,当然是建立在查阅资料的基础上。以我自己现在的知识储备量,我知道做出某种功能的成品,电路中运放(OP07逃不掉)是一定要用到的,运放电路常有电压比较器、差分比例放大电路(需要两个输入信号)、同向比例运算电路(其中一个特例可实现电压跟随器);有运放就会涉及到正负供电,供电的话就需要电源模块,电源模块有两类,恒流源和恒压源
我相信之后我还会遇到更大的困难,更大的挑战,不过本身也不就是一路解决问题,克服困难,提升自我的过程么。未来是未知的,我只有不断进步,不断去适应困苦的环境,才能超越自我,达到新的高度
感谢一路上帮助过我的同学和老师


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。