基于单片机的电子跑表设计

合集下载

单片机实现电子计时跑表的设计实验报告

单片机实现电子计时跑表的设计实验报告
单片机实现电子计时跑表的设计报告
一、设计要求: 1、 能显示分、秒、1/100 秒,显示器用七段数码管(也可选
LCD) 2、 具有清零、计时、冻结功能,功能转换用一位非锁紧按
键开关。 3、 CPU 选用 89C51/MSP430,定时器芯片自选,也可用 CPU
内部的定时器。 4、 先写设计报告(要有仿真结果) 5、 编程语言可用 51 汇编/51C。 6、 焊接、调试、做出实物(也可制作 PCB) 7、 调试,误差分析,并补充到设计报告中。 二、方案设计:
D
1 0 1 1 1 1 0 5EH
A1H
E
1 1 1 1 0 0 1 79H
86H
F
1 1 1 0 0 0 1 71H
8EH
(4) 单片机的选择
根据初步设计方案的分析,设计这样一个简单的应用系 统,可以选择带有 EPROM 的单片机,应用程序直接存储 在片内,不用在外部扩展程序存储器,电路可以简化。 本系统选用 AT89C51 单片机。该芯片的功能与 MCS-51 系列单片机完全兼容。
INIT: CLR 00H MOV P3,#0FFH MOV P2,#00H MOV P0,#3FH MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB EA SETB ET0 SETB TR0 MOV DPTR,#TAB MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MOV 35H,#00H RET ;/////////////显示子程序
仿真图:

秒位增 1
增到 60?

分位增 1
增到 100?

单片机课程设计电子跑表

单片机课程设计电子跑表

电子跑表一.个人任务在本次课程设计中,本人负责跑表的C语言程序编程部份和开发板调试。

另一人负责proteus仿真。

二.设计要求以51开发板为核心设计一个多功能电子表。

利用AT89C52作为主控器组成一个具有跑表功能的4位LED显示器的电子跑表。

跑表的-999.9秒并具有跑表启动和跑表复位功能键。

跑表的显示范围:;当按下启动按钮跑表开始计时,按下停止按停止计时,当按下复位按钮跑表回零。

三.设计思路1.计时单元由单片机内部的按时器/记数器来实现。

2.跑表的显示功能是由LED数码管动态扫描来实现。

这能够利用专用的键盘/显示器接口芯片来实现对键盘/显示器的动态扫描。

3.跑表的启动/复位/清零功能由软件来实现。

P1.0接启动键,P1.1接停止键,P1.2接清零键。

四.设计方案在单片机中,按时功能既能够由硬件实现,也可通过软件按时实现。

硬件按时是利用单片机内按时器按时,启动以后按时器可与CPU并行工作,不占用CPU时刻,CPU有较高的工作效率。

采纳硬件按时和软件按时并用的方式,即用T0出中断功能实现50ms按时,通过软件延时程序实现1s按时。

按时器的有关的寄放器有工作方式寄放器TMOD和操纵寄放器TCON。

依照设计要求和设计思路,硬件电路有两部份组成,即单片机按键电路,LED 显示器电路,以下图为系统电路设计流程图。

图1 电路设计流程图依照课程设计要求,决定计时单元由单片机内部的按时器/记数器89C52芯片来实现。

跑表显示功能通过LED数码管动态扫描来实现。

能够利用专用的键盘/显示器接口芯片可实现对键盘/显示器的动态扫描。

五.硬件设计1. 单片机型号选择由于咱们利用的单片机开发板上的单片机的型号是SCT89C52,因此咱们只能选择这款型号的单片机。

可是这款单片机和SCT89C51是一样的,也是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处置器,器件采纳ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

基于51单片机的跑表设计

基于51单片机的跑表设计

