51单片机秒表系统设计与实现

0 下载量 195 浏览量 更新于2024-06-24 收藏 566KB DOC 举报
"单片机秒表课程设计文档主要涵盖了基于51单片机的秒表系统的详细设计,包括硬件和软件部分。" 在此次课程设计中,学生使用了AT89C51这款单片机,它是一款低功耗、高性能的8位微处理器,拥有4KB的Flash内存,128B的RAM,32个I/O口,2个16位定时计数器,以及5个中断源。设计的主要目标是构建一个能够执行启动、暂停和复位功能的两路秒表,同时利用LED数码管进行时间显示。 系统设计包含了以下几个关键部分: 1. **时钟电路**:时钟电路是单片机运行的基础,本设计选择了内部时钟方式,简化了系统结构。内部时钟通常由振荡器产生,为单片机提供稳定的工作频率。 2. **按钮电路**:设计了两个按键,k1用于启动和暂停秒表,k2用于复位。此外,还有一个单独的复位键,可以对整个系统进行复位。 3. **显示电路**:使用LED数码管进行时间显示。为了节省硬件资源和降低复杂性,采用了动态显示技术,即通过轮流点亮数码管的不同段来显示数字,降低了硬件成本。 4. **中断系统**:80C51单片机的中断系统用于处理按键输入和其他实时事件。设计中可能涉及定时/计数器的中断,以便在特定时间间隔或事件发生时暂停或恢复计时。 5. **定时/计数器**:定时/计数器在秒表中起到核心作用,可以设定计时周期,用于精确地测量时间。 6. **单片机**:AT89C51作为整个系统的核心,负责处理所有输入和输出,控制时钟、计数器、中断,并与显示电路通信,更新LED显示的时间。 7. **MAX7219**:这是一种常见的LED驱动芯片,用于控制数码管的段驱动和位驱动,简化了与LED数码管的接口。 设计完成后,学生需要编写源程序,这部分未在摘要中给出,但通常会包括初始化设置、中断服务子程序、计时算法以及用户交互逻辑等。 最后,设计者还应该总结设计过程中的学习和体验,提出可能的改进方案,并列出参考文献以供进一步研究。这样的课程设计旨在提升学生对单片机系统设计、硬件连接以及嵌入式编程的理解和实践能力。
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