模拟时钟应用程序
【毕业论文】基于LabVIEW的多功能秒表设计(计时器+倒计时+节拍器+日历+时钟)

基于LabVIEW的秒表设计摘要数字式秒表是一种常用的计时工具,广泛用于各种比赛以及各类实验测量中。
随着生活节奏的加快,人们时间观念的加强,各种计时器已经成为人们日常生活中不可或缺的一部分,并且人们已经不能满足于单一的某一种功能了。
而如何在秒表的基础上,根据人们生活的需要增加相应的功能以方便人们的生活,便成为秒表设计方面的重点。
我基于LabVIEW设计的的秒表,具有秒表计时器、倒计时器、节拍器、时钟和闹钟的功能。
其具有界面美观,简单易用,功能强大,精确度高等特点。
此秒表的所有功能均可以独立运行,互不干扰,具有很好的用户体验。
关键词:秒表,计时,LabVIEWStopwatch design based on LabVIEWAbstractDigital stopwatch is a commonly used tool for timing.It is widely used in various competitions and a variety of experimental measurements.With the accelerated pace of life and the strengthening of the concept of time,variety timer has become an indispensable part of everyday life,and it has been unable to meet on a single feature of a certain kind.It has become the focus of the stopwatch design that how to add the corresponding function according to the needs of people's lives based on the stopwatch to convenience to people's lives.Stopwatch witch I designed based on LabVIEW, is with a stopwatch timer, countdown timer, metronome, clock and alarm functions.It has a beautiful interface, easy to use, powerful, high precision characteristics.This stopwatch’s all functions can be run independently, means can without disturbing each other, and with good user experience.Keywords: stopwatch, timer, LabVIEW目录1.绪论 (1)1.1 引言 (1)1.2虚拟仪器的概念及特点 (1)1.2.1虚拟仪器 (1)1.2.2 虚拟仪器的特点 (1)2. 图形化编程和LabVIEW (2)2.1 图形化编程简介 (2)2.2 LabVIEW简介 (2)2.2.1前面板 (2)2.3.2 程序框图 (2)3.秒表介绍及程序设计 (3)3.1 概述 (3)3.2 秒表的发展 (3)3.3 秒表的功能设计 (5)3.3.1.正计时 (5)3.3.2 倒计时 (6)3.3.3.节拍器 (6)3.3.4.时钟与闹钟 (6)4. 程序实现 (7)4.1秒表计时器 (7)4.1.1 流程图 (7)4.1.2程序设计 (8)4.2 倒计时器 (21)4.2.1流程图 (21)4.2.2程序设计 (22)4.3节拍器 (25)4.3.1流程图 (25)4.3.2 程序设计 (26)4.4时钟及闹钟 (28)4.4.1流程图 (28)4.4.2 程序设计 (28)总结 (31)致谢 (33)1.绪论1.1 引言LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。
毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]
![毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]](https://img.taocdn.com/s3/m/9ad55f3e0508763230121257.png)
程序仿真等全套设计,联系153893706第1章绪论二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。
第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。
第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。
第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步……我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。
商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。
本设计为软件,硬件相结合的一组设计。
在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。
基本的要了解一些主要器件的基本功能和作用。
除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。
AT89C52是由ATMEL公司推出的一种小型单片机。
95年出现在中国市场。
其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。
本文介绍了基于AT89C52单片机设计的电子万年历。
选题背景及研究的目的与意义设计的目的电子钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便。
测试反应时间模拟系统

测试反应时间模拟系统摘要随着电子技术的飞速发展,微型计算机已经全面渗透了人类生活各领域,并革命性地改变着人们的生活。
因此,可以说了解微型计算机的基本工作原理对于每个人都十分必要。
而对于即将从事电子行业的工作者来说,熟悉掌握微机原理并在其上进行软硬件的开发设计则是一项必须掌握的基本技能。
为此,在学习微型计算机技术以及其应用的过程中,我设计了一个能测试人体反应时间的模拟系统。
该系统以8088微处理器为核心,结合8255可编程并行通信接口、8253可编程定时/计数器、8259中断控制器等芯片以及LED等辅助电路,来测试人的反应时间,并将其反映在数码管上。
通过此仪器不仅能够真实地测试出人的反应时间,而且还可以锻炼和提高个人对外界突发事件的处理能力。
关键词:反应时间、8086/8088、汇编、8255simulationsystemoftestingreactiontimeAbstractWiththerapiddevelopmentofelectronictechnology,themicro-computerhasimpactedonalmo steveryareaofhumanlifeandmakesthepeople’sliveschangingrevolutionary.So,it’s verynec puterprincipleandhowtod osomehardwareandsoftwaredevelopmentonthecomputershouldbemasteredbythepeoplethatwillw orkinthefieldofelectronicsindustry.Forthisreason,duringstudyingmicro-computertechnol ogyanditsapplication,asystemusedtotestaperson’sreactiontimeisdeveloped.Thesystemtak esthe8088microprocessorasacoreandcombinesIntegratedCircuitssuchas8255ProgrammablePar allelInterface,8253ProgrammableIntervalTimer,8259AProgrammableInterruptControllerand etc,whichteststhereactiontimeanddisplaysitontheLED.Thisequipmentcannotonlytesttherea ctiontimecorrectly,butalsoimprovethehandlingcapacityofsuddeneventsoftheoutsideworldb ytraining.Keywords:reactiontime;8086/8088、assemblelanguage、8255目录摘要 (I)Abstract (II)目录 (III)1.前言 (1)2.设计方案论证 (2)2.1概述 (2)2.2本设计使用的设备介绍 (2)2.2.1TDN86/88+系统简介 (2)2.3设计原理和方法 (3)2.3.1设计原理 (3)2.3.2设计方法 (4)2.3.3程序流程图及其问题 (4)3.本设计中各芯片的工作原理及编程 (13)3.1本设计中8255A芯片的工作原理 (13)3.1.18255A的内部结构 (13)3.1.28255A的控制字及工作方式 (14)3.1.3本设计中8255A的应用编程 (14)3.2本设计中8259A芯片的编程结构和应用编程 (15)3.2.18259A的编程结构 (15)3.2.28259A初始化流程图 (16)3.2.3本设计中8259A的应用编程 (17)3.3本设计中8253A芯片的工作方式和应用编程 (18)3.3.18253的工作方式 (18)3.3.2本设计中8253的应用编程 (19)4.调试过程与总结 (20)4.1程序的调试过程 (20)4.2硬件的调试过程 (28)4.3总结 (29)致谢 (30)参考资料 (31)附录一:测试反应时间模拟系统总电路图 (32)附录二:测试反应时间模拟系统程序 (33)附录三:硬件实物图及实物与TDN86/88+系统的连接图 (45)1.前言近几十年来,微型计算机的应用已经全面渗透进人类生活的各个角落,大到航空航天领域,小至嵌入式家庭用器,无处不见其踪影,无处不让人深刻感受到其对人类生活的革命性变革。
简单的数字时钟(verilog设计)

设计目标与要求
设计一个简单的数字 时钟,能够显示时、 分、秒。
时钟应具有可靠性、 稳定性和可扩展性。
要求使用Verilog语 言实现,并能够在 FPGA或ASIC上实现。
设计思路及流程
• 设计思路:采用模块化设计方法,将数字时钟划分为不同的模 块,如计数器模块、显示模块等。每个模块负责实现特定的功 能,并通过接口与其他模块进行通信。
设计思路及流程
设计流程 1. 确定设计需求和目标。 2. 制定设计方案和计划。
设计思路及流程
3. 编写Verilog代码,实现各个模块的功能。 5. 根据测试结果进行调试和优化。
未来改进方向探讨
提高计时精度
通过改进算法或采用更高 性能的硬件平台,提高数
字时钟的计时精度。
降低资源占用
优化代码结构,减少不 必要的资源占用,提高 时钟系统的运行效率。
增加实用功能
拓展应用领域
考虑增加闹钟、定时器 等实用功能,使数字时 钟更加符合用户需求。
探索将数字时钟应用于 更多领域,如智能家居、
数据类型与运算符
Verilog中的数据类型包括
整型、实型、时间型、数组、结构体等。
Verilog中的运算符包括
算术运算符、关系运算符、逻辑运算符、位运算符等。
顺序语句与并行语句
Verilog中的顺序语句包括
赋值语句、条件语句、循环语句等,用于描述电路的时序行为。
Verilog中的并行语句包括
模块实例化、连续赋值语句、门级电路描述等,用于描述电路的并行行为。
52单片机时钟课程设计

52单片机时钟课程设计一、课程目标知识目标:1. 学生能理解并掌握52单片机的基本原理及其在时钟设计中的应用。
2. 学生能描述时钟电路的工作原理,包括时钟晶振、分频器等组成部分。
3. 学生能运用C语言编写程序,实现对时钟的显示、调整和时间计算功能。
技能目标:1. 学生能独立完成52单片机的时钟电路连接和程序编写。
2. 学生通过实验操作,培养动手能力和问题解决能力,能够调试并优化时钟程序。
3. 学生能够运用所学知识,结合实际需求,设计简单的时钟应用项目。
情感态度价值观目标:1. 学生通过学习单片机时钟设计,培养对电子技术和编程的兴趣,激发创新意识。
2. 学生在团队协作中,学会分享、交流和合作,提高沟通能力。
3. 学生认识到科技对社会生活的影响,增强社会责任感和时代使命感。
课程性质:本课程为实践性较强的电子技术课程,结合理论教学和实验操作,旨在培养学生的动手能力、编程能力和创新能力。
学生特点:学生已具备一定的电子技术基础知识,对编程有一定了解,但对单片机应用尚处于起步阶段。
教学要求:教师需结合学生特点,注重理论与实践相结合,关注个体差异,引导学生主动探究,培养其解决问题的能力。
通过课程学习,使学生能够将所学知识应用于实际项目中。
二、教学内容本课程教学内容主要包括以下几部分:1. 52单片机基础知识:介绍52单片机的结构、工作原理、引脚功能等,结合教材相关章节,让学生对单片机有基本的认识。
2. 时钟电路原理:讲解时钟电路的组成,包括时钟晶振、分频器等,分析时钟信号的产生、传输和作用。
3. C语言编程:复习C语言基础知识,重点讲解与52单片机编程相关的内容,如寄存器操作、I/O口编程、中断处理等。
4. 时钟程序设计:详细讲解如何利用52单片机实现时钟功能,包括时钟显示、调整和时间计算等,结合教材实例,让学生动手实践。
5. 实验操作与调试:指导学生进行时钟电路的连接、程序下载和调试,培养学生动手能力和问题解决能力。
时钟系统汇编语言程序设计

时钟系统汇编语言程序设计1 总体方案设计1.1设计目的1)进一步建立微机系统的概念,加深对系统的理解和认识,培养学生应用微型计算机解决实际问题的能力;2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。
3)进一步熟悉微机最小系统的构成及常用接口芯片的使用,提高系统设计的能力。
1.2设计任务与要求课程设计任务:系统时钟汇编语言程序设计设计初始条件:1)采用16位微处理器 8086 CPU以及86系列微型计算机的指令系统;2)软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
课程设计要求:1)设计一个计时器界面,形式为:时:分:秒;2)单击”ESC”键退出程序。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试1.3设计方案本次设计中,要实现时间的显示,并在此基础上附加上一个功能,在时间显示后,单机“ESC”键时,退出显示界面。
在本次设计中,可以加入一个功能,当单击其他键时,显示界面并不退出,即界面不变,没有反应,再单击“ESC”键时,退出显示界面。
在设计时,时钟的实现有很多方法,可以采用DOS系统功能调用语句INT 21h 直接调用系统时间,再在着基础上加上推出的功能;也可以采用延时的方法,设计一个延时器,每隔一秒,计数器加一,采用六十进制。
在此基础上再加上附加功能。
在本次课程设计中,采用调用系统时间的方法,方法比较简单明了,功能实现比较好,能和系统时间跳动保持一致,故选用此种方法。
2 程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
单片机设计时钟实训报告