//中断函数 采用定时器0
• void main() • { • IE=0x82; • TMOD=0x01; • TR0=0; • TH0=64536/256; • TL0=64536%256; • while(1) • { • display(); • key_scan(); • } • }
//开启定时器0中断 //定时器T0,方式1
//延时程序
void display() {
//数码管显示函数 P0= DuanMa [mm/10]; //显示分十位 P2= WeiMa [0]; //第一位显示 Delay(1); P0=DuanMa [mm%10]; //显示分个位 P2= WeiMa [1]; //第二位显示 Delay(1); P2= WeiMa [2]; P0=0x7f; Delay(1); P0= DuanMa [ss/10]; P2= WeiMa [3]; Delay(1); P0= DuanMa [ss%10]; P2= WeiMa [4]; Delay(1); //第三位显示 //显示 —
sbit S1=P1^0; sbit S2=P1^1; unsigned char mm,ss; unsigned int ms; void Delay(int m) { unsigned int i,j; for (i=0; i<m; i++) for(j=0; j<800;j++); } //位变量定义
#include<reg51.h> unsigned char code // 显示段码 DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char code // 显示位码 WeiMa[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};

基于单片机的电子跑表设计--毕业设计

基于单片机的电子跑表设计--毕业设计

毕业设计基于单片机的电子跑表设计此设计还有以下资料,有需要的朋友下载了文档后留下你的邮箱,方便我传给你。

目录第一部分过程管理资料一、毕业设计课题任务书 (3)二、本科毕业设计开题报告 (6)三、本科毕业设计进展情况记录 (10)四、本科毕业设计中期报告 (12)五、毕业设计指导教师评阅表 (13)六、毕业设计评阅教师评阅表 (14)七、毕业设计答辩及最终成绩评定表 (15)第二部分设计说明书八、设计说明书 (16)第一部分过程管理资料****届毕业设计课题任务书院(系):专业:本科毕业设计开题报告说明:开题报告作为毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一,此报告应在导师指导下,由学生填写,将作为毕业设计(论文)成绩考查的重要依据,经导师审查后签署意见生效。

本科毕业设计进展情况记录毕业设计题目:基于单片机的电子跑表设计班级:自本0302学号:46030216学生:刘正武指导教师:廖代文注:教师监督学生如实记录毕业设计(论文)过程中根据《课题任务书》拟定的进度与进展情况以及毕业设计(论文)撰写过程中遇到的问题和困难,并签署意见。

注:教师监督学生如实记录毕业设计(论文)过程中根据《课题任务书》拟定的进度与进展情况以及毕业设计(论文)撰写过程中遇到的问题和困难,并签署意见。

本科毕业设计中期报告院(系):电气与信息工程学院院、系:电气与信息工程学院毕业设计答辩及最终成绩评定表院、系(公章):说明:最终评定成绩=a+b+c,三个成绩的百分比由各院、系自己确定。

第二部分毕业论文摘要本次毕业设计的课题是基于单片机的电子跑表设计,设计要求为电子跑表能显示正确的时间并能作秒表使用。

设计的主要内容包括单片机最小系统(电源电路,复位电路,时钟电路),键盘电路,驱动电路,显示电路和电子跑表的程序设计。

我选用的单片机型号为AT89S52,采用两片74LS244为驱动电路,显示采用两个4位一体的七段数码显示管,通过制作实物,编程,下载程序,制作的电子跑表能够实现正确的时间显示,并且可以实时调整时间显示,作秒表使用时计时范围为000.0秒到999.9秒,通过检测,发现误差不大。

基于STC90C51单片机的电子跑表课程设计

基于STC90C51单片机的电子跑表课程设计

基于STC90C51单片机的电子跑表课程设计物理与电子信息学院课程设计Ⅳ设计报告书基于STC90C51单片机的电子跑表姓名:XXX班级:09电信本学号:090802011指导老师:XXX时间:2011-12-20目录内容摘要 1关键词1Abstract 1Keywords 11绪论 12 系统设计 22.1 设计任务与要求 22.2 方案的选择与论证23 系统硬件设计 33.1 单片机模块 43.2 按键模块73.3 最小系统基本模块83.4 数码管显示模块103.5 驱动电路模块 113.6 硬件元件清单 114软件设计与仿真124.1主程序设计124.2 仿真软件简介 134.3 仿真结果144.4 系统调试与编译15结束语17附录一:程序清单18附录二:电路板实物图22参考文献23内容摘要:该系统以STC90C51单片机为核心控制芯片,实现电子跑表的方案。

设计使用4个NPN三极管作为驱动电路驱动四位数码管的位选,用四位数码管显示000.0到999.9秒。

另外该方案通过按键实现跑表的启动和停止,清零重启功能。

关键词:驱动 STC90C51 四位数码管Abstract:The system is based on STC90C51 single-chipmicrocomputer as the core control chip, electronic stopwatch program. Design using 4 PNP three transistor as a driving circuit for driving the four digital tube of a selected, with four digital tube display 0 to 999.9 seconds. In addition to the program through the realization of the stopwatch button start and stop, reset restart function Keywords:driveSTC90C51four digital tube1绪论近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

基于单片机的电子跑表设计

基于单片机的电子跑表设计
PCB的设 计 是 电路设 计 的最 终 目的 ,要 想让 设计 的 电路 可 以应 用 到 实 际 中 ,就 需要 将 其 转化 为 PCB。 图3是PCB设 计 原理 图, 在 此 基础 上绘 制PCB版 图 并制 作 。
段码输入端
位码输 入端
图1接 线 图 2.2 动 态显 示 原理
位 LED数码 管 ,此 外再 加 上 小数 点dp,共 8个 。原则 上 , “8”字 形 的 数 码 显示 块 均 采 用A、B、c、D、E、F、G以及DP这8个 发光 二 极 管 。每 个发 光 二 极管 称 为 一个 字段 。8字形 的显 示块 有 共 阴极 和 共 阳极 两 种结 构 。
过字段输 出 口由CPU送 出时,所 有的LED显示器 会接 收到 同样的字 形 码,但 最终是 由COM端来 决定哪个 LED显示 器变亮 , 由上述 可知 ,I/ 0口可 以控* ̄COM端 ,因此我们很容 易通过控制l,0口从而实现对显 示 器变化情况 的控制 。这种通 过分时 的方 式来控制每个 显示器的I/O口达 到依次点亮 每个显示器 的方法就称之为动态 扫描。
动态 显示指 的是这 四位LED数码管 的段选均 以并联 的方式 连接 , 通 过 对位码输 入端 的控制 进而实 现对哪 一位数码 管亮灭 情况 的控 制 。 在 单 片机 的众 多显示 方式 中 ,动 态扫 描 显示 接 口无 疑是 其 中应 用最 普遍 的一 种。所 有显 示器 的8个笔划 段a.h同名端相 连 ,构 成它 的接 口 电路 。l/O线可 以 独立的控 制每 一个 显示 器的公 共极COM。字 形码通
ELECTRO NICS W ORLD ·
合肥 师 范学院魂 芯DsP产业化研 究院 乔 玲 陈兵兵 周元 元

51单片机跑表课程设计

51单片机跑表课程设计

51单片机跑表课程设计一、课程目标知识目标:1. 学生能理解51单片机的基本原理,掌握其编程方法。

2. 学生能掌握跑表功能实现的硬件设计,包括定时器/计数器的工作原理和应用。

3. 学生能了解并运用中断系统,实现跑表的精确计时功能。

技能目标:1. 学生能够运用C语言编写程序,实现对51单片机的控制。

2. 学生能够设计并搭建简单的跑表电路,进行功能调试和优化。

3. 学生能够通过课程学习,培养动手实践能力,提高问题解决技巧。

情感态度价值观目标:1. 学生在课程学习中,培养对电子技术和编程的兴趣,提高学习积极性。

2. 学生在团队协作中,学会相互沟通、合作,培养集体荣誉感。

3. 学生通过课程实践,认识到科技对社会发展的作用,树立正确的价值观。

课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。

学生特点:学生具备一定的电子技术基础和C语言编程能力,对单片机有一定了解。

教学要求:结合学生特点,注重理论与实践相结合,引导学生通过动手实践掌握课程内容,提高学生的综合运用能力。

在教学过程中,关注学生的个体差异,因材施教,确保每位学生能够达到课程目标。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 51单片机基础原理回顾:包括51单片机的内部结构、工作原理,重点复习定时器/计数器、中断系统等关键知识点。

相关教材章节:第一章《单片机概述》和第二章《51单片机结构及原理》。

2. C语言编程基础:回顾数据类型、运算符、控制语句等基础语法,为编写跑表程序打下基础。

相关教材章节:第三章《51单片机C语言编程基础》。

3. 跑表功能硬件设计:讲解跑表电路的设计方法,包括时钟电路、复位电路、显示电路等。

相关教材章节:第四章《51单片机接口技术》。

4. 跑表程序设计:教授如何利用定时器/计数器、中断系统编写跑表程序,实现计时功能。

相关教材章节:第五章《51单片机定时器/计数器与中断系统》。

单片机电子跑表课程设计

单片机电子跑表课程设计

单片机电子跑表课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握其编程方法。

2. 学生能掌握电子跑表的工作原理,了解各部分功能及其相互关系。

3. 学生能运用所学知识设计并实现一个简单的单片机电子跑表。

技能目标:1. 学生能够运用C语言或汇编语言进行单片机编程,实现电子跑表的基本功能。

2. 学生能够运用电路设计软件绘制电子跑表的原理图和PCB图。

3. 学生能够运用调试工具对单片机程序进行调试,解决常见问题。

情感态度价值观目标:1. 学生培养对电子制作的兴趣,激发创新意识和动手能力。

2. 学生在团队协作中,学会沟通与交流,培养合作精神。

3. 学生能够关注单片机技术在生活中的应用,认识到科技发展对生活的影响。

课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,培养学生动手能力。

学生特点:学生具备一定的电子基础知识,对单片机有一定了解,但编程和实际操作经验不足。

教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,培养学生解决问题的能力。

在教学过程中,关注学生的个体差异,提供个性化指导。

通过课程学习,使学生能够独立完成单片机电子跑表的设计与制作。

二、教学内容1. 单片机原理与编程基础- 单片机结构及工作原理- C语言或汇编语言基础- 单片机编程环境搭建2. 电子跑表原理与设计- 电子跑表功能需求分析- 电路设计原理及元件选择- 原理图和PCB图绘制方法3. 单片机与外围电路接口技术- 按键输入接口设计- 数码管显示接口设计- 定时器/计数器应用4. 程序设计与调试- 程序框架设计- 功能模块编写- 程序调试与优化5. 实践操作- 电子跑表组装与调试- 故障分析与排除- 课程项目展示与评价教学内容安排和进度:第一周:单片机原理与编程基础第二周:电子跑表原理与设计第三周:单片机与外围电路接口技术第四周:程序设计与调试第五周:实践操作(含课程项目展示与评价)教学内容与教材关联性:本教学内容紧密结合教材,按照教材章节逐步展开,使学生能够循序渐进地掌握单片机电子跑表的设计与制作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录1 设计内容及要求 (1)1.1 设计内容与要求: (1)1.2设计要求: (1)2 系统总体方案设计 (2)2.1 总体方案设计 (2)2.2 设计说明 (2)3 各部分方案选定及接口设计 (3)3.1 主控制器单片机的选择 (3)3.2 时钟电路 (3)3.3显示接口电路 (3)3.4 键盘接口电路 (4)4 系统软件的设计 (5)4.1 设计说明 (5)4.2 主程序设计 (5)4.3 时间处理模块 (6)4.5 键盘扫描模块 (9)5 系统的调试与使用说明 (11)6 总结 (12)7 参考文献 (13)附录: (14)1 设计内容及要求1.1 设计内容与要求:具有时钟和电子跑表的功能。

开机为时钟功能,用4位LED数码管显示时、分,以24小时计时方式;用按键控制切换到电子跑表功能:可用3位数码管从00.0开始计时的功能。

1.2设计要求:1)确定系统设计方案;2)进行系统的硬件设计;3)完成必要元器件选择;4)完成应用程序设计;5)进行应用程序的调试;2 系统总体方案设计2.1 总体方案设计电子跑表的设计有多种方法,例如,可用中小规模集成电路组成电子跑表;也可用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子跑表;还可以利用单片机来实现等等。

