AT89C51单片机实现的数字秒表设计

版权申诉
0 下载量 184 浏览量 更新于2024-06-25 收藏 9.32MB DOC 举报
"本课程设计的数字电子秒表系统利用AT89C51单片机,结合定时器/计数器、LED数码管和外部中断电路,实现0~99.99秒的精确计时,并具备暂停和开始功能。软件部分采用C语言编程,包括显示、定时中断、外部中断及延时等程序。硬件部分通过PROTEUS进行仿真,便于观察系统工作状态。关键词:AT89C51单片机;数字秒表;数码管" 在基于单片机的秒表设计中,AT89C51是一款广泛应用的微控制器,它集成了CPU、RAM、ROM、定时器/计数器和I/O端口等多种功能,非常适合于小型电子设备的开发。在这个课程设计中,AT89C51作为核心处理器,负责处理所有的计时和控制任务。 定时器/计数器是AT89C51中的关键组件,它能够根据预设的时间间隔触发中断,实现定时功能。在这个秒表系统中,定时器被设置为工作在模式1或模式2,以提供所需的高精度定时。通过设定适当的计数初值,定时器可以在每个机器周期后自动递增,当达到预设值时,触发中断,从而实现秒表的计时更新。 LED数码管用于显示时间,通常由7段组成,可以显示0-9的数字。在这里,五位LED数码管用于显示0~99.99秒的时间。为了使数字流畅地滚动和更新,需要编写专门的显示程序,控制单片机的I/O端口驱动数码管的各个段,实现动态扫描显示,提高显示效率。 外部中断电路则提供了暂停和开始计时的功能。当外部中断信号触发时,单片机会中断当前的任务,执行中断服务子程序,改变计时状态。例如,通过一个按钮开关连接到单片机的中断输入引脚,当用户按下按钮时,中断请求产生,单片机暂停计时;再次按下,计时恢复。 软件系统主要由C语言编写,包括以下几部分: 1. 显示程序:这部分代码负责控制数码管显示时间,根据当前计时值更新数码管的显示内容。 2. 定时中断服务程序:在定时器溢出中断发生时,更新计时值并重新装载定时器初值,以继续计时。 3. 外部中断服务程序:响应外部中断,处理暂停和开始计时的逻辑。 4. 延时程序:在某些操作如按键检测或数码管显示切换时,可能需要短暂的延时,这部分代码实现了这种功能。 硬件仿真工具PROTEUS则为设计者提供了便利,它允许在虚拟环境中模拟硬件电路,测试和调试软件代码,无需实际搭建硬件电路,极大地提高了设计效率和准确性。通过PROTEUS,可以实时观察系统的工作状态,如数码管的显示、中断的触发等,有助于找出并修复问题。 这个基于单片机的秒表设计是一个综合性的项目,涵盖了单片机原理、中断系统、定时器应用、显示技术以及软件编程等多个方面,对于学习和掌握单片机系统的开发具有很高的实践价值。
2023-02-27 上传
摘要 本设计的数字电子秒表系统采用AT89S52单片机为中心器件,利用其定时器/计数器定 时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬 件有机地结合起来,使得系统能够实现LED显示,显示时间为0~99秒,计时精度为1秒, 能正确地进行计时。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务, 外部中断服务程序,延时程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功 能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。 关键词: 电子秒表;AT89S52单片机;C语言 目录 摘要 I 1 系统原理介绍 1 1.1设计任务及功能要求说明 1 1.2数字式秒表的方案介绍及工作原理说明 1 2数字式秒表硬件系统的设计 3 2.1数字式秒表硬件系统各模块功能简要介绍 3 2.1.1 AT89S52简介 3 2.1.2时钟电路 3 2.1.3键盘电路 4 2.1.4复位电路 4 2.2 数字式秒表的硬件系统设计图 5 3 数字式秒表软件系统的设计 6 3.1 数字式秒表使用单片机资源情况 6 3.2 主程序流程图 6 3.3中断服务程序流程图 7 3.4显示程序流程图 8 3.5软件系统程序清单 8 按照流程图应用软件keil汇编语言编程实现秒表功能。程序见附录3。 8 4 系统调试与仿真 9 4.1 数字式秒表的设计结论及使用说明 9 4.2 调试软件介绍 9 4.3 程序仿真与结果 9 4.4 误差分析及解决方法 10 总结 11 参考文献 12 致 谢 13 附录1:系统原理图 14 附录2:程序清单 15 1 系统原理介绍 1.1设计任务及功能要求说明 由单片机接收小键盘控制递增计时,由LED 显示模块计时时间,显示格式为 XX(分):XX(秒).XX,精确到0.01s的整数倍。绘制系统硬件接线图,并进行系统仿 真和实验。画出程序流程图并编写程序实现系统功能。 使用单片机AT89S52作为主要控制芯片,以四位一体共阳极数码显示管通过三极管驱动作 为显示部分,设计一个具有特定功能的数字式秒表。该数字式秒表上电或按键复位后能 自动显示系统提示符"P.",进入准备工作状态。该数字式秒表通过按键控制可实现开始 计时、暂停计时、连续计时、清零和停止功能。 1.2数字式秒表的方案介绍及工作原理说明 使用AT89S52单片机作为核心控制部件,采用12M晶体振荡器及微小电容构成振荡电路; 采用S8550作为数码管的驱动部分;用两个四位一体共阳极或共阴极数码显示管作为显示 部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的复位、计 时、连续、清零、停止各项功能。 对于时钟,它有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主 要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统 的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机 内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合; 二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。 LED数码显示器有如下两种连接方法:共阳极接法:把发光二极管的阳极连在一起构成公 共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。共阴极 接法:把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二 极管的阳极通过电阻与输入端相连。 键盘部分方案:键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P1口 相连,在按键和P1口之间通过10K电阻与+5V电源相连。键盘通过检测输入线的电平状态 就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较 适合按键较少或操作速度较高的场合,这种独立式接口的应用很普遍。 显示部分方案:显示部分采用动态显示。数码管动态显示接口是单片机中应用最为广泛 的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同 名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立 的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那 个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要 显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过 分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。 动态显示是利用人眼视觉暂留特性来实现显示的。事实上,显示器上任何时刻只有一个 数码管有显示。由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来, 因此看到的是连续显示的
2023-02-27 上传
课程设计报告 课程名称:单片机原理与接口技术课程设计 设计题目:秒表的设计 院 系:机电工程学院 班 级: 姓 名: 学 号: 指导教师: 设计时间:2011年12月10日 一 设计方案描述 通过软件计时实现秒表功能。该秒表程序可通过按键实现暂停/开始计时功能,每6 0秒进1,可以复位。 二 选定方案的论证及整体电路的工作原理 提示:画出你的系统原理图,可参考桌面的单片机指导书中内容。 指 运算器 输入 输出 程 令 ALU 数据存储器 数据 设备 序 寄 RAM I O 计 存 数 程序存储器 器 控制器 器 EPROM IR ID 工作原理: 编写秒表程序,使其通过I/O口的输出在数码管上显示秒表的计时情况,通过定义I /O口的输入与中断程序级按键程序实现INT中断功能和控制秒表的"停"与"走"。 三 系统资源分配表(地址分配表) " " " "寄存器 "地址 " "W_TEMP "71H " "STATUS_TEMP "72H " "INTCON "0BH " "STATUS "03H " "PORTD "08H " "PORTB "06H " "TRISD "88H " "TRISB "86H " 四 程序流程框图 五 源程序清单 list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_ON & _CPD_OFF ;***** VARIABLE DEFINITIONS w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving ;********************************************************************** ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto MAIN ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS, w ; move status register into W register movwf status_temp ; save off contents of STATUS register BCF INTCON, INTF INCF 53H ; isr code can go here or be located as a call subroutine elsewhere movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp, f Swapf w_temp, w ; restore pre-isr W register contents retfie ; return from interrupt MAIN ; remaining code goes here ABB EQU 63H ABC EQU 62H COUNTER EQU 66H MOVLW .000 MOVWF 60H MOVLW 00H MOVWF 43H MOVLW B'10010000' MOVWF INTCON CLRF 53H LOOP1 MOVF 60H, W MOVWF ABC MOVLW 0FFH MOVWF 20H LOOP BSF STATUS, RP0 CLRF TRISD CLRF TRISB BCF STATUS, RP0 MOVLW 0DFH MOVWF PORTB MOVF 43H, W CALL CHAIBIAO MOVWF PORTD CALL DELAY MOVLW 0F7H MOVWF PORTB MOVF ABC, W MOVWF 61H MOVLW 00H MOVWF ABB QS MOVLW .100 SUBWF 61H INCF