一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。
为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。
本实训以AT89C51单片机为核心,通过学习时钟电路的设计、编程和调试,使学生掌握单片机在时钟设计中的应用,提高学生的动手能力和创新思维。
二、实训目的1. 掌握单片机的基本原理和编程方法;2. 熟悉时钟电路的设计和调试;3. 培养学生的实际工程应用能力和创新思维;4. 提高学生的团队协作能力和沟通能力。
三、实训内容1. 硬件设计(1)单片机选型:选用AT89C51单片机作为核心控制单元;(2)时钟电路:采用晶振电路作为时钟源,实现1Hz的基准时钟;(3)显示电路:采用LCD1602液晶显示屏,实现时间、日期和星期等信息显示;(4)按键电路:设计4个按键,分别用于设置时间、日期、星期和闹钟功能;(5)复位电路:采用上电复位和按键复位两种方式,保证系统稳定运行。
2. 软件设计(1)系统初始化:初始化单片机,设置波特率、定时器等;(2)时间显示:通过读取实时时钟芯片(如DS1302)的数据,显示时间、日期和星期;(3)按键处理:根据按键输入,实现时间、日期、星期和闹钟的设置与修改;(4)闹钟功能:当设定的时间到达时,通过蜂鸣器发出提示音。
3. 调试与优化(1)调试方法:使用Proteus软件进行仿真调试,观察程序运行状态,分析故障原因;(2)优化方法:针对仿真过程中出现的问题,优化程序代码,提高程序运行效率。
四、实训过程1. 硬件制作(1)按照设计图纸,焊接电路板;(2)连接晶振、LCD显示屏、按键和蜂鸣器等元器件;(3)调试电路,确保各元器件正常工作。
2. 软件编写(1)使用Keil C51软件编写程序,实现时钟显示、按键处理和闹钟功能;(2)编译程序,生成HEX文件。
3. 调试与优化(1)使用Proteus软件进行仿真调试,观察程序运行状态;(2)针对仿真过程中出现的问题,优化程序代码,提高程序运行效率;(3)将优化后的程序烧录到单片机中,进行实际运行测试。
三菱PLC时钟比较指令TCMP的编程应用