为求结构简单,本次设计利用单片机组成数字电子跑表。

2.2 设计说明本系统采用AT89C51单片机、4位LDE数码管显示、一个排阻、4个调节按钮、2个电容与1个晶体振荡器共同构成本的单片机电子跑表的硬件。

时钟模块与计时模块则分别由单片机内部的定时器/记数器T0与T1来实现。

时间显示功能通过LED数码管动态扫描来实现。

电子跑表的启动/暂停/清零功能由软件来实现。

P1.0实现时钟与秒表的切换功能,P1.1接开始计时键,P1.2接计时暂停键,P1.3接计时重新计时键。

本系统软件部分则采用C51编写,功能模块结构化强,共利用了6个功能函数,2个中断服务函数和1个主函数构成了本次电子跑表的软件部分。

图2.1为本系统方框图。

图2.1系统框图3 各部分方案选定及接口设计3.1 主控制器单片机的选择本次设计采用AT89C51单片机,以下为其标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

3.2 时钟电路单片机工作的时间基准是由时钟电路提供的。

在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路,如图3.2所示。

电路中,电容器C1和C2对振荡频率有微调作用,本次设计中电容器取值为20pF,石英晶体选择12MHz,故单片机的机器周期为1us。

图3.1 内部时钟电路3.3显示接口电路本次设计中使用了4位共阴数码显示管,显示控制采用动态显示,即数据的显示是由段和位选信号共同配合完成的。

