电子时钟设计Word文件下载.docx
《电子时钟设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子时钟设计Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。
![电子时钟设计Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/5792319a-cbbd-4948-ab83-cfef2088b8d1/5792319a-cbbd-4948-ab83-cfef2088b8d11.gif)
相关条件的判断和时钟指针坐标点值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟始终时钟运转的功能。
(4)数字时钟处理模块。
在数字时钟处理模块中,主要实现了数字时钟的显示和数字时钟的修改。
其中,在数字时钟的修改中,用户可先按Tab键定位需要修改内容的位置,然后通过移动按光标(↑)或下移(↓)键来修改当前时间。
总体设计
功能模块设计
1.电子时钟执行主流程
此电子时钟执行主流程如图
(2)所示。
首先,程序调用initgraph()函数,使系统进入图形模式,然后通过使用line()、arc()、outtextxy()和circle()等函数来绘制主窗口及电子时钟界面,最后调用
Clockhandle()函数来处理时钟的运转及数字时钟的显示。
在clockhandle()函数中,使用了bioskey()
函数来获取用户的按键值,当用户按键Esc时,程序会从clockhandle()函数中返回,从而退出函数。
2.电子时钟界面显示
电子时钟界面的实现比较简单。
值得一提的是,模拟电子时钟的运转的动画时钟的时间刻度是用大小不同的圆来表示的,3根长度不同但有一端在相同坐标位置的直线分别表示时、分、秒针。
3电子时钟按键处理模块
在按键处理模块中,使用bioskey()函数来读取用户按键的键值,然后调用keyhandle()函数对键盘按键值进行判断,执行相应的操作。
具体按键判断如下。
(1)若用户按下Tab键,程序会调用clearcursor()函数来清除上一个位置的光标,然后调用drawcursor()函数在新位置处绘制一个光标。
(2)若用户按下光标上移键,程序会调用timeupchange()函数来增加相应的时、分、秒值。
(3)若用户按下光标下移键,程序会调用timedownchange()函数来减少相应的时、分、秒值。
(4)若用户按下Esc键,程序会结束时钟运行,从而退出系统。
3.数字时钟处理模块
在数字时钟处理模块中,会每隔一秒调用gettime(t)
函数,获取系统时间,然后调用digitclock()函数在相应的位置显示时、分、秒值。
至于数字适时钟的修改,主要由当前光标位置和光标上移(↑)或下移(↓)按键两者共同决定。
例如,若当前光标在分钟显示位置,且按下光标上移键,程序会将当前时间的分钟值增加1,即增加一分钟,若加1后的分钟值等于60,则将当前分钟值设置为0,最后调用settime(t)函数来设置新的系统时间。
数据结构设计
此程序中,使用了C语言的time结构体和几个全局变量,为了便于读者易于理解程序,这里分别来介绍。
1.Time结构体
Structtime
{
Unsignedcharti_min;
Unsignedcharti_hour;
Unsignedcharti_hund;
Unsignedcharti_sec;
};
Time结构体定义在dos。
h文件中,可用来保存系统的当前时间,其中各文字的值的含义如下。
●unsignedcharti_min:
保存分钟值。
●unsignedcharti_hour:
保存小时。
●unsignedcharti_hund:
保存百分之一秒。
●unsignedcharti_sec:
保存秒数。
2全局变量
①doubleh,m,s:
此3个全局变量分别用来保存小时、分钟、秒数。
②doublex,x1,x2,y,y1,y2:
保存数字时钟的小时、分、秒在屏幕中显示的坐标值。
③structtimet[1]:
定义一个time结构类型的数组,此数组只有t[0]一个元素。
函数功能描述
1)keyhandle()
函数原型:
intkeyhandle(intkey,intcount);
keyhandle()函数用于对用户的按键值key进行判断,然后调用timeupchange(count)或timedownchange(count)或直接处理Tap按键,其中count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。
按Tap键后,count值加1。
2)timeupchange()
inttimeupchange(intcount);
timeupchange()函数用于增加时、分、秒数,然后将新的时间设置为当前时间。
3)timedownchange()
inttimedownchange(intcount)
timedownchange()函数用于减少时、分、秒数,然后将新的时间设置为当前时间。
4)digitclock()
voiddigitclock(intx,inty,intclock);
Digitclock()函数用于在(x,y)位置显示clock值为时、分、秒值。
5)drawcursor()
voiddrawcursor(intcount);
drawcursor()函数用于对count进行判断后,在相应位置绘制一条直线作为光标。
6)clearcursor()
voidclearcursor(intcount);
clearcursor()函数用于对count进行判断后,在相应位置擦除原来的光标。
7)voidclockhandle()
voidclockhandle();
voidclockhandle()函数用于完成时钟转动和数字时钟的显示。
(8)main()
voidmain()
main()为主函数。
调试分析
在此次课程设计中,遇到了一些问题,通过和同学那个学以及老师之间的沟通交流,最终把问题解决了。
(1)要减少在部分功能上浪费时间,则在实践之前,将源代码以及函数所代表的意义搞清楚,才能做到节省做好程序的时间的目的。
(2)对应函数问题的不同意思要搞清,才能把功能搞清,对后面整个程序有较好的帮助。
(3)在做完程序后,要及时检验可能会出现的问题
(4)最终要运行程序,才能算是彻底做完程序。
小结
此次课程设计,从理论到实践,不仅巩固了以前学过的知识,而且学到了很多在书本上学不到的知识,在设计中,我们遇到了许多以前编程从未遇见过的问题,发现自己仍然存在许多知识上的不足,对一些学过的知识理解的不够深刻,掌握的不够牢固,进过同学以及老师的帮助,是我理解到了更多,同时,我也体会到了团队合作的重要性,如果是一个人,根本不可能在短时间内完成这项编程任务。
通过这次课程设计,我们进一步巩固了大一学到的编程知识,而且体会到完成一个大的程序设计工作,应努力增强团队精神和协作能力,准确的完成老师交给的编程任务。
源码分析
1.程序预处理
#include<
graphics.h>
stdio.h>
conio.h>
math.h>
dos.h>
#definePI3.1415926
#defineUP0x4800
#defineDOWN0x5000
#defineESC0x11b
#defineTAB0xf09
intkeyhandle(int,int);
inttimeupchange(int);
inttimedownchange(int);
intdigithour(double);
intdigitmin(double);
intdigitsec(double);
voiddigitclock(int,int,int);
voiddrawcursor(int);
voidclearcursor(int);
doubleh,m,s;
doublex,x1,x2,y,y1,y2;
structtimet;
时钟按键处理模块
在电子时钟中,按键控制模块最主要的工作就是必须能够读取用户按键,对按键值进行判断,并调用相关函数来执行相关操作。
intkeyhandle(intkey,intcount)/*键盘控制*/
{switch(key)
{caseUP:
timeupchange(count-1);
/*因为count的初始值为2,所以此处减1*/
break;
caseDOWN:
timedownchange(count-1);
caseTAB:
setcolor(15);
clearcursor(count);
/*清除原来的光标*/
drawcursor(count);
/*显示一个新的光标*/
count++;
}
returncount;
inttimeupchange(intcount)/*处理光标上移的按键*/
if(count==1){
t[0].ti_hour++;
if(t[0].ti_hour==24)t[0].ti_hour=0;
settime(t);
/*设置新的系统时间*/
if(count==2){
t[0].ti_min++;
if(t[0].ti_min==60)t[0].ti_min=0;
if(count==3){
t[0].ti_sec++;
if(t[0].ti_sec==60)t[0].ti_sec=0;
inttimedownchange(intcount)/*处理光标下移的按键*/
if(count==1){
t[0].ti_hour--;
if(t[0].ti_hour==0)t[0].ti_hour=23;
/*设置新的系统时间*/
if(count==2){
t[0].ti_min--;
if(t[0].ti_min==0)t[0].ti_min=59;
if(count==3){
t[0].ti_sec--;
if(t[0].ti_sec==0)t[0].ti_sec=59;
数字时钟处理模块
在数字时钟处理模块中,主要实现数字时钟的显示和数字时钟的修改。
其中,在数字时钟的修改中,用户先按Tab健定位需要修改的内容,然后通过按光标上移(↑)或下移(↓)键来修改当前时间。
voiddigitclock(intx,inty,intclock)/*在指定位置显示数字时钟:
时\分\秒*/
{charbuffer1[10];
setfillstyle(0,2);
bar(x,y,x+15,328);
if(clock==60)clock=0;
sprintf(buffer1,"
%d"
clock);
outtextxy(x,y,buffer1);
intdigithour(doubleh)/*将double型的小时数转换成int型*/
{inti;
for(i=0;
i<
=23;
i++)
{if(h==i)returni;
}
intdigitmin(doublem)/*将double型的分钟数转换成int型*/
=59;
{if(m==i)returni;
intdigitsec(doubles)/*将double型的秒钟数转换成int型*/
{if(s==i)returni;
voiddrawcursor(intcount)/*根据count的值,画一个光标*/
{switch(count)
{
case1:
line(424,315,424,325);
break;
case2:
line(465,315,465,325);
case3:
line(505,315,505,325);
voidclearcursor(intcount)/*根据count的值,清除前一个光标*/