78 LD X0 79 SET S20 81 STL S20 82 LD X23 83 SET S21 85 STL S21 86 OUT Y20 87 OUT Y22 88 LD X20 89 SET S22 91 STL S22
关键词:三菱PLC;时钟数据写入;时钟比较指令
1 系统构成及控制要求
1.1 系统构成 亚龙YL-235A型机电一体化实训考核装置由铝合金导轨
式实训台、机电一体化设备的机械部件、三菱PLC模块单元、 MCGS触摸屏模块单元、三菱变频器模块单元、按钮模块单元、 电源模块单元、接线端子排和传感器组成,分拣系统的结构如 图1所示。
Y12 A位置气缸伸出
X16 B推料杆推出到位
Y14 B位置气缸伸出
X20 电感传感器(检测金属)
X22 光纤传感器(检测塑料)
X23 电容传感器(检测进料口)
使用变频器对三相异步电机进行速度控制时,需要对变 频器进行参数设置,P4=25 Hz,P7=2 s,P8=2 s,P79=2。
28
Zhuangbei Yingyong yu Yanjiu◆装备应用与研究
装备应用与研究◆Zhuangbei Yingyong yu Yanjiu
三菱PLC时钟比较指令TCMP的编程应用
邓玉良
(江苏省金坛中等专业学校,江苏 常州 213200)
摘 要:传统的物料分拣运行过程中,中途可能突然断电,断电时间无论长短都将影响物料分拣。 现介绍三菱PLC中功能指令时钟 数据写入(TWR)以及时钟比较指令(TCMP)的编程应用,某些工控中需要对某个时间点进行精确控制,而上述指令可以很好地解决这 个问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
案例五模拟时钟应用程序以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。
用菜单选项或按钮设置时间和秒表。
时间不必与机器系统时间相同,可任意设置。
模拟时钟示意图1 编程要求(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。
(4)各指针运动规律正确。
为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。
(5)数字式时钟的时间显示与指针式时钟显示一致。
(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期。
(7)按下秒表控制按钮后,秒表显示窗中显示从0开始的时间,单位为百分之一秒。
再次按下秒表控制按钮后计时停止,该窗口显示累计时间。
2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。
指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。
计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角)y =圆心y坐标+ 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。
若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。
采用一个定时器消息可以很容易实现指针联动算法。
由于屏幕的重绘速度很快(50 ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。
本程序采用非删除式重绘,假定指针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针;如果指针没有动,则直接绘制指针。
另外,秒表需要采用单独的定时器消息控制。
3 实现步骤(1)用AppWizard生成一个名为Clock的单文档(SDI)程序框架。
为了简化应用程序,在第四步时去掉Docking toolbar和Initial status bar选择项,其他各选项均可用缺省设置。
(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。
在“时钟控制”菜单中添加三个菜单选项“启动时钟”、“停止时钟”和“时间设置”。
并在菜单属性项中设定“启动时钟”菜单的ID标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“时间设置”菜单的ID标号为ID_SETTIME。
为了简化菜单,可删除系统原有的“文件”、“编辑”菜单项。
(3)利用ClassWizard为视图类添加菜单命令处理函数。
进入ClassWizard的Message Maps选项卡,选择Class Name项为CClockView 类,在Object IDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择COMMAND,按下Add Function按钮添加成员函数。
ClassWizard会为“启动时钟”、“停止时钟”和“时间设置”菜单选项添加相应的消息响应函数OnStart ( )、OnStop ( )和OnSettime ( )。
(4)利用ClassWizard为视图类添加定时器和鼠标消息处理函数。
进入ClassWizard的Message Maps选项卡,选择Class Name项为CClockView类,在Messages列表框中分别选择定时器消息WM_TIMER 和鼠标消息WM_LBUTIONDOWN,按下Add Function按钮添加成员函数。
ClassWizard会添加相应的定时器和鼠标消息响应函数OnTimer和OnLButtonDown。
(5)使用Developer Studio菜单的Insert / Resource…选项调出Insert Source对话框,为项目添加新的对话框资源。
在对话框属性中,修改对话框名为“时间设定”。
在对话框中增加用来输入年、月、日、时、分、秒的编辑框控件,如下图所示。
对话框通过控件属性,将年、月、日、时、分、秒等编辑控件的ID改为IDC_YEAR、IDC_MONTH、IDC_DAY、IDC_HOUR、IDC_MINUTE 和IDC_SECOND。
(6)设计好这个对话框模板后,利用ClassWizard自动建立对话框类。
进入ClassWizard后,它会发现已建立的对话框模板资源,并弹出一个对话框询问是否要为该对话框模板建立类。
按下“OK”按钮,会弹出New Class对话框,在Name栏填写对话框类的名称CSetTimeDlg 后按“OK”按钮,即可为对话框创建一个对应的类。
(7)利用ClassWizard为对话框类添加与各控件对应的数据成员。
选择MemberVariables选项卡,确保Class Name项为对话框CSetTimeDlg 类,然后在选项卡下方的窗口中选择各控件的ID并按下“Add Variable…”按钮,为其添加对应成员变量,如表11.4所示。
表11.4 编辑控件属性最后一列为变量取值范围。
(8)编辑工程的图标资源,在Resource View选项窗口中修改Icon 结点所包含的主框架图标(IDR_MAINFRAME),修改标准图标(32像素×32像素)及小图标(16像素×16像素),从而为该程序设计一个美观大方的图标。
(9)完成以上工作后,即可修改程序框架,添加必要的代码。
4 程序清单按以下步骤向视图类(CClockView)添加下列数据成员及成员函数。
(1) 添加表示年、月、日、时、分、秒的变量。
int year;int month;int day;int hour;int minute;int second;(2) 添加秒表的计数变量。
int watch;(3) 添加时钟的画笔及画刷变量。
CPen m_HouPen, m_MinPen, m_SecPen; // 各种针的画笔CBrush m_MarkBrush; // 表盘标记的画刷(4) 添加时钟控制变量。
CPoint m_Center; // 表的中心double m_Radius; // 表的半径CPoint m_Hour [2], m_OldHour [2]; // 时针当前及前一次位置CPoint m_Minute [2], m_OldMin [2]; // 分针当前及前一次位置CPoint m_Second [2], m_OldSec [2]; // 秒针当前及前一次位置(5) 添加秒表的两个按钮位置变量。
CRect m_WatchStart;CRect m_WatchStop;(6) 添加两个函数,计算时钟各指针位置。
void SetClock (int hour, int minute, int second);CPoint GetPoint (int nLenth, int nValue);(7) 在视图类构造函数中增加初始化语句:然后添加下列代码:在OnDraw函数中添加下面代码:// 用白色覆盖原位置时针请注意将表示时间的整数转换为CString 字符串类型的方法以及秒表的显示方法。
另外,watch 计数器以1/100秒为计数单位,每达到100则秒数加1。
u 按照下列步骤增加时钟控制代码:①修改Onstart和OnStop函数,设置时钟运动消息。
按比正常时钟快20倍的假定,50ms产生一个消息。
其代码为:②修改OnTimer函数,正确计算并处理年、月、日、时、分、秒等变量的联动变化,其代码为:③ 添加时间设置对话框代码。
首先在ClockView. cpp 文件头部添加下列语句: #include “SetTimeDlg. H”在时间设定对话框类的构造函数中,做如下修改,将初始日期设为2010-7-10:最后,在OnSettime函数中添加代码如下:至此,除秒表外,时钟部分程序设计完成。
u 按以下步骤设计秒表控制程序:在OnLButtonDown函数中增加下列内容,以便响应单击秒表启动、停止框所发出的消息:程序运行:下图显示了模拟时钟运行的情况。
“启动”和“停止”框控制秒表,时钟用菜单控制。
本题采用标准的SDI程序结构,完全利用视图类实现了这一程序。
利用定时器消息控制时钟运动是本程序的出发点。
利用一个定时器控制时钟,易于实现指针联动规律。
计算指针位置利用了坐标变换和三角函数的知识。
本程序一个较难处理的地方是屏幕重绘,由于完全在OnDraw 函数中实现,因此限制较多。
本程序采取了先覆盖,再重绘的方法。
模拟时钟示意图本程序由于完全在OnDraw函数中实现,因此屏幕重绘较为麻烦。
如果在OnDarw函数中采用“异或”屏幕重绘方式,在程序窗口最大、最小化及移出屏幕时,会显示异常。
解决这一问题较理想的方式是在定时器处理函数OnTimer中采用“异或”方式直接重绘屏幕,而不采用调用Invalidate ( )函数的方式;同时在OnDraw函数中显示指针的最后状态,以便处理程序窗口最大、最小化及移出屏幕的情况。
在OnTimer 函数中直接重绘屏幕需要使用OClientDC类,具体用法与OnDraw函数中的pDC对象基本一致。
另外,本程序的数字时钟没有显示星期和农历,读者可尝试添加进去。