为了实现显示器的动态扫描,我们需要对显示器进行段控和位控,因此在显示器接口电路中需要有两个输出口,其中一个用于输出8条段控线;另一个用于输出位控线,位控线的数目等于显示器的位数。

本次设计中用P1口与显示器的8条段控线相接,用P2.4~P2.7与显示器的4条位控线相接。

如图3.2所示。

图3.2 显示接口电路3.4 键盘接口电路本设计的键盘接口电路中使用了4个按键分别与单片机的P1.1~P1.3口相连如图3.3所示,分别实现时钟/秒表切换、开始计时、暂停计时、重新计时的功能。

按键的开关状态通过一定的电路转换为高、低电平状态。

按键闭合过程在相应的I/O端口形成一个负脉冲。

闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。

抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。

为了避免键的一次处理闭合,应采CPU多次按用措施消除抖动。

图3.3 键盘接口电路4 系统软件的设计4.1 设计说明在进行应用软件设计时应采用模块化结构设计,其优点是:每个模块的程序结构简单,任务明确,易于编写,调试和修改,程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,便于功能扩充和版本升级,是便于多个模块的调用和分工合作。

因此为了达到功能结构模块化,易读,简单,易移植的特点,故本次设计采用C51编写。

系统编写时可分为键盘扫描程序模块,时间处理模块,显示模块。

