模拟电子时钟c语言课程设计设计报告
c模拟时钟课程设计
c 模拟时钟课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握C语言的基本语法、数据类型、运算符、控制结构等,了解模拟时钟的基本原理和设计方法。
技能目标要求学生能够运用C语言编写简单的模拟时钟程序,培养学生的编程能力和问题解决能力。
情感态度价值观目标培养学生的团队合作意识、创新精神和对计算机科学的兴趣。
二、教学内容教学内容主要包括C语言基础知识、模拟时钟的设计与实现。
详细的教学大纲如下:1.C语言基础知识:介绍C语言的基本语法、数据类型、运算符、控制结构等,为学生编写模拟时钟程序打下基础。
2.模拟时钟的设计与实现:讲解模拟时钟的基本原理,引导学生运用C语言编写模拟时钟程序,培养学生的编程能力和问题解决能力。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C语言基础知识和模拟时钟的设计原理,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队合作能力。
3.案例分析法:分析典型的模拟时钟程序案例,引导学生学会分析问题、解决问题。
4.实验法:让学生动手编写模拟时钟程序,培养学生的实际编程能力和操作技能。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的C语言教材,为学生提供系统的学习资料。
2.参考书:提供相关的C语言编程参考书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的PPT、教学视频等,增强课堂教学的趣味性和生动性。
4.实验设备:为学生提供充足的计算机设备,确保每位学生都能动手实践。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用多元化的评估方式。
评估内容包括平时表现、作业、考试等。
1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和知识掌握程度。
电子时钟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语言编程
课程设计说明书课程设计名称:专业课程设计课程设计题目:电子钟的设计学院名称:信息工程学院专业:电子信息工程班级: 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. 实践操作与作品展示:学生分组进行电子时钟的组装、调试,展示作品并进行评价。
教材章节:《电子技术》第五章实践环节教学进度安排:第一课时:电子时钟基本原理及主要部件介绍第二课时:时间概念与电子时钟设置方法第三课时:电子时钟设计与制作(一)第四课时:电子时钟设计与制作(二)第五课时:时钟程序编写与优化第六课时:实践操作与作品展示教学内容确保科学性和系统性,结合教材章节,以理论与实践相结合的方式进行教学,旨在帮助学生掌握电子时钟相关知识,培养动手能力与创新能力。
电子时钟设计实验报告
编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 V L 液晶显示偏压信号11 D4 Data I/O4 R S 数据/命令选择端12 D5 Data I/O5 R/W 读/写选择端13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA背光源正极8 D1 Data I/O 16 BLK 背光源负极单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。
电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。
二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。
本系统设计采用字符型液品显示模块 LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。
1 LCD1602 简介字符型液晶显示模块 LCD1602 已经是单片机应用设计中最常用的信息显示器件。
LCD1602 可以显示两行,每行16 个字符,采用+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
2 LCD1602 功能介绍2.1 引脚功能LCD1602 采用标准 14 脚(无背光)或 16 脚(带背光)接口,各引脚功能见表 1。
表1 引脚功能2.2 LCD1602 读写指令LCD1602 读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令 38H:显示模式设置;②写指令 08H:显示关闭;③写指令 01H:显示清屏;④写指令 06H:显示光标移动设置;⑤写指令 0CH:显示开及光标设置。
面向对象程序设计课程设计报告《电子时钟》C
目录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函数里面对时间日期进行显示输出。
向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。
单片机电子时钟课程设计实验报告(1)
单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
C语言课程设计报告-模拟时钟转动程序
课程设计报告课程名称结构化程序设计课程设计院部名称专业班级学生姓名王蕾学号课程设计地点课程设计学时指导教师金陵科技学院教务处制目录第一章课程设计的目的和要求.............................................1.1 C语言课程设计的目的............................................1.2 C语言课程设计实现的要求........................................ 第二章课程设计的任务内容............................................... 第三章详细设计说明.....................................................3.1 程序系统的结构..................................................3.1.1 实验设备及环境:(软、硬件环境)3.2 模块描述........................................................3.2.1 指针式时钟................................................3.2.2 数字式时钟................................................3.3 输出项..........................................................3.4 算法............................................................3.5 流程图..........................................................3.6 函数说明........................................................3.7 接口............................................................3.8 调试结果........................................................ 第四章软件使用说明.....................................................4.1 软件使用说明及出现的问题........................................4.2 运行结果........................................................ 第五章课程设计心得与体会............................................... 附录1:参考文献......................................................... 附录2:修改后的源代码……………………………………………………………………模拟时钟转动程序第一章课程设计的目的和要求1.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
C语言模拟时钟转动课程设计报告
《C语言程序设计》课程设计报告题目:模拟时钟转动程序班级:组别:页脚内容- 0 -组员:指导教师:目录第一章课程设计的题目 (2)1.1C语言课程设计的题目 (2)第二章课程设计的要求 (2)2.1C语言课程设计的要求 (2)第三章课程设计的目的 (2)3.1C语言课程设计的目的 (2)第四章课程设计的内容 (3)4.1C语言课程设计的程序清单和注释 (3)第五章课程设计的运行结果 (7)5.1C语言课程设计的运行结果 (7)第六章课程设计的结果分析 (8)页脚内容- 1 -6.1C语言课程设计的结果分析 (8)第七章课程设计的心得体会 (9)7.1C语言课程设计的心得体会 (9)模拟时钟转动程序第一章课程设计的题目1.1 C语言课程设计的题目本次为期两周的课程设计的题目为设计一个模拟时钟转动的程序。
第二章课程设计的要求2.1 C语言课程设计的要求页脚内容- 2 -能模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。
第三章课程设计的目的3.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
通过课程设计,自然地、熟练地掌握。
熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。
学会上机调试程序。
第四章课程设计的内容4.1 C语言课程设计的程序清单和注释模拟时钟转动程序清单+注释#include<windows.h> //包含窗口头文件#include<math.h> //头文件,包含了一些数学计算的函数#define TWOPI (2*3.14159)#define IDTIMER 1 //计时器ID#define ANGLE TWOPI/360 //2PI页脚内容- 3 -LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam ); //回调函数Int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow ) // 应用启动函数mian{TCHAR szClassName[] = TEXT("analogCloc");MSG msg; //定义消息HWND hwnd; //窗口句柄WNDCLASS wndclass; //系统支持结构,定义并初始化窗口结构wndclass.cbClsExtra = 0; //窗口类无扩展wndclass.cbWndExtra = 0; //窗口势力无扩展wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//窗口背景为白色wndclass.hCursor = NULL;wndclass.hIcon = NULL;wndclass.hInstance = hInstance; //当前实例句柄wndclass.lpfnWndProc = WindowProc; //关联到消息回调函数wndclass.lpszClassName = szClassName;页脚内容- 4 -wndclass.lpszMenuName = NULL; //窗口中无菜单wndclass.style = CS_HREDRAW | CS_VREDRAW ; //窗口重绘风格RegisterClass(&wndclass);hwnd CreateWindow(szClassName,TEXT("Clock"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, hInstance, NULL); //创建窗口ShowWindow(hwnd,nCmdShow); //显示窗口UpdateWindow(hwnd); //更新窗口,强制显示while(GetMessage(&msg,NULL,0,0)) //函数GetMessage 是从调用线程的消息队列里取得一个消息并将其放于指定的结构{TranslateMessage(&msg); //消息处理DispatchMessage(&msg); //消息派遣}return msg.wParam; //windows应用程序的消息循环形式}页脚内容- 5 -void setISOTROPIC(HDC hdc,int cxClient,int cyClient)//设置映射模式,使之成为笛卡尔坐标系的映射模式{SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,1000,1000,NULL); // 逻辑单位与设备单位比1/2 SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); //竖坐标向上为正,下为负}void drawClock(HDC hdc) // 画时钟圆盘{int x, y, radius; //以逻辑单位表示的窗口原点坐标SelectObject(hdc,CreateSolidBrush(RGB(1,148,138)));//设置整个窗口线条颜色for(int i=0;i<360;i+=6){x = (int)(cos(TWOPI/360*i)*900); //cos函数,包含在math.h头文件利的函数y = (int)(sin(TWOPI/360*i)*900);radius = !(i%5)?40:10;页脚内容- 6 -Ellipse(hdc,x-radius,y-radius,x+radius,y+radius);// 把弧度制转换成坐标形式,Ellipse函数用来画圆}}void drawHands(HDC hdc,SYSTEMTIME *pst,BOOL hChange)// draw hands函数负责绘制时钟的时针、分针和秒针的轮廓{int radius[3] = {500,700,850};int angle[3];angle[0] = pst->wHour*30+pst->wMinute/12*6;angle[1] = pst->wMinute*6;angle[2] = pst->wSecond*6;for(int i=hChange?0:2;i<3;i++){MoveToEx(hdc,0,0,NULL);LineTo(hdc,(int)(radius[i]*cos(ANGLE*(90-angle[i]))),(int)(radius[i]*sin(ANGLE*(90-angle[i]))));页脚内容- 7 -}}LRESULT CALLBACK WindowProc(HWND hwnd,UINT message, // 消息标识符,标识某个特定的消息WPARAM wParam,LPARAM lParam) //消息处理函数{TCHAR time[40];PAINTSTRUCT ps;HDC hdc;static int cxClient, cyClient;SYSTEMTIME st; //定义结构体变量static SYSTEMTIME preSt;BOOL hChange;switch(message) //switch 语句一个case代表一种情况页脚内容- 8 -{case WM_CREATE: // 窗口创建事件SetTimer(hwnd,IDTIMER,1000,NULL); //创建一个1000ms定时器GetLocalTime(&st); //得到当前系统时间wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);SetWindowText(hwnd,time); // 设置当前时间为窗口titlepreSt = st;return 0;case WM_SIZE:页脚内容- 9 -cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);return 0;case WM_TIMER: //定时器到时,即是每隔一秒要重画下界面GetLocalTime(&st); //每次都要获取当前时间hChange = st.wHour!=preSt.wHour||st.wMinute!=preSt.wMinute;hdc = GetDC(hwnd);setISOTROPIC(hdc,cxClient,cyClient);SelectObject(hdc,GetStockObject(WHITE_PEN));drawHands(hdc,&preSt,hChange);SelectObject(hdc,GetStockObject(BLACK_PEN));drawHands(hdc,&st,TRUE);ReleaseDC(hwnd,hdc);wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,页脚内容- 10 -st.wDay,st.wHour,st.wMinute,st.wSecond);SetWindowText(hwnd,time); //setwindowText函数:系统里的函数preSt = st; // 更新完毕后记录前一次的状态return 0;case WM_KEYDOWN:case WM_CHAR:DestroyWindow(hwnd); // 关闭窗口return 0;case WM_PAINT: //窗口绘制消息hdc = BeginPaint(hwnd,&ps); //开始绘制setISOTROPIC(hdc,cxClient,cyClient);drawClock(hdc);drawHands(hdc,&preSt,TRUE);页脚内容- 11 -EndPaint(hwnd,&ps); //结束绘制return 0;case WM_DESTROY: //程序退出消息PostQuitMessage(0);return 0;}returnDefWindowProc(hwnd,message,wParam,lParam);//其他消息有系统默认处理}第五章课程设计的运行结果5.1 C语言课程设计的运行结果页脚内容- 12 -第六章课程设计的结果分析6.1 C语言课程设计的结果分析页脚内容- 13 -运行结果分析问题一:程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。
基于C51单片机的数字时钟课程设计(C语言,带闹钟).
单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
C语言课程设计--电子时钟
目录第一章课程设计目的和要求.............................................................. (2)1.1 C语言课程设计的目的.......................................................... (2)1.2 C语言课程设计的要求 (2)第二章课程设计任务内容 (3)第三章详细设计说明 (4)3.1模块 (4)3.1.1函数功能模块图 (4)3.1.2模块描述 (4)3.2 流程图及注释 (5)3.3限制条件 (5)3.4测试计划 (5)第四章软件使用说明及运行结果 (6)4.1使用说明 (6)4.2运行结果 (6)第五章课程设计心得与体会 (7)附录1 参考文献 (8)附录2 程序清单 (9)第一章课程设计目的和要求1.1 C语言课程设计的目的本次课程设计使得课堂教学与实验实践之间关系更为密切,让同学们认识到必须重视实践环节,多读程序,多编写程序,多上机实践。
进一步培养结构化程序设计的思想,加深对高级语言要素和控制结构的理解,针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序风格。
本次课程设计着眼于知识的运用,把平常学的知识运用到课程时间中来,考察我们知识运用能力,对我们所学的理论知识进一步深化。
1.2 C语言课程设计的要求1. 分析课程设计题目的要求。
2. 对系统功能模块进行分析,写出详细设计说明文档。
3. 编写程序代码,代码量要求不少于300行。
调试程序使其能正确运行。
4. 设计完成的软件要便于操作和使用。
5. 设计完成后提交课程设计报告。
第二章课程设计任务内容设计一个电子时钟并满足下列要求:(1)能准确地利用数字显示日期和时间,在屏幕上显示一个运行的电子时钟,按任意键时程序退出。
(2)编写程序及上机运行并打印出来。
能准确得到相应的结果,原满完成该次课程设计的内容。
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语言课程设计(电子时钟) 精品
摘要就钟表的演变历史而言,它大致可以分为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语言单片机电子时钟课程设计报告书
课程设计报告课程名称:单片机程序设计报告题目:电子时钟学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013年12月25日课程设计任务书摘要单片计算机即单片微型计算机。
由RAM、ROM、CPU构成。
定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本设计主要设计了一个基于AT89C51单片机的电子时钟。
并在数码管上显示相应的时间。
并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。
应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
关键词:单片机;子时钟;键控制目录一、概述 (5)1.1电子时钟简介 (5)1.2电子时钟的基本特点 (5)1.3电子时钟的原理 (5)二、方案设计选择 (5)2.1计时方案 (5)2.2显示方案 (5)三、硬件设计 (6)3.1单片机型号选择 (6)3.2数码管显示工作原理 (6)3.3键盘电路设计 (7)3.4电路原理图 (7)四、软件设计 (7)五、结论与心得 (15)六、参考文献 (16)一、概述1.1 电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。
从而达到计时的功能,是人民日常生活补课缺少的工具。
1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
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电子钟的课程设计
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章“实践与创新”相关内容。
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)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
石家庄铁道大学课程设计模拟电子时钟单位电气与电子工程学院分院(系)专业电气学号学生姓名指导教师完成日期 2011 年5 月29日摘要电子时钟是一种用电脑实现时、分、秒计时的装置,与机械时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命。
电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。
C语言功能丰富、表达能力强、使用方便、应用面广、目标程序效率高,因此特别适合模拟电子时钟的开发关键词:模拟电子时钟,程序设计。
目录第1章选题的意义 (4)1.1 (4)1.2 (4)第2章系统功能需求分析 (5)2.1系统的基本要求 (5)2.2 (5)第3章系统设计 (6)第4章系统实现 (7)第5章总结………………………………………………………………………19第1章选题的意义1.1 选题的意义随着社会的发展,电子钟逐渐成为人们生活中不可缺少的一部分。
人们对时钟精度的要求越来越高,这就要求我们动用电子模拟技术对时钟的精度进行保证,同时模拟电子时钟还可以设计出美观的画面,具有现实中时钟不可相比的优点。
此程序所模拟出来的电子时钟具有操作简单,灵活,实用的优点,可以为我们提供方便。
同时通过对生活中普遍存在实物的设计,可以加深我们对c语言的深入理解掌握开发电子钟的基本原理,为进一步开发高质量程序打下基础。
1.2 硬件环境完整的电脑,包括键盘、鼠标、以及足够大的内存空间。
屏幕尺寸推荐使用640*380.1.3软件环境开发过程采用win-tc环境,运行环境是采用windows xp操作系统。
第2章系统功能需求分析2.1系统的基本要求实现时钟显示功能,具有动画模拟时钟和数字时钟,可以修改时间,界面友好,运行稳定2.2系统的功能首先画出时钟的界面,包括表盘,表针,以及数字时钟界面。
同时还在屏幕上打印出帮助信息,使使用者轻松方便的使用该时钟。
预期设想实现时钟的调时功能,按下一个键,进入时钟时间重设功能。
本电子时钟有四个模块构成,电子时钟界面显示,电子时钟按键控制,电子时钟动画处理,数字时钟模拟;具备修改时间功能,模拟出动态画面,界面友好,显示准确。
可以模拟出动画状态。
运行稳定,时间准确,精度较高,界面给人以美感,舒适。
第3章系统设计设计主体为首先画图,然后调用时钟处理函数,其次再调用一个循环,使之进入主体时钟处理函数。
时钟处理函数中含有划线函数,先取得电脑中的时间,调用画图函数画出当前所对应的模拟时钟图像,同时把时间赋给数字时钟3.1流程图3.2电子时钟界面显示本程序定义了huatu()函数,程序首先进入主函数后,就开始调用huatu()函数。
Huatu()函数中首先调用initgraph()函数,使系统进入图形模式,调用setlinestyle(x,y,z)函数来设定线粗。
Z代表线的粗细,分为1,2,3三个等级的线型;调用setbkcolor(x)函数设置当前的背景颜色,颜色分为1-15个等级,0为白色;然后调用setcolor(x)函数确定当前画线的颜色,同样也有1-15个等级;调用line(x,y,a,b)函数开始画线,(x,y)代表起点坐标(a,b)代表终点坐标;然后调用outtextxy(x,y,””)函数在坐标点为(x,y)的位置输出分号中的内容;其中还调用了circle(i,j,x)函数画出了以x为半径(x,y)为圆心的圆作为表示小时或者分钟的圆点;调用完以上函数就完成了界面主体的绘制。
3.3按键控制模块在本模块中,使用bioskey()函数读取用户的键值进行判断,执行相应操作。
具体如下:用户按下TAB或者Esc键,系统调按键判断函数,跳出时钟处理函数1,进入输入界面,调用scanf()函数对结构体变量中的元素&t[0].ti_min,&t[0].ti_hour,&t[0].ti_sec重新赋值后,再调用settime(t)函数,使之把数值赋给系统时间,通过改变系统时间达到修改时间的功能。
3.4时钟动画处理时钟动画处理是本程序的核心,巧妙模拟出动态效果。
其中的关键在于对时针、分针、秒针的绘制以及计算。
具体设计如下:(1)坐标点的计算,表盘中的时分秒有一个共同的圆心,但是各在不同的圆弧上移动,规律是:秒针转动60次,分针转动1次;分针转动60次,时针转动1次;秒针每一次所经过的角度是60度,并且可以通过与圆心的关系计算出来。
具体计算如下:圆心坐标为(x,y),半径为r借助三角函数可以求得k点的坐标值(x+a sinθ,y-a cosθ),同样可以用相同的方法求得,分、秒的坐标值。
本程序中a,b,c分别取50,80,98,单位为像素。
可以模拟出不同的长度,作为时、分、秒指针示意图如下:(2)动画处理流程初运行阶段首先取得系统时间并保存在t结构体变量内,同时在数字时钟中显示出当前系统时间。
然后开始进入for循环,直到用户按ESC或者Tab键跳出循环。
同时打开扬声器,发出滴答声,并利用while循环延迟一秒从而模拟出机械钟的滴答声。
延迟一秒后清除原来的秒针,绘制新的秒针,同时更新数字时钟的数字。
用一个if语句判断如果分钟有变化,清除分针,重绘分针;如果时针有变化,清除时针,重绘时针。
最后通过对键值的判断,若为Esc或者Tab则跳出循环。
3.5数字时钟处理模块在本模块中,每隔一秒会调用gettime(t)函数来得到系统时间,并把它赋给digitclock()函数,并在显示相应的数字时钟位置,同时还有一个判断语句,如果秒数等于60,那么秒数就会重新变为0,从而形成一个循环。
修改时间是通过的改变系统时间来实现的,调用scanf()函数把t结构体变量重新赋值,再调用settime()函数就把系统时间修改成功了。
第4章系统实现/*电子时钟源代码*/#include<graphics.h>#include<stdio.h>#include<math.h>#include<dos.h>#define PI 3.1415926 /*定义常量*/#define ESC 0x11b /*ESC键:退出系统*/#define TAB 0xf09 /*TAB键:移动光标*//*函数声明*/int keyhandle(int); /*键盘按键判断,并调用相关函数处理*/int digithour(double); /*将double型的小时数转换成int型*/int digitmin(double); /*将double型的分钟数转换成int型*/int digitsec(double); /*将double型的秒钟数转换成int型*/void digitclock(int,int,int ); /*在指定位置显示时钟或分钟或秒钟数*/ void drawcursor(int); /*绘制一个光标*/void clearcursor(int);/*消除前一个光标*/void clockhandle(); /*时钟处理*/double h,m,s; /*全局变量:小时,分,秒*/double ho,mi;double x,x1,x2,y,y1,y2; /*全局变量:坐标值*/struct time t[1];/*定义一个time结构类型的数组*/main(){huatu();clockhandle1();/*开始调用时钟处理程序*/tab1:closegraph();printf("setuptime,now!\n please (min,hour,sec)\n");scanf("%d,%d,%d",&t[0].ti_min,&t[0].ti_hour,&t[0].ti_sec);huatu();settime(t);clockhandle2();goto tab1;closegraph(); /*关闭图形系统*/return 0; /*表示程序正常结束,向操作系统返回一个0值*/}clockhandle1(){int k=0,count;setcolor(15);gettime(t);/*取得系统时间,保存在time结构类型的数组变量中*/h=t[0].ti_hour;m=t[0].ti_min;x=50*sin((h*60+m)/360*PI)+320; /*时针的x坐标值*/y=180-50*cos((h*60+m)/360*PI); /*时针的y坐标值*/line(320,180,x,y);/*在电子表中绘制时针*/x1=80*sin(m/30*PI)+320; /*分针的x坐标值*/y1=180-80*cos(m/30*PI); /*分针的y坐标值*/line(320,180,x1,y1); /*在电子表中绘制分针*/digitclock(260,333,digithour(h)); /*在数字时钟中,显示当前的小时值*/ digitclock(305,333,digitmin(m)); /*在数字时钟中,显示当前的分钟值*/ setwritemode(1);/*规定画线的方式,如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。
因此, 当线的特性不变, 进行两次画线操作相当于没有画线,即在当前位置处清除了原来的画线*/for(count=2;k!=ESC&&k!=TAB;){ /*开始循环,直至用户按下ESC键结束循环*/ setcolor(12);/*淡红色*/sound(500);/*以指定频率打开PC扬声器,这里频率为500Hz*/delay(700);/*发一个频率为500Hz的音调,维持700毫秒*/sound(200);/*以指定频率打开PC扬声器,这里频率为200Hz*/delay(300);/*以上两种不同频率的音调,可仿真钟表转动时的嘀哒声*/nosound(); /*关闭PC扬声器*/s=t[0].ti_sec;m=t[0].ti_min;h=t[0].ti_hour;x2=98*sin(s/30*PI)+320; /*秒针的x坐标值*/y2=180-98*cos(s/30*PI); /*秒针的y坐标值*/setlinestyle(0,0,1);line(320,180,x2,y2);/*绘制秒针*//*利用此循环,延时一秒*/while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h){ gettime(t);/*取得系统时间*/if(bioskey(1)!=0){k=bioskey(0);count=keyhandle(k);}}setcolor(15);digitclock(353,333,digitsec(s)+1);/*数字时钟增加1秒*/setcolor(12); /*淡红色*/x2=98*sin(s/30*PI)+320;y2=180-98*cos(s/30*PI);line(320,180,x2,y2);/*用原来的颜色在原来位置处再绘制秒针,以达到清除当前秒针的目的*//*分钟处理*/if(t[0].ti_min!=m){ /*若分钟有变化*//*消除当前分针*/setcolor(15); /*白色*/x1=80*sin(m/30*PI)+320;y1=180-80*cos(m/30*PI);line(320,180,x1,y1);/*绘制新的分针*/m=t[0].ti_min;digitclock(305,333,digitmin(m)); /*在数字时钟中显示新的分钟值*/x1=80*sin(m/30*PI)+320;y1=180-80*cos(m/30*PI);line(320,180,x1,y1);}/*小时处理*/if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)){ /*若小时数有变化*//*消除当前时针*/setcolor(15); /*白色*/x=50*sin((h*60+m)/360*PI)+320;/*50:时钟的长度(单位:像素),320:圆心的x 坐标值*/y=180-50*cos((h*60+m)/360*PI);line(320,180,x,y);/*绘制新的时针*/h=t[0].ti_hour;digitclock(260,333,digithour(h));x=50*sin((h*60+m)/360*PI)+320;y=180-50*cos((h*60+m)/360*PI);line(320,180,x,y);}}}int keyhandle(int key) /*键盘控制*/case TAB:;}int digithour(double h)/*将double型的小时数转换成int型*/{int i;for(i=0;i<=23;i++){if(h==i) return i;}}int digitmin(double m)/*将double型的分钟数转换成int型*/{int i;for(i=0;i<=59;i++){if(m==i) return i;}}int digitsec(double s) /*将double型的秒钟数转换成int型*/{int i;for(i=0;i<=59;i++){if(s==i) return i;}}void digitclock(int x,int y,int clock)/*在指定位置显示数字时钟:时\分\秒*/ {char buffer1[10];setfillstyle(0,2);bar(x,y,x+20,348);if(clock==60) clock=0;sprintf(buffer1,"%d",clock);outtextxy(x,y,buffer1);}void drawcursor(int count) /*根据count的值,画一个光标*/ {switch(count){case 1:line(424,315,424,325);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}void clearcursor(int count) /*根据count的值,清除前一个光标*/{case 1:line(424,315,424,325);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}huatu(){int driver, mode=0,i,j;driver=DETECT; /*自动检测显示设备*/initgraph(&driver, &mode, "");/*初始化图形系统*/setlinestyle(0,0,3); /*设置当前画线宽度和类型:设置三点宽实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/setcolor(9); /*设置当前画线颜色*/line(5,5,635,5);line(5,5,5,475);line(635,5,635,475);line(5,475,635,475);line(5,235,320,5);line(320,5,635,235);line(635,235,320,400);line(320,400,5,235); /*画主体框架的边直线*//*arc(int x, int y, int stangle, int endangle, int radius)*/setcolor(15);outtextxy(305,50,"CLOCK"); /*显示标题*/setcolor(7);line(250,320,390,320);line(390,320,390,350);line(390,350,250,350);line(250,350,250,320);setcolor(5);for(i=290;i<=336;i+=46)for(j=333;j<=340;j+=7){setlinestyle(0,0,3);circle(i,j,1); /*以(i, y)为圆心,1为半径画圆*/}/*绘制表示小时的圆点*/setcolor(15);for(i=0,mi=0,ho=0;i<=11;i++,ho++){x=100*sin((ho*60+mi)/360*PI)+320;y=180-100*cos((ho*60+mi)/360*PI);setlinestyle(0,0,3);}/*绘制表示分钟或秒钟的圆点*/setcolor(11);for(i=0,mi=0;i<=59;mi++,i++){x=100*sin(mi/30*PI)+320;y=180-100*cos(mi/30*PI);setlinestyle(0,0,1);circle(x,y,1);}/*在电子表的左边打印帮助提示信息*/setcolor(12);outtextxy(250,420,"Do not waste time!"); outtextxy(20,35,"print TAB or ESC to setup time!"); outtextxy(385,35,"May you be happy forever"); setcolor(10);outtextxy(400,55,"version 1.0");outtextxy(20,55,"jinhengli c language program"); outtextxy(313,65,"12");outtextxy(363,80,"1");outtextxy(413,120,"2");outtextxy(426,175,"3");outtextxy(413,225,"4");outtextxy(370,273,"5");outtextxy(316,286,"6");outtextxy(263,275,"7");outtextxy(219,233,"8");outtextxy(205,177,"9");outtextxy(214,120,"10");outtextxy(263,80,"11");setcolor(10);circle(150,240,50);circle(150,240,45);circle(150,240,40);circle(150,240,35);circle(150,240,30);circle(150,240,25);circle(150,240,20);circle(150,240,15);circle(150,240,10);circle(150,240,05);circle(150,240,1);circle(490,240,50);circle(490,240,45);circle(490,240,35);circle(490,240,30);circle(490,240,25);circle(490,240,20);circle(490,240,15);circle(490,240,10);circle(490,240,05);circle(490,240,1);}clockhandle2(){int k=0,count;setcolor(15);gettime(t);/*取得系统时间,保存在time结构类型的数组变量中*/h=t[0].ti_hour;m=t[0].ti_min;x=50*sin((h*60+m)/360*PI)+320; /*时针的x坐标值*/y=180-50*cos((h*60+m)/360*PI); /*时针的y坐标值*/line(320,180,x,y);/*在电子表中绘制时针*/x1=80*sin(m/30*PI)+320; /*分针的x坐标值*/y1=180-80*cos(m/30*PI); /*分针的y坐标值*/line(320,180,x1,y1); /*在电子表中绘制分针*/digitclock(260,333,digithour(h)); /*在数字时钟中,显示当前的小时值*/ digitclock(305,333,digitmin(m)); /*在数字时钟中,显示当前的分钟值*/ setwritemode(1);/*规定画线的方式,如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。