模拟电子时钟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 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
- 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)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。