如图4.1所示。

将这些事先划分好的模块用C51编成不同的子函数,再将它们有机的结合起来从而达到系统的整体功能。

图4.1 软件设计模块4.2 主程序设计本程序可分为4个模块,共定义了7个子函数,其中键盘扫描模块包括键盘扫描函数,数码管显示模块包括时钟显示函数、秒表显示函数,时间处理模块包括时钟系时间处理函数、秒表系时间处理函数、延迟函数,,另本程序还利用了两个定时/计数器分别为T0、T1,故还需定义两个中断函数T0中断服务函数和T1中断服务程序。

本程序中由于涉及时钟与秒表互切问题,故定义了一控制变量Numb并赋其初值0,若在仿真过中切到秒表则Numb取反为1,切到时钟则Numb重新为0。

因此在程序运行过程中便可控制各按键功能及屏蔽在时钟模式或秒表模式下不相干功能键的影响。

图4.2为主程序流程图。

4.3 时间处理模块时钟处理函数用定时器T0定时10ms ,其计数初值为12*2tfosc X M -=,由于T0选用工作方式1,故M 为162即65536,fosc为晶振频率为12MHZ ,t 为定时时间10ms ,所以X 的值为64536,将该值的高八位值赋给TH0,低八位并赋给TL0,这样便完成了T0的初始化工作,因为定时器T0工作在方式1下,故每次定时器T0溢出都需再给T0赋初值。

由于T0定时10ms ,所以要得到1s 的时间需T0溢出100次,由此引入计数变量Count 。

每当T0溢出,Count 便自动加1,直至计满100,便使秒变量Seconds 自动加1并初始化Count 重新开始计数,直到Seconds 为60,初始化Seconds 并使分变量Minutes 自动加1,同理到时变量Hour 为24时,初始化Hours ,由此无限循环下去直到关闭电源。

