基于AT89S52的数字式秒表单片机课程设计

版权申诉
0 下载量 93 浏览量 更新于2024-07-01 收藏 733KB DOC 举报
本篇文档是关于单片机技术课程设计的一份详细说明书,主要针对的是数字式秒表的设计。设计者是一名电气与信息工程系的学生,使用AT89S52单片机作为核心,构建了一个最小系统,包括振荡电路、复位电路、程序下载接口等硬件组件。该秒表具备以下关键特性: 1. **硬件构成**:硬件电路主要由以下几个部分组成: - **AT89S52单片机最小系统**:这是整个设计的基础,负责处理控制和计算任务。 - **七段数码管动态显示电路**:用于实时显示计时的八位数字,动态变化以指示不同时间。 - **控制电路**:允许用户控制秒表的启动、暂停和查询计时,至少可进行十次计时。 2. **功能特点**: - 八位数码显示:清晰易读,便于用户查看。 - 多次计时功能:能够连续进行计时操作。 - 控制功能:用户可以控制计时的开始和暂停,增加了交互性。 3. **设计流程**: - **总体设计方案**:首先介绍设计课题的任务和目标,然后进行系统分析,确定方案设计的原则和论证其可行性。 - **硬件设计**:详述了各种关键电路的设计,如控制芯片的选择(AT89S52)、单片机最小系统的建立(振荡电路确保稳定工作,复位电路恢复初始状态,程序下载电路便于调试)。 - **电源电路设计**:确保系统稳定供电。 - **显示电路设计**:重点讲述如何通过数码管实现时间的动态显示。 - **控制电路设计**:设计电路实现计时的控制功能。 - **电路布局**:给出了整体电路的布局和元件清单。 4. **软件设计**: - **程序设计思路**:这部分阐述了如何利用AT89S52的指令集编写程序,实现秒表的功能逻辑,包括计时的初始化、计数器管理以及控制信号的处理。 这份文档提供了一个深入理解单片机应用于数字秒表设计的具体实例,涵盖了硬件选型、电路设计和软件编程的关键要素,对于学习和实践单片机应用的学生具有很高的参考价值。
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