面向对象程序设计课程设计报告《电子时钟》C
电子时钟c语言课程设计
电子时钟c语言课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中结构体、指针、函数等基本概念;2. 学生能运用C语言编程实现电子时钟的功能,包括时、分、秒的显示与更新;3. 学生了解电子时钟的原理,明确时间与计算机系统时间的关系。
技能目标:1. 学生能运用所学知识,设计并编写出具有实际功能的电子时钟程序;2. 学生通过课程学习,掌握编程调试技巧,提高解决问题的能力;3. 学生能够进行团队协作,共同分析问题、设计解决方案并完成项目。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发探索精神,增强学习动力;2. 学生通过课程学习,认识到编程在实际生活中的应用,提高学习的实用性;3. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握C语言编程的基本技能,培养实际编程能力。
学生特点:学生已经掌握了C语言的基本语法,具有一定的编程基础,但对实际项目的开发流程和团队协作经验不足。
教学要求:教师需引导学生将所学理论知识应用于实际项目,注重培养学生的动手能力、解决问题的能力和团队协作能力。
在教学过程中,将目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. C语言基础回顾:结构体、指针、函数的定义与使用;2. 电子时钟原理介绍:时间概念、计算机系统时间处理;3. 编程环境准备:配置开发环境、编译与调试;4. 项目需求分析:明确电子时钟的功能需求、界面设计;5. 编程实现:- 设计结构体存储时间数据;- 编写函数实现时、分、秒的更新;- 实现界面显示与交互;- 处理异常情况与边界条件;6. 项目测试与优化:测试电子时钟程序、优化代码性能;7. 团队协作与交流:分组进行项目开发、组内讨论与分享;8. 课堂总结与反馈:总结项目开发过程、收集学生反馈。
教材关联章节:C语言基础、结构体与指针、函数、项目实践。
教学内容安排与进度:1. 基础知识回顾(1课时);2. 电子时钟原理介绍(1课时);3. 编程环境准备与项目需求分析(1课时);4. 编程实现(4课时);5. 项目测试与优化(2课时);6. 团队协作与交流(2课时);7. 课堂总结与反馈(1课时)。
计算机程序设计(C语言)课程设计报告
计算机程序设计(C 语言)课程设计报告题目:电子动画时钟学院:机电工程学院专业:班级:090109 班学号:姓名:指导教师:设计日期:一、概述选题背景:随着社会的进步和科技的发展,电子钟表逐渐成为了人们生活中不可缺少的一部分。
设计思路: (一)功能模块设计, 1. 电子时钟执行主流程2. 电子时钟界面显示3. 电子时钟按键控制模块4. 时钟动画处理模块(二)数据结构设计 1.time 结构体 2. 全局变量 ( 三 ) 函数功能描述1. keyhandle()2.timeupchange()3.timedownchange()4.digitclock()5.drawcursor()6.clearcursor()7.void clockhandle()8.main() (四)程序实现(五) 运行结果。
、概要设计2.1 、数据结构此程序中,使用了C语言的time结构体和几个全局变量,l.time结构体struct time{unsigned char ti_min; /* 分钟*/unsigned char ti_hour; /* 小时*/unsigned char ti_hund; /* 百分之一秒*/unsigned char ti_sec; /* 秒*/};time 结构体定义在dos.h 文件中,可用来保存系统的当前时间,其中各字段的值的含义如下。
1. unsigned char ti_min: 保存分钟值。
2. unsigned char ti_hour: 保存小时。
3. unsigned char ti_hund: 保存百分之一秒,例如,ti_hund=500 ,表示1/500 秒。
4. unsigned char ti_sec: 保存秒数。
2.2 、全局变量下面对程序用到的全局变量及数组进行说明.1. double h,m,s: 此3 个全局变量分别用来保存小时,分钟,秒数。
2. double x,x1,x2,y,y1,y2: 保存数字时钟中小时,分,秒在屏幕中显示的坐标值。
电子钟的设计 C语言编程
课程设计说明书课程设计名称:专业课程设计课程设计题目:电子钟的设计学院名称:信息工程学院专业:电子信息工程班级: XXXXXX 学号: XXXXXXXX 姓名: XXXX 评分:教师: XXXXXX20 XX 年 X 月 X 日当今信息科技高速发展,使用方便、低成本电子设备已逐步成为我们日常生活中电子产品的主力军。
用软件代替硬件的电子设备能大大地节省成本,且有利于资源的节约,因此,以软代硬的设计必将成为我们现代设计的主流。
本设计是利用MCS-51系列单片机内部的定时器/计数器进行中数年定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能够使设计者在定时/计数器的使用中及程序设计方面得到锻炼和提高,因此本系统将采用软件方法实现计时。
关键词:单片机计数器软件第一章实验要求及设计思路 (4)1.1 设计内容及要求 (4)1.2 设计的目与和意义 (4)1.3 设计的基本思路与主要内容 (5)第二章系统组成及工作原理 (6)2.1 系统组成 (6)2.2工作原理 (7)第三章硬件设计与分析 (9)3.1 硬件设计原理 (9)3.2 AT89C51单片机介绍 (9)3.3单片机最小应用系统 (9)3.4显示电路 (11)3.5 键盘及其接口 (12)第四章软件设计 (14)4.1 主程序设计 (14)4.2 定时中断程序 (17)4.3 显示子程序 (17)第五章调试与运行 (19)第六章结论与体会 (20)参考文献 (21)附录一系统原理图 (22)附录二元件清单 (23)附录三程序清单 (24)第一章 实验要求及设计思路1.1 设计内容及要求设计一个电子钟,要求如下:(1) 利用单片机最小系统设计一个电子钟(不能采用单片机开发系统)(2) 用8255扩展键盘及显示接口(3) 显示方式:** 时** 分** 秒(4) 时间可以任意修改1.2 设计的目的与意义人类的生活包括:工作、学习、休息以及参与社会的多种实践活动,环环有条理,更加丰富多彩。
电子钟设计c语言设计
电子钟设计c语言设计电子钟是一种使用数字或者模拟显示时间的时钟。
它通常使用数字显示屏或者液晶屏来显示时间。
电子钟的优势在于与传统机械钟相比,它更加准确、可靠、精准和方便。
通过使用c语言来设计电子钟可以使它更加智能化和强大。
我们知道,c语言是一种通用的高级编程语言,它非常适合用于系统编程和应用程序开发。
电子钟的设计需要运用c语言的数据结构、算法、指针和其他通用编程技术。
设计一个可靠的电子钟需要考虑到准确显示时间、时区调整、闹钟功能、定时器和更多的功能。
在设计电子钟时,我们首先需要考虑到选择合适的开发平台和硬件选型。
例如,我们可以使用Arduino或者Raspberry Pi 等开发板来设计电子钟。
这些开发板既能提供强大的计算能力,又可以提供足够的GPIO引脚和通信接口。
同时,我们还需要选择合适的时钟模块,例如DS1307、DS3231和DS1302等。
接下来,我们可以考虑设计程序框架。
设计程序框架需要考虑到用户需求,从而使程序有条不紊地进行。
我们可以设计菜单选项来满足用户需求,例如时钟显示、日期显示、温度显示等等。
此外,还可以考虑添加一些有趣的功能,例如给予经度和纬度计算日出日落时间以及天气预报等。
电子钟的时间显示通常使用RTC模块与单片机进行通信。
RTC模块可以提供秒、分、时、日、月、年等时间数据。
我们需要从RTC模块读取这些数据,并将它们转换成格式化的字符串进行显示。
我们还需要考虑到时区的调整,以便在不同时区下准确显示时间。
闹钟功能是电子钟的一个重要特性。
我们可以设计界面来设置闹钟时间和日期。
当闹钟响起时,电子钟可以触发警报并发出声音或声音和振动提醒。
我们还可以增加关闭闹钟的选项,以便用户可以在闹钟响起时快速关闭它。
另一个特色功能是定时器,它可以用来进行倒计时或计时操作。
我们可以使用按钮或者旋转编码器来设置定时器时间。
定时器可以在倒计时或计时完成时发出警报来通知用户,以便执行相应的操作。
最后,我们需要考虑到电子钟的可扩展性和灵活性。
c电子时钟课程设计
c 电子时钟课程设计一、课程目标知识目标:1. 学生能够理解电子时钟的基本原理,掌握电子时钟的主要部件及其功能。
2. 学生能够掌握时、分、秒的概念,学会电子时钟的时间设置与调整。
3. 学生能够了解电子时钟的设计与制作过程,掌握基本的电路连接方法。
技能目标:1. 学生能够运用所学知识,独立完成电子时钟的组装与调试。
2. 学生能够运用电子时钟的设计原理,进行简单的时钟程序编写与优化。
3. 学生能够通过实际操作,培养动手能力、逻辑思维能力和问题解决能力。
情感态度价值观目标:1. 学生通过学习电子时钟的制作,培养对科学技术的热爱和兴趣,增强创新意识。
2. 学生在团队协作中,学会互相帮助、沟通与交流,培养合作精神。
3. 学生能够认识到时间的宝贵,养成珍惜时间、合理安排时间的好习惯。
课程性质:本课程为电子技术实践课程,旨在让学生通过动手实践,掌握电子时钟的基本原理与制作方法。
学生特点:五年级学生具有一定的认知能力、动手能力和逻辑思维能力,对新鲜事物充满好奇。
教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的主观能动性,引导学生在实践中探索、发现、解决问题。
将课程目标分解为具体的学习成果,以便在教学设计和评估中实现课程目标的有效落实。
二、教学内容1. 电子时钟基本原理:电子时钟的工作原理、主要部件(如晶体振荡器、分频器、计数器、显示器件等)及其功能。
教材章节:《电子技术》第五章第二节2. 时间概念与电子时钟设置:时、分、秒的概念,电子时钟的时间设置与调整方法。
教材章节:《电子技术》第五章第三节3. 电子时钟设计与制作:电子时钟的设计流程、电路连接方法,以及组装与调试技巧。
教材章节:《电子技术》第五章第四节、第五节4. 时钟程序编写与优化:基于电子时钟原理,进行简单的时钟程序编写与调试。
教材章节:《电子技术》第五章第六节5. 实践操作与作品展示:学生分组进行电子时钟的组装、调试,展示作品并进行评价。
教材章节:《电子技术》第五章实践环节教学进度安排:第一课时:电子时钟基本原理及主要部件介绍第二课时:时间概念与电子时钟设置方法第三课时:电子时钟设计与制作(一)第四课时:电子时钟设计与制作(二)第五课时:时钟程序编写与优化第六课时:实践操作与作品展示教学内容确保科学性和系统性,结合教材章节,以理论与实践相结合的方式进行教学,旨在帮助学生掌握电子时钟相关知识,培养动手能力与创新能力。
c时钟课程设计
c 时钟课程设计一、教学目标本课程旨在让学生掌握C时钟的基本知识和技能,包括时钟的构造、工作原理以及如何正确使用和维护时钟。
同时,通过实践操作和问题解决,培养学生的动手能力和团队协作精神,提升他们对时间的认识和珍惜时间的意识。
具体来说,知识目标包括:1.了解时钟的历史发展和主要类型。
2.掌握时钟的构造要素,如机芯、表盘、指针等。
3.理解时钟的工作原理,包括机械钟表和电子钟表的运作方式。
4.学会正确设置和校准各种类型的时钟。
技能目标涉及:1.能够识别不同的时钟类型和品牌,并了解其特点。
2.掌握基本的时钟维修和保养技巧。
3.学会使用相关的工具和仪器进行时钟的安装和调试。
4.具备分析时钟故障的能力,并能提出解决方案。
情感态度价值观目标则包括:1.培养学生对时钟艺术的欣赏能力和对时间文化的尊重。
2.增强学生对时间的敏感性和管理能力,形成良好的时间观念。
3.培养学生细致观察、耐心等待和负责守时的品质。
4.通过团队合作,培养学生的沟通协作和互助精神。
二、教学内容本课程的教学内容将依据课程目标进行,主要包括以下几个方面:1.时钟的起源与发展:介绍时钟的历史背景,重点讲解古代、现代以及电子时钟的发展历程。
2.时钟的构造与工作原理:详细解析时钟的各个组成部分,如齿轮系统、发条、摆轮等,并通过图示和实物展示来讲解其工作原理。
3.时钟的类型与特点:对比讲解机械钟表、石英钟表和数字电子钟表的构造、功能和适用场合。
4.时钟的使用与维护:教授如何正确使用各种类型的时钟,并传授日常维护和保养的知识与技巧。
5.时钟故障分析与维修:通过案例分析,讲解常见的时钟故障及其原因,介绍故障排除的方法和步骤。
三、教学方法为了提高教学效果,我们将采用多样化的教学方法,包括:1.讲授法:用于讲解时钟的发展史、工作原理等理论性内容。
2.案例分析法:通过分析具体的时钟故障案例,让学生学会诊断和解决问题。
3.实验操作法:学生亲自动手,进行时钟的组装、调试和维护,增强实践能力。
vc++电子时钟课程设计
VisualC++通信平台实训报告学院:信息与通信工程学院专业:通信工程班级:通信111学号:2011136108姓名:李晶项目名称:电子时钟的设计一.项目内容编写一个带有“时间”菜单项的单文档应用程序。
“时间”菜单项中分别包含“时”“分”和“秒”3 个选项,选择这些选项,可以在视图窗口中分别显示当前系统时间的小时、分钟及秒。
并创建一个新的工具栏,添加分别与“时”“分”和“秒”3 个菜单相对应的按钮,在工具栏里创建一个“时间”按钮,使得能在状态栏上显示当前的系统时间。
要求:工具栏上的按钮和菜单项的命令要求统一,视图窗口显示的时间为动态显示。
提示:主要涉及菜单栏、工具栏和状态栏资源,使用定时器控制时间。
二.步骤步骤(1)根据MFC应用程序的方法,利用MFC App Wizard创建一个单文档应用程序,命名为7Time;(2)添加菜单项”时间”,并在”时间”下有”时”,”分”,”秒”三个菜单,如图:并修改其ID值:标识号(ID ) 标题(Caption )消息响应函数时间(&T)ID_VIEW_HOU R时(&H)OnViewHour()ID_VIEW_MINU TE分(&M)OnViewMinute()ID_VIEW_SECO ND秒(&S)OnViewSecond()并添加相应函数. 新建新的工具栏:并设置各按钮的ID 标识号(ID ) 消息响应函数 ID_TIME OnToolTime() ID _HOUR OnToolHour() ID _MINUTE OnToolMinute() ID _SECONDOnToolSecond()由于需要新建一个新的工具栏所以到MainFrm.h 中添加:CToolBar m_wndToolBar1;并到MainFrm.cpp 中添加: if (!m_wndToolBar1.Create(this) || !m_wndToolBar1.LoadToolBar(IDR_TimeBAR)){ TRACE0("Failed to create toolbar\n");return -1; // fail to create}m_wndToolBar1.ModifyStyle(0, TBSTYLE_FLAT);…….m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);DockControlBarLeftOf(&m_wndToolBar1,&m_wndToolBar);为了实现新的工具栏可以出现在老工具栏的右侧,所以才头文件中添加void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf) {CRect rect;DWORD dw;UINT n;RecalcLayout(TRUE);LeftOf->GetWindowRect(&rect);rect.OffsetRect(1,0);dw=LeftOf->GetBarStyle();n = 0;n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;DockControlBar(Bar,n,&rect);}为了实现动态显示时间的效果,所以建立计时器添加计时器实现函数显示时钟接下来添加个按钮的实现函数: 再添加工具栏按钮的实现功能: 最后在程序结束时终止计时器4: void CMainFrame::OnClose() {KillTimer(4);CFrameWnd::OnClose();}三.程序运行结果。
c语言实现电子时钟_课程设计
c语言实现电子时钟_课程设计题目: c语言实现电子时钟1课程设计的任务和具体要求1( 掌握利用c语言相关函数开发电子时钟的基本原理,为进一步开发高质量的程序打下坚实的基础。
提高运用c语言解决实际问题的能力。
2( 了解计算机图形学的相关算法。
3( 了解计算机图形学的相关函数的使用。
指导教师签字: 日期: 指导教师评语成绩: 指导教师签字: 日期:2课程设计所需软件、硬件等Windows xp win-TC课程设计进度计划起至日期工作内容备注 2010年12月1日-2010收集资料年12月20日2010年12月20日-2010编写程序年12月26日参考文献、资料索引序号文献、资料名称编著者出版单位a. 姜灵芝等.c语言课程设计案例精编.北京:清华大学出版社.2008b. 胡景春等。
大学生计算机课程实践优秀作品选编.南京:东南大学出版社.20103摘要:我们日常生活中有各种各样的时钟,随着计算机的普及和计算机科学的飞速发展,人们开始越来越多的利用计算机解决实际问题。
开发一个易于查看的时钟有较大的现实意义。
该时钟只实现简单的界面,程序与生活紧密结合,体直观开发简单。
利用c语言编辑源程序,再进行编译连接生成可执行文件,运行时可看见漂亮的外观。
一 .设计课题:电子时钟课程设计二.设计目的:本程序中涉及时间结构体,数组、绘图等方面的知识,通过本程序的训练,使我们有一个更深刻的了解,掌握利用c语言相关函数开发电子时钟的基本原理,为进一步开发高质量的程序打下坚实的基础。
提高运用c语言解决实际问题的能力。
三.设计内容:(1) 欢迎界面,以一个笑脸开始(2)主界面,包括数字时钟和电子时钟和按键提示。
(3)设计者介绍和功能提示。
四.总体设计:电子时钟是针对人们判断时间的落后和不准确性,通过利用计算机来实行对时间的系统计算,增加了准确性。
在软件的总体设计中采用自上而下,逐步细化,模块化设计,结构化编码方式进行。
系统结构图电子时钟时界按钟数面键动字显控画时示制处钟模模理模块块模块块1五.详细设计:(1)电子时钟执行主流程首先,程序调用initgraph()函数,使系统进入图像模式,然后通过使用line(),arc(),outtextxy(),和circle()等函数来绘制主窗口及电子时钟界面,然后调用clockhandle()函数来处理时钟的运转及数字时钟的显示。
c语言版电子时钟
1.设计要求:1).能够显示时、分、秒的六位数值,实行24小时制。
2).具有方便的调时功能。
3).具有一定的稳定性。
2.总体设计框图由外部晶振电路产生稳定的脉冲送入单片机,单片机调用程序经过驱动模块显示时间。
通过开关模块调用程序可以方便的调整时间。
当程序执行错误时可以用上电复位模块让其重新开始执行。
3.分块介绍晶振电路:外部晶振电路可以使单片机保持稳定的频率,使时间显示的更加稳定、准确。
其两个输出分别接单片机的18、19脚。
复位电路:当单片机执行程序出现错误时,由上电复位电路使其从程序的开始重新执行,确保程序运行的正常。
单片机:单片机通过调用程序经驱动模块到显示模块显示,外部按键通过一定电路给予单片机信号而使单片机执行程序而改变显示数字。
单片机的18、19引脚接外部脉冲信号。
9脚接复位电路。
12、15、16、17接开关模块。
P0口接显示器的段选口,P2口接位选口。
开关模块:秒调时开关接15脚,分调时开关接16脚,时调时开关接17脚。
它们共同连接在低电平上。
由于内部程序设定当P3.5口为低电平时启动外部中断0,可以进行秒调时。
而且按一下加1,而分、时调节同理。
驱动模块:74LS245芯片是用来驱动显示模块的,它的A口接P0口的输出,B口把信号送入显示器的段选端。
它是8路同相三态双向总线收发器,可双向传输数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
片选端低电平有效时,=“1”信号由A 向B 传输。
显示模块:7SEG-MPX8-CC-BLUE是共阴极数码管显示器,它左下侧的abcdefg dp 是LED数码管显示器的I/O口,是段选信号,右下侧的12345678是它的位选信号,就是从左到右分别是第一位到第八位,段选信号与位选信号分别接到单片机的不同输出口,段选信号接到P0口,位选信号接到驱动的B口,由于P2口被赋予初值07FH,而且一小段时间循环右移一位,从而导致同一时间只能显示一位数字,不过由于移位时间非常短,所以我们能看到8位都显示了。
推荐 C语言课程设计(电子时钟) 精品
摘要就钟表的演变历史而言,它大致可以分为3个演变阶段,第一,从大型钟向小型钟演变;第二,从小型钟向袋表过渡;第三,从袋表象腕表发展。
每一阶段的发展都和当时的技术发明有着十分紧密的联系,同时它也是各个不同时期的科学家和钟表工匠智慧的结晶。
钟和表通常是以内机的大小来区别的。
按国际惯例,机芯直径超过50mm、厚度超过12mm的为钟;直径37~50mm、厚度4~6mm者,称为怀表;直径37mm以下为手表;最坚固、最精密的机械之一。
现代钟表的原动力有机械力和电力两种。
机械钟表是一种用重锤或弹簧的释放能量为动力,推动一系列齿轮运转,借助调速器调节轮系转速,以指针指示时刻和计量时间的计算器。
在生活进步的今天,电子时钟正成为人们生活的一部分,特别是应用在如火车站之类的公共场所,其用途不言而喻。
关键词: 模拟系统; 电子时钟; 时间修改.目录一. 设计过程1. 程序功能 (3)2.程序设计 (3)1)设计思路 (3)2)数据结构 (3)3)主函数 (4)4)流程图 (4)3.程序运行及分析 (8)4.运行结果 (9)二. 源代码 (10)1.程序预处理 (11)2. 主函数 (11)3. 时钟动画处理模块 (14)4.时钟按键控制模块 (15)5.数字时钟处理模块 (19)三. 设计总结 (22)四. 参考文献 (23)课程设计(电子时钟) 一.设计过程 1. 程序功能随着社会的进步和科技的发展,电子时钟逐渐成为人们生活中不可缺少的一部分,下面介绍一种电子时钟的设计和实现。
其基本功能模块图如图2.程序设计1) 设计思路程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。
在电子时钟程序中,重点和难点在于时、分、秒针坐标值得计算和时钟指针的运行控制,旨在了解C 语言图形模式下的编程,了解系统的绘图机数据结构等方面的知识。
利用几个模块现实时钟的运转,并可在界面进行时间的更改。
c电子时钟课程设计
c 电子时钟课程设计一、课程目标知识目标:1. 学生能够理解电子时钟的基本原理,掌握电子时钟的组成、功能及工作流程。
2. 学生能够运用所学知识,分析并设计简单的电子时钟电路。
3. 学生能够解释电子时钟显示时间的原理,理解时、分、秒之间的换算关系。
技能目标:1. 学生能够运用电子元件,如集成电路、晶体管、LED灯等,动手搭建一个简易的电子时钟。
2. 学生能够通过编程软件,设计并实现电子时钟的显示功能。
3. 学生能够运用所学知识,解决电子时钟在实际应用中遇到的问题。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学生的创新意识和探索精神。
2. 培养学生团队协作意识,提高学生在团队中沟通、协作的能力。
3. 培养学生关注社会发展,了解电子时钟在生活中的应用,认识到科技对生活的影响。
本课程针对中学生设计,结合学生好奇心强、动手能力逐步提高的特点,注重理论与实践相结合,以培养学生的创新能力和实际操作能力为核心。
课程目标具体、可衡量,旨在帮助学生掌握电子时钟相关知识,提高实践技能,培养科学素养,为后续学习打下坚实基础。
二、教学内容本课程教学内容主要包括以下几部分:1. 电子时钟基本原理:介绍电子时钟的组成、工作原理,包括时钟电路、振荡器、分频器、计数器等。
2. 电子时钟电路设计:讲解如何使用集成电路、晶体管、LED灯等元件搭建电子时钟,分析电路图,明确各部分功能。
3. 编程设计:教授如何使用编程软件(如Arduino、Scratch等)设计电子时钟程序,实现时、分、秒的显示功能。
4. 电子时钟制作与调试:指导学生动手制作简易电子时钟,学会调试电路,解决问题,确保电子时钟正常运行。
5. 电子时钟应用与拓展:探讨电子时钟在生活中的应用,了解其发展趋势,激发学生创新意识。
教学内容与课本章节关联如下:1. 电子时钟基本原理——对应教材第3章“数字电路基础”2. 电子时钟电路设计——对应教材第4章“数字电路设计”3. 编程设计——对应教材第5章“微控制器及应用”4. 电子时钟制作与调试——对应教材第6章“电子制作与调试”5. 电子时钟应用与拓展——对应教材第7章“现代电子技术应用”教学进度安排:共5个课时,第1-2课时学习基本原理和电路设计,第3-4课时进行编程设计和制作调试,第5课时进行应用与拓展讨论。
C语言课程设计--电子时钟
对于这次程序我设计的是电子表而不是机械表走动, 相对而言来说前者较简 单,但是里面运用的知识比较多, 这要求比较高, 这就使得平时要上机训练的多, 在这过程中要十分细致不得丝毫马虎。多上机,多实践,多学习,多思考,全面 掌握这门课程。
4.2
截图
第五章 课程设计心得与体会
通过将近三个星期的上机实践学习, 使我对C语言有了更进一步的认识和了 解,通过实践, 我也发现我的好多不足之处, 在这过程中我认识到如果想有效的 进行程序设计, 正确地应用Байду номын сангаас序设计语言表达算法, 必须准确的运用程序设计语 言,掌握其语法知识。同时学习程序设计必须重视时间环节,多读程序,多编写 程序,多上机实践。 这次的课程设计就使得课堂教学、 式样和实践之间的关系更 为紧密。
从拿到题目到完成整个编程, 从理论到实践可以学到很多很多的东西, 同时 不仅可以巩固了以前所学过的知识, 而且学到了很多在书本上所没有学到过的知 识。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识 是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论, 才能真正为社会服务, 从而提高自己的实际动手能力和独立思考的能力。 在课程 设计中也难免会遇到过各种各样的问题, 同时在设计的过程中也发现了自己的不 足之处,对所学过的知识理解得不够深刻, 掌握得不够牢固, 通过这次课程设计 之后,一定把所学过的知识重新温故。
5.设计完成后提交课程设计报告。
第二章 课程设计任务内容
c电子钟的课程设计
c 电子钟的课程设计一、课程目标知识目标:1. 学生能够理解电子钟的基本原理和组成部分,掌握其工作原理。
2. 学生能够掌握电子钟中关键元件如时钟芯片、晶体振荡器等的功能和作用。
3. 学生能够描述电子钟的时间计数、显示和调整功能。
技能目标:1. 学生能够运用所学知识,设计简单的电子钟电路,并进行组装和调试。
2. 学生能够通过实际操作,学会使用万用表、电烙铁等基本电子工具。
3. 学生能够运用电子钟相关知识,解决实际生活中的时间测量问题。
情感态度价值观目标:1. 学生通过学习电子钟的制作,培养对电子技术的兴趣和爱好,激发创新意识。
2. 学生在团队协作中,学会互相帮助、共同解决问题,培养合作精神和沟通能力。
3. 学生能够关注电子钟在日常生活中的应用,认识到科技对生活的影响,提高科技素养。
课程性质:本课程为实践性强的学科,结合理论知识与动手操作,培养学生电子技术的基本技能。
学生特点:六年级学生具有一定的电子知识基础和动手能力,对新鲜事物充满好奇心。
教学要求:教师需注重理论与实践相结合,关注学生个体差异,引导学生主动探究,提高学生的实践能力和创新能力。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容本课程依据课程目标,选择以下教学内容:1. 电子钟基本原理:讲解电子钟的工作原理,包括时钟芯片、晶体振荡器、计数器、显示电路等组成部分。
2. 电子元件识别与使用:学习常用电子元件如电阻、电容、二极管、三极管等的识别和使用方法。
3. 电子钟电路设计:学习电子钟电路图的绘制,分析电路中各部分的功能和连接方式。
4. 电子钟组装与调试:动手实践,组装电子钟,学会使用万用表、电烙铁等工具进行调试。
5. 电子钟程序设计:学习编写简单的电子钟程序,实现时间计数、显示和调整功能。
教学内容安排和进度:第一课时:电子钟基本原理,时钟芯片和晶体振荡器介绍。
第二课时:电子元件识别与使用,分析电子钟电路图。
c电子时钟课程设计
c电子时钟课程设计一、课程目标知识目标:1. 学生能够理解电子时钟的构成和工作原理,掌握基础电子元件的作用。
2. 学生能够阐述数字电路的基本概念,并运用至电子时钟的制作中。
3. 学生能够解释电子时钟显示时间的原理,包括时、分、秒的计算与显示。
技能目标:1. 学生能够运用所学知识,设计并搭建简单的电子时钟电路。
2. 学生能够通过编程,实现电子时钟的时、分、秒显示功能。
3. 学生能够熟练使用相关工具和仪器,进行电子时钟的组装和调试。
情感态度价值观目标:1. 学生培养对电子科学的兴趣,提高学习主动性和探究精神。
2. 学生培养团队协作意识,学会与他人共同解决问题。
3. 学生培养创新思维,敢于尝试新方法,勇于面对挑战。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握电子时钟相关知识的基础上,提高实践操作能力,培养科学素养和创新能力。
通过具体的学习成果分解,教师可针对不同学生的学习情况进行教学设计和评估,确保课程目标的实现。
二、教学内容本课程教学内容围绕电子时钟的设计与制作展开,依据课程目标,教学内容分为以下三个部分:1. 电子时钟基础知识:- 电子元件:介绍常用电子元件如电阻、电容、二极管、三极管等,以及它们在电子时钟中的作用。
- 数字电路:讲解基本逻辑门、触发器、计数器等数字电路原理,为电子时钟设计打下基础。
- 教材章节:参照课本第3章“数字电路基础”和第4章“常用电子元件及其应用”。
2. 电子时钟设计与制作:- 设计原理:讲解电子时钟工作原理,包括时、分、秒计数及显示方法。
- 制作实践:指导学生进行电子时钟电路设计、编程、组装和调试。
- 教材章节:参照课本第6章“数字电路应用实例”和第7章“电子时钟设计与制作”。
3. 技能训练与创新能力培养:- 实践操作:训练学生熟练使用工具、仪器进行电子时钟组装和调试。
- 创新设计:鼓励学生尝试改进电子时钟设计,发挥创新思维。
- 教材章节:参照课本第8章“实践与创新”相关内容。
电子时钟 程序设计 报告
一、功能分析启动程序时,窗体标题栏以特定格式显示当前时间,时针、分针、秒针能按照系统时间正确显示。
二、界面设计1、主界面截图2、控件及初始属性设置三、数据结构设计全局变量和模块级变量四、功能实现1、Form1模块(1)Form1标题栏显示当前时间过程此过程代码在Timer事件下编写。
先取一个变量a,利用Hour(N)函数提取当前时间的小时数并赋值给a,再用if选择结构判断当前是上午还是下午,并把当前小时按“上午/下午## ”的格式赋值给变量b,再取一个变量c,用Minute(N)函数提取当前时间的分钟数赋值给c,并用format函数使分钟数按“##”的格式显示出来。
最后b与c两个变量强制连接起来赋值给窗体的caption属性即可在特定格式下显示当前时间。
(2)建立坐标系及控件定位过程此过程代码在Form_Load事件下编写。
建立坐标系:建立坐标系只需将窗体左上角和右下角的坐标确定下来即可,为使坐标原点位于窗体的正中间,我们把左上角坐标定为(-300,200),右下角坐标定为(300,-200)。
控件定位:在建好新的坐标系的基础下,对于形状控件,只需将控件的left属性赋值为-width/2,top属性赋值为height/2就能使控件位于窗体正中间了,而对于直线控件则只需将控件的X1及Y1的属性值取为0就行了。
(3)指针旋转过程此过程代码在Timer事件下编写。
1、原理秒针每秒转动π/30弧度,而分针则每分转动π/30弧度,时针每小时转动π/6弧度。
每隔1秒通过调用系统函数second、Minute、Hour获取系统时间Time的秒、分、时,算出三个指针的末端在各自运动轨迹(圆周)上的坐标,定时改变三个直线控件line1、line2和line3的x1,y1,x2,y2属性值即可实现指针的转动。
2、指针末端坐标的计算当前时间的秒数为second(time),秒针相对于Y轴的正向转过的角度为β=second (time)*π/30(弧度),而秒针与X轴正向的夹角为:π/2-β=π/2-second(time)* π/30,控件line1的终点坐标X2、Y2为:X2 = r1*Cos (π / 2 – Second (Time) *π / 30)Y2 = r1*Sin(π/ 2 – Second (Time) *π/ 30)同理line1的起点坐标X1、Y1为:X1 = r* Cos(π/ 2 - Second(Time) * PI / 30)Y1 = r * Sin(π/ 2 - Second(Time) * PI / 30)其中r为与指针相连的小圆点的半径。
电子钟设计(c语言设计)
计算机工程实践实习报告专业:班级:姓名:学号:指导老师:设计时间:指导教师对实习报告的评语指导教师签字:年月日一前言漫步在繁华的现代化的大都市的大街上,随时都可以看到街上有很多可以用卡取钱的机器(ATM自动柜员机),十字路口的交通灯。
我们的手机,我们家里数码电视机、数码音响、遥控器、空调、智能玩具.....这些“高科技”看上去是如此的神秘,它到底是怎样构成的,它是通过什么样的程序和什么样的方式来完成这一系列指令的呢?让我们取钱更方便、避免城市的交通混乱和交通阻塞……给我们生活带来了处处方便。
其实这也是用单片机来控制的,单片机在我们生活中触手可及,它是如此地贴近我们的生活,单片机给我们的生活带来的有如此多的便利。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
科技越发达,智能化的东西就越多,使用的单片机就越多。
看来学单片机是社会发展的需求。
据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。
特别是沿海地区的玩具厂等生产产品多数用到单片,并不断地辐射向内地, 这说明单片机应用在我国才刚刚起步,有着广阔的前景。
培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。
面对着学习单片机一个终生受用的职业,不受年龄的限制。
同时面对着生活的现代化,我们衣、食、住、行也就越来越依赖各式各样的“高科技”了,也就有很多地方都用到高集成电路IC和单片机。
c语言电子时钟课程设计
c语言电子时钟课程设计一、课程目标知识目标:1. 理解C语言中结构体、函数和循环控制的使用,掌握电子时钟的基本原理。
2. 学习并掌握使用C语言编写程序,实现电子时钟的功能,包括时、分、秒的显示与更新。
3. 了解C语言中定时器功能的使用,实现电子时钟的自动更新。
技能目标:1. 能够运用所学知识,独立设计并编写一个简单的C语言电子时钟程序。
2. 培养学生的编程实践能力,提高问题分析和解决能力。
3. 学会使用调试工具,对程序进行调试和优化,提高程序运行的稳定性。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习主动性。
2. 培养学生的团队合作意识,学会与他人共同解决问题,相互学习和进步。
3. 培养学生的创新精神,敢于尝试新方法,勇于克服困难,不断优化程序。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,使学生能够学以致用。
学生特点:学生已具备一定的C语言基础,了解基本语法和编程思路,但对实际应用还不够熟练。
教学要求:结合学生特点,注重理论与实践相结合,提高学生的编程实践能力,培养学生的问题分析和解决能力。
在教学过程中,关注学生的个体差异,给予个性化指导。
通过课程学习,使学生能够独立完成一个具有实际意义的编程项目。
二、教学内容1. 复习C语言基础:变量、数据类型、运算符、控制结构(章节1-4)。
2. 结构体与指针:介绍结构体的定义和使用,指针的概念和操作(章节5)。
3. 函数:回顾函数的定义、调用和参数传递,强调模块化编程的重要性(章节6)。
4. 循环控制:深入学习for循环和while循环,理解其在电子时钟中的应用(章节7)。
5. 定时器与时间处理:介绍定时器原理,时间处理函数的使用(章节8)。
6. 电子时钟编程实践:结合所学知识,设计并实现电子时钟程序。
- 显示部分:编写代码实现时、分、秒的显示(课时1)。
- 更新部分:实现时间递增,每秒更新显示(课时2)。
- 定时器应用:使用定时器自动更新时间,减少资源消耗(课时3)。
c数字时钟课程设计
c 数字时钟课程设计一、课程目标知识目标:1. 学生能够理解数字时钟的基本概念,掌握时、分、秒之间的换算关系。
2. 学生能够运用所学知识,分析并描述数字时钟的显示原理。
3. 学生能够熟练运用编程语言实现数字时钟的基本功能。
技能目标:1. 学生能够运用所学知识,设计并制作一个简单的数字时钟界面。
2. 学生能够通过编程,实现数字时钟的时、分、秒显示功能。
3. 学生能够运用问题解决策略,调试并优化数字时钟程序,提高程序运行效率。
情感态度价值观目标:1. 学生在课程学习中,培养对电子产品的兴趣,激发创新意识。
2. 学生通过团队协作,培养沟通与协作能力,增强集体荣誉感。
3. 学生在解决实际问题的过程中,培养勇于尝试、不断探索的精神风貌。
课程性质:本课程为信息技术课程,旨在通过数字时钟的制作,使学生掌握信息技术基础知识,提高编程技能,培养创新意识和团队协作能力。
学生特点:五年级学生,具备一定的信息技术基础,对编程和电子产品有一定兴趣,喜欢动手实践,但需进一步培养问题解决能力和团队协作精神。
教学要求:注重理论与实践相结合,引导学生主动参与,鼓励学生动手实践,关注个体差异,提高学生综合素质。
在教学过程中,将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 数字时钟基础知识:- 时、分、秒的概念及换算关系;- 数字时钟的显示原理;- 数字时钟的硬件和软件组成。
2. 编程语言基础:- 选择适合五年级学生的编程语言(如Scratch或Python);- 基本编程语法和数据类型;- 控制结构和函数的使用。
3. 数字时钟设计与制作:- 数字时钟界面设计;- 编程实现数字时钟的时、分、秒显示功能;- 调试和优化程序。
4. 教学内容的安排与进度:- 第一课时:数字时钟基础知识学习;- 第二课时:编程语言基础学习;- 第三课时:数字时钟界面设计;- 第四课时:编程实现数字时钟功能;- 第五课时:程序调试与优化。
面向对象程序设计课程设计报告《电子时钟》C++
目录1 前言 (1)2 需求分析 (1)2.1 要求 (1)2.2 任务 (1)2.3 运行环境 (1)2.4 开发工具 (1)3 分析和设计 (1)3.1 系统分析及设计思路 (1)3.2 主要类图 (3)3.3 函数流程图 (3)4 具体代码实现 (4)5 课程设计总结 (26)5.1 程序运行结果或预期运行结果 (26)5.2 设计结论 (27)参考文献 (27)致谢 (27)1 前言时钟在人们日常生活中必不可少,时钟的原理是怎么样的呢,本程序将模拟一个电子时钟;为了使程序更加美观,本程序是使用Visual C++编写一个可视化的模拟电子时钟程序;电子时钟的关键在于延时,为了达到延时的准确性,不受程序执行时间的影响,采用了系统两秒之间的间隔进行延时;该程序还加入了显示星期功能,在知道1901年每月1号是星期几的情况下,再根据年、月、日即可算出星期几;2需求分析2.1 要求设计类结构,模拟电子时钟的行走,在屏幕上显示一个活动时钟;2.2任务1显示日期的格式:XXXX年XX月XX日2显示时间的格式:XX:XX:XX;3添加显示星期的格式:星期X2.3 运行环境1WINDOWS2000/XP系统2Visual C++ 6.0编译环境或DEV C++ 5.0编译环境2.4 开发工具C++语言3分析和设计+3.1 系统分析及设计思路为了使程序的显示更加美观,该程序使用了C++可视化程序设计方法进行设计;在可视化程序设计中,建立了一个MFC单文档应用程序工程,该工程包括了视图类、文档类对话框类和主框架类;在主框架类中修改窗口等属性,使整个时间的显示更加协调;模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成模拟电子时钟的功能;文档类定义时钟的相关属性,包括int类型的year、month、day、hour、minute、second,和包括CString类型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息;int类型的时间日期属性用以计算,CSrting类型的时间日期属性用以显示,通过CString类中的成员函数Formart可以把int型的数据转成CString型的;视图类实现时钟的主要功能,在该类的OnDraw函数里面对时间日期进行显示输出;向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度;为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时间间隔一致;每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对时间加一秒;通过一个计时器消息,使视图50ms刷新一次,以保证时间的准确性;在视图类中需要添加几个方法:用于计算时间的方法RunTime、计算星期的方法Week、int型转CString型的方法Change、获取系统时间的方法GetDateTime、重获系统时间方法OnReset和计时器消息;在计算时间日期的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,同样的方法对hour、day、month和year进行计算,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年;在确定年、月、日之后,使用函数Week进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几;在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置;在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除;3.2 主要类图+CDateTimeDoc()+year +month +day +hour +minute +second +strCDateTimeDoc +CDateTimeView()+OnDraw()+Week()+RunTime()+Change()+GetDateTime()-flag -_sec1-_sec2CDateTimeView +OnInitDialog()+OnOK()-year -day -hour -minute -month -secondCSetting 依赖图3.1 主要类图3.3 函数流程图OnDraw 函数流程图如图3.2所示:图3.2 OnDraw 函数流程图4 具体代码实现// MainFrm.h文件,负责主窗口框架的显示class CMainFrame : public CFrameWnd{protected: // create from serialization onlyCMainFrame;DECLARE_DYNCREATECMainFramepublic:virtual BOOL PreCreateWindowCREATESTRUCT& cs;public:virtual ~CMainFrame;ifdef _DEBUGvirtual void AssertValid const;virtual void DumpCDumpContext& dc const;endifprotected: // control bar embedded membersCStatusBar m_wndStatusBar;CToolBar m_wndToolBar;protected:afx_msg int OnCreateLPCREATESTRUCT lpCreateStruct;DECLARE_MESSAGE_MAP};endif// MainFrm.cpp文件include "stdafx.h"include "DateTime.h"include "MainFrm.h"ifdef _DEBUGdefine new DEBUG_NEWundef THIS_FILEstatic char THIS_FILE = __FILE__;endifIMPLEMENT_DYNCREATECMainFrame, CFrameWndBEGIN_MESSAGE_MAPCMainFrame, CFrameWndON_WM_CREATEEND_MESSAGE_MAPstatic UINT indicators ={ID_SEPARATOR, // status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};CMainFrame::CMainFrame{}CMainFrame::~CMainFrame{}int CMainFrame::OnCreateLPCREATESTRUCT lpCreateStruct{if CFrameWnd::OnCreatelpCreateStruct == -1return -1;if m_wndToolBar.CreateExthis, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC ||m_wndToolBar.LoadToolBarIDR_MAINFRAME{TRACE0"Failed to create toolbar\n";return -1;}m_wndToolBar.EnableDockingCBRS_ALIGN_ANY;EnableDockingCBRS_ALIGN_ANY;ShowControlBar&m_wndToolBar,FALSE,FALSE; //隐藏工具栏return 0;}BOOL CMainFrame::PreCreateWindowCREATESTRUCT& cs{if CFrameWnd::PreCreateWindowcsreturn FALSE;cs.style=WS_OVERLAPPED|WS_SYSMENU; //禁止调整窗口大小cs.style=WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX;return TRUE;}ifdef _DEBUGvoid CMainFrame::AssertValid const{CFrameWnd::AssertValid;}void CMainFrame::DumpCDumpContext& dc const{CFrameWnd::Dumpdc;}endif //_DEBUG// DateTime.h文件ifdefinedAFX_DATETIME_H__6CD6B4B6_BC79_4328_8187_EE6FCD7FEB17__INCLUDED_ defineAFX_DATETIME_H__6CD6B4B6_BC79_4328_8187_EE6FCD7FEB17__INCLUDED_ if _MSC_VER > 1000pragma onceendif // _MSC_VER > 1000ifndef __AFXWIN_H__error include 'stdafx.h' before including this file for PCH endifinclude "resource.h" // main symbolsclass CDateTimeApp : public CWinApp{public:CDateTimeApp;public:virtual BOOL InitInstance;afx_msg void OnAppAbout;DECLARE_MESSAGE_MAP};endif// DateTime.cpp文件include "stdafx.h"include "DateTime.h"include "MainFrm.h"include "DateTimeDoc.h"include "DateTimeView.h"ifdef _DEBUGdefine new DEBUG_NEWundef THIS_FILEstatic char THIS_FILE = __FILE__;endifBEGIN_MESSAGE_MAPCDateTimeApp, CWinAppON_COMMANDID_APP_ABOUT, OnAppAboutON_COMMANDID_FILE_NEW, CWinApp::OnFileNewON_COMMANDID_FILE_OPEN, CWinApp::OnFileOpenEND_MESSAGE_MAPCDateTimeApp::CDateTimeApp{}CDateTimeApp theApp;BOOL CDateTimeApp::InitInstance{AfxEnableControlContainer;ifdef _AFXDLLEnable3dControls; // Call this when using MFC in a shared DLL elseEnable3dControlsStatic; // Call this when linking to MFC statically endifSetRegistryKey_T"Local AppWizard-Generated Applications";LoadStdProfileSettings; // Load standard INI file options including MRUCSingleDocTemplate pDocTemplate;pDocTemplate = new CSingleDocTemplateIDR_MAINFRAME,RUNTIME_CLASSCDateTimeDoc,RUNTIME_CLASSCMainFrame, // main SDI frame windowRUNTIME_CLASSCDateTimeView;AddDocTemplatepDocTemplate;CCommandLineInfo cmdInfo;ParseCommandLinecmdInfo;if ProcessShellCommandcmdInforeturn FALSE;m_pMainWnd->ShowWindowSW_SHOW;m_pMainWnd->UpdateWindow;m_pMainWnd->SetWindowPosNULL,0,0,400,250,SWP_SHOWWINDOW;AfxGetMainWnd->CenterWindowCWnd::GetDesktopWindow;//窗口置屏幕中央return TRUE;}class CAboutDlg : public CDialog //对话框类,负责设置时间{public:CAboutDlg;enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchangeCDataExchange pDX; // DDX/DDV support protected:DECLARE_MESSAGE_MAP};CAboutDlg::CAboutDlg : CDialogCAboutDlg::IDD{}void CAboutDlg::DoDataExchangeCDataExchange pDX{CDialog::DoDataExchangepDX;}BEGIN_MESSAGE_MAPCAboutDlg, CDialogEND_MESSAGE_MAPvoid CDateTimeApp::OnAppAbout{CAboutDlg aboutDlg;aboutDlg.DoModal;}// DateTimeDoc.h文件,文档类,定义了文字信息的属性ifdefinedAFX_DATETIMEDOC_H__7CB32F09_D9D2_4ABD_87CA_F51383AFDC67__INCLUDED_ defineAFX_DATETIMEDOC_H__7CB32F09_D9D2_4ABD_87CA_F51383AFDC67__INCLUDED_if _MSC_VER > 1000pragma onceendif // _MSC_VER > 1000class CDateTimeDoc : public CDocument{protected:CDateTimeDoc;DECLARE_DYNCREATECDateTimeDocpublic:int year,month,day,hour,minute,second; //定义int型变量用以计算时间CString str_year,str_month,str_day,str_hour,str_minute,str_second; //定义CString型变量用以显示CString str1,str2,str3;public:virtual BOOL OnNewDocument;virtual void SerializeCArchive& ar;public:virtual ~CDateTimeDoc;ifdef _DEBUGvirtual void AssertValid const;virtual void DumpCDumpContext& dc const;endifprotected:protected:DECLARE_MESSAGE_MAP};endif// DateTimeDoc.cpp 文件include "stdafx.h"include "DateTime.h"include "DateTimeDoc.h"ifdef _DEBUGdefine new DEBUG_NEWundef THIS_FILEstatic char THIS_FILE = __FILE__;endifIMPLEMENT_DYNCREATECDateTimeDoc, CDocumentBEGIN_MESSAGE_MAPCDateTimeDoc, CDocumentEND_MESSAGE_MAPCDateTimeDoc::CDateTimeDoc{day=1;month=0;year=110;hour=0;minute=0;second=0;str_year=" ";str_month=" ";str_day=" ";str_hour=" ";str_minute=" ";str_second=" ";str1=" ";str2=" ";str3=" ";}CDateTimeDoc::~CDateTimeDoc{}BOOL CDateTimeDoc::OnNewDocument{if CDocument::OnNewDocumentreturn FALSE;return TRUE;}void CDateTimeDoc::SerializeCArchive& ar{if ar.IsStoring{ }else{ }}ifdef _DEBUGvoid CDateTimeDoc::AssertValid const{CDocument::AssertValid;}void CDateTimeDoc::DumpCDumpContext& dc const{CDocument::Dumpdc;}endif //_DEBUG// DateTimeView.h文件,负责绘图显示和时钟定义主要功能的函数ifdefinedAFX_DATETIMEVIEW_H__D7609974_EA26_4AB5_82B0_A04A15A1C9F2__INCLUDED _defineAFX_DATETIMEVIEW_H__D7609974_EA26_4AB5_82B0_A04A15A1C9F2__INCLUDED_ if _MSC_VER > 1000pragma onceendif // _MSC_VER > 1000include "DateTimeDoc.h"include "Setting.h"class CDateTimeView : public CView{protected:CDateTimeView;DECLARE_DYNCREATECDateTimeViewpublic:CDateTimeDoc GetDocument;private:int flag;int _sec1;int _sec2;public:virtual void OnDrawCDC pDC; // overridden to draw this view virtual BOOL PreCreateWindowCREATESTRUCT& cs;virtual void OnInitialUpdate;public:int Weekint,int,int; //计算星期函数void RunTime; //运行时间函数void Change; //int型转CString函数void GetDateTime; //获取系统时间函数virtual ~CDateTimeView;ifdef _DEBUGvirtual void AssertValid const;virtual void DumpCDumpContext& dc const;endifprotected:protected:afx_msg void OnDestroy;afx_msg void OnTimerUINT nIDEvent;afx_msg void OnSetting;afx_msg void OnReset;afx_msg BOOL OnEraseBkgndCDC pDC;DECLARE_MESSAGE_MAP};ifndef _DEBUGinline CDateTimeDoc CDateTimeView::GetDocument{ return CDateTimeDocm_pDocument; }endif// DateTimeView.cpp 文件include "stdafx.h"include "DateTime.h"include "DateTimeDoc.h"include "DateTimeView.h"ifdef _DEBUGdefine new DEBUG_NEWundef THIS_FILEstatic char THIS_FILE = __FILE__;endifIMPLEMENT_DYNCREATECDateTimeView, CViewBEGIN_MESSAGE_MAPCDateTimeView, CViewON_WM_DESTROYON_WM_TIMERON_COMMANDIDD_SETTING, OnSettingON_COMMANDID_RESET, OnResetON_WM_ERASEBKGNDEND_MESSAGE_MAPCDateTimeView::CDateTimeView{flag=0;_sec1=_sec2=0;}CDateTimeView::~CDateTimeView{}BOOL CDateTimeView::PreCreateWindowCREATESTRUCT& cs {return CView::PreCreateWindowcs;}void CDateTimeView::OnDrawCDC pDC{CDateTimeDoc pDoc = GetDocument;ASSERT_VALIDpDoc;CClientDC dcthis;// 获得窗体大小CRect rect;GetWindowRect▭int nWidth = rect.Width;int nHeight= rect.Height;//在内存中创建一个与屏幕绘图区域一致的对象CDC MemDC;CBitmap MemBitmap;MemDC.CreateCompatibleDCNULL;MemBitmap.CreateCompatibleBitmap&dc, nWidth, nHeight; CBitmap pOldBit = MemDC.SelectObject&MemBitmap;time_t curtime=time0;tm getsec=localtime&curtime;ifflag==0{GetDateTime;_sec1=_sec2=getsec.tm_sec;}curtime=time0;getsec=localtime&curtime;_sec2=getsec.tm_sec;if_sec2=_sec1 //和系统时间比较判断是不是需要加1秒{_sec1=_sec2;RunTime;}MemDC.SetTextColorRGB0,0,255; //文本颜色int cHeight;UINT position=0;CFont font;cHeight=16+38;font.CreateFont-cHeight,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,ANSI_CHA RSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH |FF_MODERN,"NI7SEG"; //字体格式CFont oldFont=MemDC.SelectObject &font;position+=cHeight;flag=1;Change;pDoc->str1=pDoc->str_year+"年"+pDoc->str_month+"月"+pDoc->str_day+"日";pDoc->str2=pDoc->str_hour+":"+pDoc->str_minute+":"+pDoc->str_secon d;CBrush MyBrush;CBrush pOldBrush=pDC->SelectObject&MyBrush;GetClientRect▭MemDC.Rectangle-1,-1,400,260;MemDC.SelectObjectpOldBrush;MemDC.TextOut25,25,pDoc->str1;MemDC.TextOut140,70,pDoc->str3;MemDC.TextOut95,122,pDoc->str2;//将内存中绘制的图像复制到当前设备dc.BitBlt0, 0, nWidth, nHeight, &MemDC, 0, 0, SRCCOPY;MemBitmap.DeleteObject; //销毁对象MemDC.DeleteDC;}ifdef _DEBUGvoid CDateTimeView::AssertValid const{CView::AssertValid;}void CDateTimeView::DumpCDumpContext& dc const{CView::Dumpdc;}CDateTimeDoc CDateTimeView::GetDocument // non-debug version is inline {ASSERTm_pDocument->IsKindOfRUNTIME_CLASSCDateTimeDoc;return CDateTimeDocm_pDocument;}endif //_DEBUGvoid CDateTimeView::GetDateTime //获取系统时间{CDateTimeDoc pDoc = GetDocument;time_t curtime=time0;tm tim =localtime&curtime;pDoc->day=tim.tm_mday;pDoc->month=tim.tm_mon+1;pDoc->year=tim.tm_year+1900;pDoc->hour=tim.tm_hour;pDoc->minute=tim.tm_min;pDoc->second=tim.tm_sec;}void CDateTimeView::Change int型转CString型函数{CDateTimeDoc pDoc = GetDocument;pDoc->str_year.Format"%d",pDoc->year;pDoc->str_month.Format"%d",pDoc->month;pDoc->str_day.Format"%d",pDoc->day;pDoc->str_hour.Format"%d",pDoc->hour;pDoc->str_minute.Format"%d",pDoc->minute;pDoc->str_second.Format"%d",pDoc->second;ifpDoc->month<10 pDoc->str_month="0"+pDoc->str_month;ifpDoc->day<10 pDoc->str_day="0"+pDoc->str_day;ifpDoc->hour<10 pDoc->str_hour="0"+pDoc->str_hour;ifpDoc->minute<10 pDoc->str_minute="0"+pDoc->str_minute;ifpDoc->second<10 pDoc->str_second="0"+pDoc->str_second;switchWeekpDoc->year,pDoc->month,pDoc->day{case 1:pDoc->str3="星期一";break;case 2:pDoc->str3="星期二";break;case 3:pDoc->str3="星期三";break;case 4:pDoc->str3="星期四";break;case 5:pDoc->str3="星期五";break;case 6:pDoc->str3="星期六";break;case 0:pDoc->str3="星期日";break;}}void CDateTimeView::RunTime //时间运行函数{CDateTimeDoc pDoc = GetDocument;pDoc->second++;ifpDoc->second>=60{pDoc->second=0; pDoc->minute++;}ifpDoc->minute>=60{pDoc->minute=0; pDoc->hour++;}ifpDoc->hour>=24{pDoc->hour=0; pDoc->day++;}ifpDoc->month==1||pDoc->month==3||pDoc->month==5||pDoc->month==7|| pDoc->month==8||pDoc->month==10||pDoc->month==12&&pDoc->day>=32 {pDoc->day=1; pDoc->month++;}ifpDoc->month==4||pDoc->month==6||pDoc->month==9||pDoc->month==11& &pDoc->day>=31{pDoc->day=1; pDoc->month++;}ifpDoc->month==2&&pDoc->year%4=0||pDoc->year%100==0&&pDoc->day>=29 {pDoc->day=1; pDoc->month++;}ifpDoc->month==2&&pDoc->day>=30{pDoc->day=1; pDoc->month++;}ifpDoc->month>=13{pDoc->month=1; pDoc->year++;}}void CDateTimeView::OnInitialUpdate //计时器设置{CView::OnInitialUpdate;SetTimer1,50,NULL; //50ms的计时器}void CDateTimeView::OnDestroy{CView::OnDestroy;KillTimer1;//清除计时器}void CDateTimeView::OnTimerUINT nIDEvent{Invalidatefalse; //计时完成,调用Invalidate函数重绘试图CView::OnTimernIDEvent;}void CDateTimeView::OnSetting //设置时间函数{CDateTimeDoc pDoc = GetDocument;CSetting cst;cst.year=&pDoc->year; //把文档类的相应属性赋给编辑框cst.month=&pDoc->month;cst.day=&pDoc->day;cst.hour=&pDoc->hour;cst.minute=&pDoc->minute;cst.second=&pDoc->second;cst.DoModal;}void CDateTimeView::OnReset //重获系统时间函数{GetDateTime;Invalidate;}BOOL CDateTimeView::OnEraseBkgndCDC pDC{return TRUE;}int CDateTimeView::Weekint y,int m,int d //星期计算函数{int g, f=y-1901+y-1901/4+2;switchm{case 1:g=f+d;break;case 2:g=f+d+31;break;case 3:g=f+d+59;break;case 4:g=f+d+90;break;case 5:g=f+d+120;break;case 6:g=f+d+151;break;case 7:g=f+d+181;break;case 8:g=f+d+212;break;case 9:g=f+d+243;break;case 10:g=f+d+273;break;case 11:g=f+d+304;break;case 12:g=f+d+334;break;}ify%4==0&&y%100=0&&m>2 g++;return g-1%7;}ifdefinedAFX_SETTING_H__D569349B_C1DA_4639_BC4F_1B59A0E7C554__INCLUDED_ define AFX_SETTING_H__D569349B_C1DA_4639_BC4F_1B59A0E7C554__INCLUDED_ if _MSC_VER > 1000pragma onceendif // _MSC_VER > 1000// Setting.h文件,对话框类,负责设置时间include "DateTimeView.h"include "DateTimeDoc.h"class CSetting : public CDialog{public:CSettingCWnd pParent = NULL; // standard constructorenum { IDD = IDD_SETTING };CSpinButtonCtrl m_syear;CSpinButtonCtrl m_ssecond;CSpinButtonCtrl m_smonth;CSpinButtonCtrl m_sminute;CSpinButtonCtrl m_shour;CSpinButtonCtrl m_sday;int m_year;int m_day;int m_hour;int m_minute;int m_month;int m_second;int year,month,day,hour,minute,second;protected:virtual void DoDataExchangeCDataExchange pDX; // DDX/DDV support afx_msg void OnChangeEditYear{};afx_msg void OnChangeEditMonth{};afx_msg void OnChangeEditDay{};afx_msg void OnChangeEditHour{};afx_msg void OnChangeEditMinute{};afx_msg void OnChangeEditSecond{};virtual BOOL OnInitDialog;virtual void OnOK;afx_msg void OnOutofmemorySpinYearNMHDR pNMHDR, LRESULT pResult;DECLARE_MESSAGE_MAP};endif// Setting.cpp文件include "stdafx.h"include "DateTime.h"include "Setting.h"ifdef _DEBUGdefine new DEBUG_NEWundef THIS_FILEstatic char THIS_FILE = __FILE__;endifCSetting::CSettingCWnd pParent /=NULL/ : CDialogCSetting::IDD, pParent{m_year = 0;m_day = 0;m_hour = 0;m_minute = 0;m_month = 0;m_second = 0;}void CSetting::DoDataExchangeCDataExchange pDX {CDialog::DoDataExchangepDX;DDX_ControlpDX, IDC_SPIN_YEAR, m_syear;DDX_ControlpDX, IDC_SPIN_SECOND, m_ssecond;DDX_ControlpDX, IDC_SPIN_MONTH, m_smonth;DDX_ControlpDX, IDC_SPIN_MINUTE, m_sminute;DDX_ControlpDX, IDC_SPIN_HOUR, m_shour;DDX_ControlpDX, IDC_SPIN_DAY, m_sday;DDX_TextpDX, IDC_EDIT_YEAR, m_year;DDV_MinMaxIntpDX, m_year, 1900, 2999;DDX_TextpDX, IDC_EDIT_DAY, m_day;DDV_MinMaxIntpDX, m_day, 1, 31;DDX_TextpDX, IDC_EDIT_HOUR, m_hour;DDV_MinMaxIntpDX, m_hour, 0, 23;DDX_TextpDX, IDC_EDIT_MINUTE, m_minute;DDV_MinMaxIntpDX, m_minute, 0, 59;DDX_TextpDX, IDC_EDIT_MONTH, m_month;DDV_MinMaxIntpDX, m_month, 1, 12;DDX_TextpDX, IDC_EDIT_SECOND, m_second;DDV_MinMaxIntpDX, m_second, 0, 59;}BEGIN_MESSAGE_MAPCSetting, CDialogON_EN_CHANGEIDC_EDIT_YEAR, OnChangeEditYearON_EN_CHANGEIDC_EDIT_MONTH, OnChangeEditMonthON_EN_CHANGEIDC_EDIT_DAY, OnChangeEditDayON_EN_CHANGEIDC_EDIT_HOUR, OnChangeEditHourON_EN_CHANGEIDC_EDIT_MINUTE, OnChangeEditMinuteON_EN_CHANGEIDC_EDIT_SECOND, OnChangeEditSecondON_NOTIFYNM_OUTOFMEMORY, IDC_SPIN_YEAR, OnOutofmemorySpinYear END_MESSAGE_MAPBOOL CSetting::OnInitDialog //对话框对编辑框控件的更新和设置{CDialog::OnInitDialog;m_year=year;m_month=month;m_day=day;m_hour=hour;m_minute=minute;m_second=second;m_syear.SetRange1900,2999;m_smonth.SetRange1,12;m_sday.SetRange1,31;m_shour.SetRange0,23;m_sminute.SetRange0,59;m_ssecond.SetRange0,59;UpdateDataFALSE;return TRUE;}void CSetting::OnOK //保存对话框的数据{UpdateData;ifm_year>=1900&&m_year<=2999&&m_month>=1&&m_month<=12&&m_day>=1&&m_day<=31&&m_hour>=0&&m_hour<=23&&m_minute>=0&&m_minute<=59&&m_second>=0&&m_second<=59{year=m_year;month=m_month;day=m_day;hour=m_hour;minute=m_minute;second=m_second;Invalidate;CDialog::OnOK;}}void CSetting::OnOutofmemorySpinYearNMHDRpNMHDR, LRESULT pResult {pResult = 0;}5课程设计总结5.1 程序运行结果或预期运行结果运行程序,画面首先获取系统时间,显示当时时间日期,如图5.1所示;图5.1 主窗口界面此后时间一直在运行,由于采用获取系统两秒之间的间隔进行刷新屏幕,所以计时几乎没误差,如图5.2所示,时间和电脑系统时间一致;图5.2 当前系统时间日期时间设置界面如图5.3所示;图5.3日期时间设置界面5.2 设计结论通过这次面向对象程序设计课程设计,使我加深对类与对象的理解,使我能将学到的面向对象的程序设计思想用到具体的工作和学习中;通过课程设计,我学得了很多书本上没有的知识,比如获取键盘按键消息的函数和延时的设计;在开始设计时,遇到很多问题,就比如延时的问题,尝试了几种方法,但经过对问题的分析和思考,最终把问题解决了,选择了通过获取两秒间隔来计时的方法;所谓读万卷书不如行万里路,编程要靠练习才能学好,这次课程设计让我受益匪浅;参考文献1 张福祥. C语言程序设计M. 辽宁大学出版社,2008.12 马石安,王魏文平.面向对象程序设计教程C++语言描述 M.北京:清华大学社,20073 杨喜林, 杨亮, 杨杨. 可视化程序设计Visual C++ M.北京理工大学出版社,2010.2致谢这次课程设计能够顺利完成,首先非常感谢我们的指导老师陈智,是老师传授我知识,教会我编程的方法和思路,还有感谢一些在我有困难时给予我帮助的同学;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 前言
时钟在人们日常生活中必不可少,时钟的原理是怎么样的呢,本程序将模拟一个电子时钟。
为了使程序更加美观,本程序是使用Visual C++编写一个可视化的模拟电子时钟程序。
电子时钟的关键在于延时,为了达到延时的准确性,不受程序执行时间的影响,采用了系统两秒之间的间隔进行延时。
该程序还加入了显示星期功能,在知道1901年每月1号是星期几的情况下,再根据年、月、日即可算出星期几。
2需求分析
要求
设计类结构,模拟电子时钟的行走,在屏幕上显示一个活动时钟。
任务
(1)显示日期的格式:XXXX年XX月XX日
(2)显示时间的格式:XX:XX:XX。
(3)添加显示星期的格式:星期X
运行环境
(1)WINDOWS2000/XP系统
(2)Visual C++ 编译环境或DEV C++ 编译环境
开发工具
C++语言
3分析和设计
+ 系统分析及设计思路
为了使程序的显示更加美观,该程序使用了C++可视化程序设计方法进行设计。
在可视化程序设计中,建立了一个MFC单文档应用程序工程,该工程包括了视图类、文档类对话框类和主框架类。
在主框架类中修改窗口等属性,使整个时间的
显示更加协调。
模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成模拟电子时钟的功能。
文档类定义时钟的相关属性,包括int类型的year、month、day、hour、minute、second,和包括CString类型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息。
int类型的时间日期属性用以计算,CSrting类型的时间日期属性用以显示,通过CString类中的成员函数Formart可以把int型的数据转成CString型的。
视图类实现时钟的主要功能,在该类的OnDraw函数里面对时间日期进行显示输出。
向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。
为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时间间隔一致。
每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对时间加一秒。
通过一个计时器消息,使视图50ms刷新一次,以保证时间的准确性。
在视图类中需要添加几个方法:用于计算时间的方法RunTime()、计算星期的方法Week()、int型转CString型的方法Change()、获取系统时间的方法GetDateTime()、重获系统时间方法OnReset()和计时器消息。
在计算时间日期的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,同样的方法对hour、day、month和year进行计算,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年。
在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。
在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。
在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。
主要类图
图主要类图
函数流程图
OnDraw函数流程图如图所示:
图 OnDraw函数流程图
4 具体代码实现
C语言程序设计[M]. 辽宁大学出版社,
[2] 马石安,王魏文平.面向对象程序设计教程(C++语言描述) [M].北京:清华大学社,2007
[3] 杨喜林,杨亮,杨杨. 可视化程序设计Visual C++ [M].北京理工大学出版社,
致谢
这次课程设计能够顺利完成,首先非常感谢我们的指导老师陈智,是老师传授我知识,教会我编程的方法和思路,还有感谢一些在我有困难时给予我帮助的同学。