图4.3为程序流程图图4.2主程序T0中断服务函数时钟时间处理函数图4.3 T0中断函数及时钟处理函数秒表时间处理函数用的是定时器T1与T0相同,同样定时10ms ,高八位TH1赋值为()2561000065536-,低八位TL1赋值为()256%1000065536-。

T1的启动由按键扫描函数控制,当开启T1后,每次T1溢出,Decisec 自动加1,直至Decisec 到100,秒Sec 自动加1,直至分Mint 为10,初始化Mint 计时复位。

图4.4为其程序流程图。

图4.4 秒表处理函数及T1中断服务函数T1定时器中断服务函数秒表时间处理函数4.5 键盘扫描模块时钟与秒表切换键程序:CHANGE键为时钟秒表切换键,当按下CHANGE键时,会产生按键抖动,本程序中利用delay(5)产生5ms延迟使得按键状态稳定后重新确认是否按下了CHANGE键即CHANGE为低电平,此时还需判断控制变量Numb是否为0(Numb为0即奇数次按下CHANGE键显示秒表,Numb为1则为偶数次按下CHANGE键显示时钟),在CHANGE为0且Numb为0的情况下,执行数码管显示秒表函数并对Numb取反为再次按下CHANGE键做准备,此后程序进入确认结束按键循环,若松开CHANGE,则非CHANGE为0,循环结束回到开始处等待按键电平;若一直按着CHANGE,则一直执行数码管显示秒表函数。

当Numb为1时,则同理显示时钟函数,非CHANGE为0时退出循环回到等待。

图4.5为该程序流程图。

图4.5 时钟与秒表切换程序开始计时键程序:在控制变量Numb等于1的情况按下START键则开启T1定时器开始计时,这里加入Numb的目的是为了在时钟状态下屏蔽非时钟功能键,故当切换为秒表状态时,Numb为1,此时秒表系功能键生效,此时按下START键,开始计时。

图4.6为开始计时键程序流程图。

图4.6 开始计时键程序暂停计时键程序、计时复位键程序同开始计时键程序类似都需在Numb为1的情况下方可启用,且其程序流程相似。

键盘扫描函数keyscan()是由时钟与秒表切换键程序、开始计时键程序、暂停计时键程序、计时复位键程序构成的。

5 系统的调试与使用说明用KEIL运行程序正确后生成HEX格式的文件,用Proteus画好电路图,导入HEX格式的文件进行仿真。

如下图所示,P1.0是秒表与时钟切换键,P1.1为开始计时键,P1.2为暂停计时键。

P1.3为重新计时键。

下图5.1、5.2分别是时钟状态和计时状态调试图。

图5.1 开机时钟状态图5.2 计时状态6 总结开始做课程设计时,我们首先需要将硬件设计做出来,在硬件设计好的基础上进行软件设计这样就方便多了。

着手软件设计时要有一个整体的思路,即主程序,有了整体思路就开始着手于分模块的设计,如时钟显示程序、中断服务程序、时间处理程序等。

每个模块出来后都需要配合主程序进行仿真验证程序是否能正常运行。

这次的设计尽管还不是很完善,但我已经非常开心了,至少有了自己的思路再去实践,再在实践的过程中收获,这是课堂上所没有的欣喜。

在课程设计的过程中遇到的各种知识不总是在书上能找到的,所以我们必须自己查找相关资料,利用图书馆或网络搜索,这是一个比较辛苦的过程,你必须从无数的信息中分离出对你有用的,然后加以整理,最后吸收并用到设计中来。

通过这点,我收益很大。

课程设计是从整体到部分的过程,然而一切并不都是如此的。

因为有时候你整体设计好了,然而在设计部分的时候却可能影响到整体,然后又要作出调整,在不断的调整中才慢慢把设计做出来。

有时候你还必须把自己前面做的东西全部推翻,然后重新再来。

经过两个星期的课程设计,确实让我收获很多,学到了很多,特别要谢谢李老师的指导及严格要求,虽然在设计过程中很累,但是一看到自己做出来的成果,就什么疲劳都没有了。

