电子时钟设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Baidu Nhomakorabea
调试分析
在此次课程设计中,遇到了一些问题,通过和同学那个学以及老师 之间的沟通交流,最终把问题解决了。 (1) 要减少在部分功能上浪费时间,则在实践之前, 将源代码以及函数所代表的意义搞清楚,才能做 到节省做好程序的时间的目的。 (2) 对应函数问题的不同意思要搞清,才能把功能搞 清,对后面整个程序有较好的帮助。 (3) 在做完程序后,要及时检验可能会出现的问题 (4) 最终要运行程序,才能算是彻底做完程序。
小结
此次课程设计,从理论到实践,不仅巩固了以前学过的知识,而且学到 了很多在书本上学不到的知识,在设计中,我们遇到了许多以前编程从 未遇见过的问题,发现自己仍然存在许多知识上的不足,对一些学过的 知识理解的不够深刻,掌握的不够牢固,进过同学以及老师的帮助,是 我理解到了更多,同时,我也体会到了团队合作的重要性,如果是一个 人,根本不可能在短时间内完成这项编程任务。通过这次课程设计,我 们进一步巩固了大一学到的编程知识,而且体会到完成一个大的程序设 计工作,应努力增强团队精神和协作能力,准确的完成老师交给的编程 任务。
} if(count==2){ t[0].ti_min++; if(t[0].ti_min==60) t[0].ti_min=0; settime(t); /*设置新的系统时间*/ } if(count==3){ t[0].ti_sec++; if(t[0].ti_sec==60) t[0].ti_sec=0; settime(t); /*设置新的系统时间*/ } } int timedownchange(int count) /*处理光标下移的按键*/ { if(count==1) { t[0].ti_hour--; if(t[0].ti_hour==0) t[0].ti_hour=23; settime(t);/*设置新的系统时间*/ } if(count==2) { t[0].ti_min--; if(t[0].ti_min==0) t[0].ti_min=59; settime(t);/*设置新的系统时间*/ } if(count==3) { t[0].ti_sec--; if(t[0].ti_sec==0) t[0].ti_sec=59; settime(t);/*设置新的系统时间*/ } } 数字时钟处理模块 在数字时钟处理模块中,主要实现数字时钟的显示和数字时钟的修改。
int digithour(double); int digitmin(double); int digitsec(double); void digitclock(int,int,int ); void drawcursor(int); void clearcursor(int); void clockhandle(); double h,m,s; double x,x1,x2,y,y1,y2; struct time t; 时钟按键处理模块 在电子时钟中,按键控制模块最主要的工作就是必须能够读取用户按 键,对按键值进行判断,并调用相关函数来执行相关操作。 int keyhandle(int key,int count) /*键盘控制 */ { switch(key) {case UP: timeupchange(count-1); /*因为count的初始值为2,所以此处 减1*/ break; case DOWN:timedownchange(count-1); /*因为count的初始值为2,所 以此处减1*/ break; case TAB:setcolor(15); clearcursor(count); /*清除原来的光标*/ drawcursor(count); /*显示一个新的光标*/ count++; break; } return count; } int timeupchange(int count) /*处理光标上移的按键*/ { if(count==1){ t[0].ti_hour++; if(t[0].ti_hour==24) t[0].ti_hour=0; settime(t); /*设置新的系统时间*/
总体设计
功能模块设计 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)函数来
源码分析 1.程序预处理 #include<graphics.h> #include<stdio.h> #include<conio.h> #include<math.h> #include<dos.h> #define PI 3.1415926 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x11b #define TAB 0xf09 int keyhandle(int,int); int timeupchange(int); int timedownchange(int);
设置新的系统时间。
数据结构设计
此程序中,使用了C语言的time结构体和几个全局变量,为了 便于读者易于理解程序,这里分别来介绍。 1. Time结构体 Struct time { Unsigned char ti_min; Unsigned char ti_hour; Unsigned char ti_hund; Unsigned char ti_sec; }; Time 结构体定义在dos。h文件中,可用来保存系统的当前时间,其 中各文字的值的含义如下。 ● unsigned char ti_min:保存分钟值。 ● unsigned char ti_hour:保存小时。 ● unsigned char ti_hund:保存百分之一秒。 ● unsigned char ti_sec:保存秒数。 2全局变量 ① double h,m,s:此3个全局变量分别用来保存小时、分钟、秒数。 ② double x,x1,x2,y,y1,y2:保存数字时钟的小时、分、秒在屏幕中 显示的坐标值。 ③ struct time t[1]:定义一个time结构类型的数组,此数组只有t[0]一 个元素。 函数功能描述 1) keyhandle() 函数原型:int keyhandle(int key,int count); keyhandle()函数用于对用户的按键值key进行判断,然后调用 timeupchange(count)或timedownchange(count)或直接处理Tap按键,其中 count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。按Tap键 后,count值加1。 2) timeupchange() 函数原型:int timeupchange(int count); timeupchange()函数用于增加时、分、秒数,然后将新的时间设置 为当前时间。
电子时钟设计
1 课程设计要求和内容 1 设计目的 本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下 的编程。本程序涉及时间结构体、数组、绘图等方面的知识。通过本程 序的训练,使读者能对C语言有一个更深刻的了解,掌握利用C语言相 关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚 实的基础。 2 功能描述 如图(1)所示,此电子时钟主要有以下4个功能组成 (1) 电子时钟界面显示模块。电子时钟界面显示在调用电 子钟 运行处理之前完成,在这里主要调用了C语言图形系统函数 和字符屏幕处理函数画出时钟程序的主界面。 主界面包括类似Windows 自带的电子时钟的界面和帮助界面两部分。 电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟 表。在帮助界面中,主要包括 一些按键的操作说明。 (2) 电子时钟按键控制模块。按键控制模块主要完成两大部分功能。 第一,读取用户按键的键值。第二,通过对键盘按键值的判断, 执行相应的操作,如光标移动、修改时间。 (3)时钟动画处理模块。在时钟动画处理模块中,通过对 相关条件的判断和时钟指针坐标点值的计算,完成时、分、秒指针的擦 除和重绘,以达到模拟始终时钟运转的功能。 (4)数字时钟处理模块。在数字时钟处理模块中,主要实现了数字时 钟的显示和数字时钟的修改。其中,在数字时钟的修改中,用户可先按 Tab键定位需要修改内容的位置,然后通过移动按光标(↑)或下移 (↓)键来修改当前时间。
3) timedownchange() 函数原型:int timedownchange(int count) timedownchange()函数用于减少时、分、秒数,然后将新的时间设 置为当前时间。 4)digitclock() 函数原型:void digitclock(int x,int y,int clock ); Digitclock()函数用于在(x,y)位置显示clock值为时、分、秒 值。 5) drawcursor() 函数原型:void drawcursor(intcount); drawcursor()函数用于对count进行判断后,在相应位置绘制一条直 线作为光标。 6) clearcursor() 函数原型:void clearcursor(int count); clearcursor()函数用于对count进行判断后,在相应位置擦除原来的 光标。 7) void clockhandle() 函数原型:void clockhandle(); void clockhandle()函数用于完成时钟转动和数字时钟的显示。 (8) main() 函数原型:void main() main()为主函数。
其中,在数字时钟的修改中,用户先按Tab健定位需要修改的内容,然 后通过按光标上移(↑)或下移(↓)键来修改当前时间。 void digitclock(int x,int y,int clock)/*在指定位置显示数字时钟:时\分\秒*/ {char buffer1[10]; setfillstyle(0,2); bar(x,y,x+15,328); if(clock==60) clock=0; sprintf(buffer1,"%d",clock); outtextxy(x,y,buffer1); } 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 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; }
调试分析
在此次课程设计中,遇到了一些问题,通过和同学那个学以及老师 之间的沟通交流,最终把问题解决了。 (1) 要减少在部分功能上浪费时间,则在实践之前, 将源代码以及函数所代表的意义搞清楚,才能做 到节省做好程序的时间的目的。 (2) 对应函数问题的不同意思要搞清,才能把功能搞 清,对后面整个程序有较好的帮助。 (3) 在做完程序后,要及时检验可能会出现的问题 (4) 最终要运行程序,才能算是彻底做完程序。
小结
此次课程设计,从理论到实践,不仅巩固了以前学过的知识,而且学到 了很多在书本上学不到的知识,在设计中,我们遇到了许多以前编程从 未遇见过的问题,发现自己仍然存在许多知识上的不足,对一些学过的 知识理解的不够深刻,掌握的不够牢固,进过同学以及老师的帮助,是 我理解到了更多,同时,我也体会到了团队合作的重要性,如果是一个 人,根本不可能在短时间内完成这项编程任务。通过这次课程设计,我 们进一步巩固了大一学到的编程知识,而且体会到完成一个大的程序设 计工作,应努力增强团队精神和协作能力,准确的完成老师交给的编程 任务。
} if(count==2){ t[0].ti_min++; if(t[0].ti_min==60) t[0].ti_min=0; settime(t); /*设置新的系统时间*/ } if(count==3){ t[0].ti_sec++; if(t[0].ti_sec==60) t[0].ti_sec=0; settime(t); /*设置新的系统时间*/ } } int timedownchange(int count) /*处理光标下移的按键*/ { if(count==1) { t[0].ti_hour--; if(t[0].ti_hour==0) t[0].ti_hour=23; settime(t);/*设置新的系统时间*/ } if(count==2) { t[0].ti_min--; if(t[0].ti_min==0) t[0].ti_min=59; settime(t);/*设置新的系统时间*/ } if(count==3) { t[0].ti_sec--; if(t[0].ti_sec==0) t[0].ti_sec=59; settime(t);/*设置新的系统时间*/ } } 数字时钟处理模块 在数字时钟处理模块中,主要实现数字时钟的显示和数字时钟的修改。
int digithour(double); int digitmin(double); int digitsec(double); void digitclock(int,int,int ); void drawcursor(int); void clearcursor(int); void clockhandle(); double h,m,s; double x,x1,x2,y,y1,y2; struct time t; 时钟按键处理模块 在电子时钟中,按键控制模块最主要的工作就是必须能够读取用户按 键,对按键值进行判断,并调用相关函数来执行相关操作。 int keyhandle(int key,int count) /*键盘控制 */ { switch(key) {case UP: timeupchange(count-1); /*因为count的初始值为2,所以此处 减1*/ break; case DOWN:timedownchange(count-1); /*因为count的初始值为2,所 以此处减1*/ break; case TAB:setcolor(15); clearcursor(count); /*清除原来的光标*/ drawcursor(count); /*显示一个新的光标*/ count++; break; } return count; } int timeupchange(int count) /*处理光标上移的按键*/ { if(count==1){ t[0].ti_hour++; if(t[0].ti_hour==24) t[0].ti_hour=0; settime(t); /*设置新的系统时间*/
总体设计
功能模块设计 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)函数来
源码分析 1.程序预处理 #include<graphics.h> #include<stdio.h> #include<conio.h> #include<math.h> #include<dos.h> #define PI 3.1415926 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x11b #define TAB 0xf09 int keyhandle(int,int); int timeupchange(int); int timedownchange(int);
设置新的系统时间。
数据结构设计
此程序中,使用了C语言的time结构体和几个全局变量,为了 便于读者易于理解程序,这里分别来介绍。 1. Time结构体 Struct time { Unsigned char ti_min; Unsigned char ti_hour; Unsigned char ti_hund; Unsigned char ti_sec; }; Time 结构体定义在dos。h文件中,可用来保存系统的当前时间,其 中各文字的值的含义如下。 ● unsigned char ti_min:保存分钟值。 ● unsigned char ti_hour:保存小时。 ● unsigned char ti_hund:保存百分之一秒。 ● unsigned char ti_sec:保存秒数。 2全局变量 ① double h,m,s:此3个全局变量分别用来保存小时、分钟、秒数。 ② double x,x1,x2,y,y1,y2:保存数字时钟的小时、分、秒在屏幕中 显示的坐标值。 ③ struct time t[1]:定义一个time结构类型的数组,此数组只有t[0]一 个元素。 函数功能描述 1) keyhandle() 函数原型:int keyhandle(int key,int count); keyhandle()函数用于对用户的按键值key进行判断,然后调用 timeupchange(count)或timedownchange(count)或直接处理Tap按键,其中 count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。按Tap键 后,count值加1。 2) timeupchange() 函数原型:int timeupchange(int count); timeupchange()函数用于增加时、分、秒数,然后将新的时间设置 为当前时间。
电子时钟设计
1 课程设计要求和内容 1 设计目的 本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下 的编程。本程序涉及时间结构体、数组、绘图等方面的知识。通过本程 序的训练,使读者能对C语言有一个更深刻的了解,掌握利用C语言相 关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚 实的基础。 2 功能描述 如图(1)所示,此电子时钟主要有以下4个功能组成 (1) 电子时钟界面显示模块。电子时钟界面显示在调用电 子钟 运行处理之前完成,在这里主要调用了C语言图形系统函数 和字符屏幕处理函数画出时钟程序的主界面。 主界面包括类似Windows 自带的电子时钟的界面和帮助界面两部分。 电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟 表。在帮助界面中,主要包括 一些按键的操作说明。 (2) 电子时钟按键控制模块。按键控制模块主要完成两大部分功能。 第一,读取用户按键的键值。第二,通过对键盘按键值的判断, 执行相应的操作,如光标移动、修改时间。 (3)时钟动画处理模块。在时钟动画处理模块中,通过对 相关条件的判断和时钟指针坐标点值的计算,完成时、分、秒指针的擦 除和重绘,以达到模拟始终时钟运转的功能。 (4)数字时钟处理模块。在数字时钟处理模块中,主要实现了数字时 钟的显示和数字时钟的修改。其中,在数字时钟的修改中,用户可先按 Tab键定位需要修改内容的位置,然后通过移动按光标(↑)或下移 (↓)键来修改当前时间。
3) timedownchange() 函数原型:int timedownchange(int count) timedownchange()函数用于减少时、分、秒数,然后将新的时间设 置为当前时间。 4)digitclock() 函数原型:void digitclock(int x,int y,int clock ); Digitclock()函数用于在(x,y)位置显示clock值为时、分、秒 值。 5) drawcursor() 函数原型:void drawcursor(intcount); drawcursor()函数用于对count进行判断后,在相应位置绘制一条直 线作为光标。 6) clearcursor() 函数原型:void clearcursor(int count); clearcursor()函数用于对count进行判断后,在相应位置擦除原来的 光标。 7) void clockhandle() 函数原型:void clockhandle(); void clockhandle()函数用于完成时钟转动和数字时钟的显示。 (8) main() 函数原型:void main() main()为主函数。
其中,在数字时钟的修改中,用户先按Tab健定位需要修改的内容,然 后通过按光标上移(↑)或下移(↓)键来修改当前时间。 void digitclock(int x,int y,int clock)/*在指定位置显示数字时钟:时\分\秒*/ {char buffer1[10]; setfillstyle(0,2); bar(x,y,x+15,328); if(clock==60) clock=0; sprintf(buffer1,"%d",clock); outtextxy(x,y,buffer1); } 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 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; }