7 参考文献[1]王迎旭《单片机原理与应用》(第2版)机械工业出版社[2]胡汉才《单片机原理及系统设计》清华大学出版社.[3]潘永雄《新编单片机原理与应用》西安电子科技大学出版社.[4]张迎新《单片微型计算机原理、应用及接口技术》国防工业出版社[5]张欣《单片机原理与C51程序设计基础教程》清华大学出版社[6]李叶紫《MCS—51单片机应用教程》清华大学出版社附录:程序清单:#include<reg51.h>#define uchar unsigned char#define uint unsigned int//七段共阴数码显示管段码表//ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义初始化变量////秒表部分//uchar Decisec=0;//分秒//uchar Sec=0;//秒//uchar Mint=0;//分////时钟部分//uchar Seconds=0;uchar Minutes=23;uchar Hours=15;uchar Count=0;uchar Numb=0;//按键部分//sbit CHANGE=P1^0; //切换:可实现跑表与时钟互切//sbit START=P1^1; //开始//sbit STOP=P1^2; //暂停//sbit RST=P1^3; //复位////函数声明//void delay(uchar ms); //延迟函数//void time_pro1();//秒表处理函数//void time_pro2();//时钟处理函数//void keyscan(); //键盘扫描函数//void display1(); //数码管显示秒表函数//void display2(); //数码管显示时钟函数///*******************/// 主函数///*******************/void main(){P1=0xff;TMOD=0x11;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;ET0=1;ET1=1;TR0=1;while(1){ keyscan();if(Numb==1){display1(); }if(Numb==0){display2();}}}/*******************/// 延迟函数///*******************/void delay(uchar ms){ uchar i,j;for(i=ms;i>0;i--)for(j=500;j>0;j--);}/*******************/// 秒表处理函数///******************/void time_pro1(){ if(Decisec==100){Decisec=0;Sec++;if(Sec==60){Sec=0;Mint++;if(Mint==10){Mint=0;}}}} /*******************/// 时钟处理函数///******************/void time_pro2(){ if(Seconds==60){ Seconds=0;Minutes++;if(Minutes==60){ Minutes=0;Hours++;if(Hours==24){ Hours=0;}}}}/*******************/// 键盘扫描函数///******************/void keyscan(){// 秒表/时钟切换//if(CHANGE==0){delay(5);if((CHANGE==0)&&(Numb==0)){display1();Numb=!Numb;while(!CHANGE){display1(); } } if((CHANGE==0)&&(Numb==1)){Numb=!Numb;while(!CHANGE){display2();}}}// 开始计时//if((START==0)&&(Numb==1)){delay(5);if(START==0){TR1=1;while(!START){display1();}}}// 暂停计时//if((STOP==0)&&(Numb==1)){delay(5);if(STOP==0){ TR1=0;while(!STOP){display1();}}}// 重新计时//if((RST==0)&&(Numb==1)){delay(5);if(RST==0){ while(!RST){ Decisec=0;Sec=0;Mint=0;display1();}}}}/************************/// 数码管显示秒表函数///************************/void display1(){P2=0x7f;P0=dispcode[Decisec/10];// 显示分秒//delay(1);P2=0xbf;P0=dispcode[Sec%10]|0x80;//显示秒个位//delay(1);P2=0xdf;P0=dispcode[Sec/10];//显示秒十位//delay(1);P2=0xef;P0=dispcode[Mint]|0x80; // 显示分//delay(1);}/*************************/// 数码管显示时钟函数///*************************/void display2(){P2=0x7f;P0=dispcode[Minutes%10];//显示分个位//delay(1);P2=0xbf;P0=dispcode[Minutes/10];//显示分十位//delay(1);P2=0xdf;P0=dispcode[Hours%10]|0x80;//显示时个位// delay(1);P2=0xef;P0=dispcode[Hours/10];//显示时十位//delay(1);}/*********************///定时器T1中断服务程序///********************/void time_T1()interrupt 3{TH1=(65536-10000)/256;TL1=(65536-10000)%256;Decisec++;time_pro1();//秒表时间处理函数//}/**********************///定时器T0中断服务程序///**********************/void time_T0()interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;Count++;if(Count==100){Seconds++;time_pro2();//时钟时间处理函数//Count=0;}}秒表/时钟计时器电路原理图。

相关文档
最新文档