模拟时钟程序设计全解
- 格式:doc
- 大小:89.50 KB
- 文档页数:11
1模拟时钟程序分析模拟时钟程序是tc图形模式编程的典型程序,主要用画圆、画线函数实现,程序流程图如图1:图1 时钟程序流程图代码如下:#include<graphics.h>#include<math.h>#include<dos.h>#define PI 3.1416void init_screen(int x0,int y0,int r0);void sec();main(){int x0=320,y0=240,r0=150; /* x0,y0 圆心坐标点*/init_screen(x0,y0,r0);sec();closegraph(); /* 关闭图形模式*/}void init_screen(int x0,int y0,int r0){int i,x,y,graphdriver,graphmode;char s[10];float alpha,a0=PI/2;graphdriver=DETECT;initgraph(&graphdriver,&graphmode,"");setbkcolor(3);setcolor(2);circle(x0,y0,r0); /* 内圆*/circle(x0,y0,r0+30); /* 外圆*/setfillstyle(SOLID_FILL,10);/*设置填充模式和颜色*/floodfill(x0-r0-10,y0,2); /*填充一个有界区域*//* 填写时钟数字 */for(i=1;i<=12;i++){alpha=a0-30*i*PI/180;x=x0+cos(alpha)*r0-16;y=y0-sin(alpha)*r0;setcolor(4);settextstyle(0,0,2);/*为图形输出设置当前的文本属性settextstyle设置fornt 为字体:DEFAULT_FONT,TRIPLEX_FONT,SMALL_FONT,SANSSERIF_FONT,GOTHIC_FONT,也可以用0 ~ 4代替。
模拟时针转动程序姓名:学号:完成日期:2012年12月设计目的加深对讲授内容的理解,尤其是一些语法规定。
通过课程设计,自然地、熟练地掌握。
熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。
学会上机调试程序。
熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。
能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。
总体设计电子时钟的功能描述电子时钟流程图模块描述动画处理模块在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。
转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。
数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。
详细设计time结构体strume time{usigned char ti_min;usigned char ti_hour;usigned char ti_hud;usigned char ti_sec;};time 结构体定义在dos.h文件中,可以保存系统的当前时间。
全局变量double h,m,s;这三个变量分别保存小时,分钟,秒。
double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。
struct time t[1];定义一个time结构类型的数组。
函数功能的描述1.def()函数原型: void def()def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。
2. abc()函数原型: void abc()abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。
模拟时钟转动程序一、课程设计的内容能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
二、课程设计的要求与数据1.进一步掌握和利用C语言进行课程设计的能力2.进一步理解和运用结构化程序设计的思想和方法3.初步掌握开发一个小型实用系统的基本方法4.学会调试一个较长程序的基本方法5.学会利用流程图和N-S图表示算法6.掌握书写程序设计开发文当的能力三、课程设计应完成的工作1、编写完成相应题目的程序2、编写课程设计报告,课程设计报告应该包含以下6部分1)需求分析:包括设计题目、设计要求以及系统功能需求分析2)总体设计:包括系统总体设计框架和系统功能模块图3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图4)调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、解决方法及其效果等,相应效果截图)5)总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建议?6)附录:主要原程序代码含必要的注释3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。
四、课程设计进程安排五、应收集的资料及其主要参考文献[1]谭浩强.C程序设计(第三版)[M]北京:清华大学出版社,2005年9月[2]谭浩强.C程序设计题解与上机指导(第三版)[M]北京:清华大学出版社,2005年7月[3]夏宝岚张慕蓉夏耘.程序设计教程(第二版)[M],上海:华东理工出版社,2003.1[4]陈锦昌赵明秀.C语言计算机绘图教程(第一版)[M],广州:华南理工大学出版社,1998.9发出任务日期:2010年12月15日指导教师签名:计划完成日期:2010年12月30日基层教学单位责任人签名:主管院长签章:目录1.设计目的与要求 (5)2.总体设计 (6)3.详细设计 (7)3.1画出钟表的轮廓3.2获取系统时间3.3时间和声音的表达4.调试分析 (8)5.总结 (9)6.附录(程序) (10)7.答辩记录(正文处留出适当空白) (13)8.指导教师意见(正文处留出适当空白) (14)1.目的与要求要求:能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
案例五模拟时钟应用程序以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。
用菜单选项或按钮设置时间和秒表。
时间不必与机器系统时间相同,可任意设置。
模拟时钟示意图1 编程要求(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。
(4)各指针运动规律正确。
为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。
(5)数字式时钟的时间显示与指针式时钟显示一致。
(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期。
(7)按下秒表控制按钮后,秒表显示窗中显示从0开始的时间,单位为百分之一秒。
再次按下秒表控制按钮后计时停止,该窗口显示累计时间。
2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。
指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。
计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角)y =圆心y坐标+ 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。
若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。
采用一个定时器消息可以很容易实现指针联动算法。
由于屏幕的重绘速度很快(50 ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。
课程设计报告(本科)课程:高级语言程序设计学号:1210451016姓名:刘壮壮班级:计算机科学与技术1班教师:刘路路时间:2012.12计算机科学与技术系目录一.需求分析 (3)二.概要设计 (3)三.详细设计 (4)四.程序截图 (4)五.设计体会 (5)六.程序实现 (6)七.参考资料 (8)一.需求分析一个模拟时钟,有时针、分针和秒针,能够正确显示出系统的当前时间,具有调时功能。
软件是控制台应用程序,采用Visual C++6.0编制二.概要设计设计一个时钟类,然后设计显示时间函数和设置时间函数。
因为还没用图形界面的程序设计,因此只能在DOS窗口下运行。
模拟时钟显示系统时间设置时间和日期退出三. 详细设计(1).类定义:根据要求本程序应设制一个类定义,时钟类clock。
(2).函数定义:根据称需要求设计了四个函数,SetTime();ShowTime();Cintime();ShowTitle();四. 程序实现:(1) .显示界面(2).显示系统时间(3).更改时间和日期五. 设计体会在这次的课程设计中,我学会了不少东西。
我们选的题目是单位人事管理系统,我们对单位人事管理系统的一些信息进行设计了,比如:客户基本信息管理和员工信息管理等。
我设计的是客户基本信息管理子系统。
这个模块我对其设计了基本信息的一些增添,删除,查询,浏览等。
通过这次课程设计使我懂得了如何对文件操作一些知识,使我更好的学习和掌握了文件操作的相关知识。
也使我懂得理论与实际相结合是很重要的,两者结合,从而提高自己的实际操作和思考的能力。
在设计的过程中遇到很多问题,同时在设计的过程中发现了自己所学的不足之处,对以前所学过的知识理解和掌握得不够,通过这次课程设计之后,一定把以前所学过的知识重新加深理解。
这次课程设计经过两个星期的时间终于顺利完成了,在设计中遇到的许多问题,最后都在老师的辛勤指导下解答了。
同时,在老师的身上我学得到很多实用的知识,在此向老师表示感谢!六. 程序实现#include<iostream.h>#include<windows.h>class Clock{public:Clock();void SetTime(int NewY,int NewMo,int NewD,int NewH,int NewM,int NewS);void ShowTime();void Cintime();void ShowTitle();~Clock(){}private:int Hour,Minute,Second;int Year,Month,Day;};Clock::Clock(){Year=0;Month=0;Day=0;Hour=0;Minute=0;Second=0;}void Clock::SetTime(int NewY,int NewMo,int NewD,int NewH,int NewM,int NewS){Year=NewY;Month=NewMo;Day=NewD;Hour=NewH;Minute=NewM;Second=NewS;}void Clock::ShowTime(){cout<<Year<<"年"<<Month<<"月"<<Day<<"日"<<endl;cout<<Hour<<":"<<Minute<<":"<<Second<<endl;}void Clock::Cintime(){cout<<"请输入年月日:"<<endl;cin>>Year>>Month>>Day;cout<<"请输入时间:"<<endl;cin>>Hour>>Minute>>Second;}void Clock::ShowTitle(){cout<<"*******************************************"<<endl;cout<<"*** 模拟电子时钟 ******"<<endl;cout<<"*******************************************"<<endl;cout<<"*******************************************"<<endl;cout<<"****** 显示系统时间请输入 1 ******"<<endl;cout<<"****** 更改时间和日期请输入 2 ******"<<endl;cout<<"***** 退出 0 ******"<<endl;cout<<"*******************************************"<<endl;}int main(){Clock clock;int done=1;int number;/* cout<<"Systetime is:"<<endl;SYSTEMTIME sys;//GetLocalTime是windows.h中提供的方法GetLocalTime( &sys );clock.SetTime(sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wM inute,sys.wSecond);clock.ShowTime();*/clock.ShowTitle();while(done==1){system("pause");system("cls");clock.ShowTitle();cin>>number;switch(number){case 1:cout<<"Systetime is:"<<endl;SYSTEMTIME sys;//GetLocalTime是windows.h中提供的方法GetLocalTime( &sys );clock.SetTime(sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinu te,sys.wSecond);clock.ShowTime();break;case 2:clock.Cintime();clock.ShowTime();break;case 0 :done=0;break ;default:cout<<"输入错误请重新输入"<<endl;}}return 0;}七. 参考资料C++程序设计教程李乘璋北京理工大学出版社。
高级语言程序设计设计题目:模拟时钟转动程序目录源程序 (3)题目与要求 (9)功能设计说明 (10)详细设计分析 (11)主函数分析 (12)时间输出 (13)小结 (14)源程序:#include"graphics.h"#include"math.h"#include"dos.h"#define pi 3.1415926#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300 #define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240 #define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) void init(){int i,l,x1,x2,y1,y2;setbkcolor(3);circle(300,240,200);circle(300,240,205);circle(300,240,100);circle(300,240,2);for(i=0;i<60;i++){if(i%5==0)l=15;elsel=5;x1=200*sin(i*6*pi/180)+300;y1=200*cos(i*6*pi/180)+240;x2=(200-l)*sin(i*6*pi/180)+300;y2=(200-l)*cos(i*6*pi/180)+240;line(x1,y1,x2,y2);}}main(){int x,y,i,k=1;int gdriver=9,gmode=2;unsigned char h,m,s;float n;struct time t[1];struct date d[1];initgraph(&gdriver,&gmode,"c:\\win-tc");initgraph(&gdriver,&gmode,"c:\\win-tc");for(i=0;i<=6;i++){settextstyle(TRIPLEX_FONT,HORIZ_DIR,i);cleardevice();settextjustify(1,1);outtextxy(300,80,"12") ;outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3");outtextxy(380,100,"1"); outtextxy(220,100,"11"); outtextxy(430,160,"2"); outtextxy(430,310,"4"); outtextxy(380,370,"5"); outtextxy(220,370,"7"); outtextxy(160,160,"10"); outtextxy(160,310,"8");}init();setwritemode(1);if(k!=0){gettime(t);h=t[0].ti_hour;m=t[0].ti_min;s=t[0].ti_sec;}setcolor(9);n=(float)h+(float)m/60;d(140,n,30);setcolor(14);d(160,m,6);setcolor(4);d(180,s,6);while(!kbhit()){while(t[0].ti_sec==s)gettime(t);gotoxy(44,18);printf("\b\b\b\b\b\b\b\b\b"); delay(70);delay(30);setcolor(4);d(180,s,6);s=t[0].ti_sec;d(180,s,6);if(t[0].ti_min!=m){setcolor(14);d(160,m,6);m=t[0].ti_min;d(160,m,6);}if(t[0].ti_hour!=h){setcolor(7);d(140,h,30);h=t[0].ti_hour;d(140,h,30);delay(240);delay(140);delay(240);}if(s<10){ if(m<10)printf("%u:0%u:0%u",h,m,s);elseprintf("%u:%u:0%u",h,m,s);}else{ if(m<10)printf("%u:0%u:%u",h,m,s);elseprintf("%u:%u:%u",h,m,s);}printf("\b\b\b\b\b\b\b\b\b");}getch();closegraph();}1、题目与要求1、1设计任务:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
《计算机应用基础》课程设计任务书一、设计题目模拟时钟转动程序设计二、主要内容设计一个类似于Windows“时钟”的程序,并用数字显示时间。
三、具体要求及应提交材料1、在界面显示一个活动时钟,能模拟机械钟表行走;2、表盘上有刻度和数字;3、数字显示时间;4、时针、分针、秒针的位置与数字显示时间一致;5、用户能修改时间;提交材料:1、任务书;2、课程设计说明书(打印);3、材料刻盘:程序、说明书四、主要技术路线提示主要使用时钟控件的Interval属性和 Timer事件。
1小时=60分=3600秒。
分别用Hour()函数、 Minute()函数、 Second()函数返回当前系统时间Time()的小时、分钟、秒数。
坐标系统的中心在图片框的正中,时钟绘制在图片框中的正中央,外圈用Pset方法或Circle方法绘制,时针、分针和秒针用Line方法选择不同的线形和颜色绘制。
时、分、秒针随时间变化而导致的位置改变同样使用Line方法来实现。
主要操作界面(仅供参考)见图1图1时钟程序操作主界面五、进度安排第一周,下达课程设计任务书,根据设计要求进行VB语言知识的复习,做系统总体设计,编写程序、程序调试;第二周,程序的调试、修改、完善;撰写课程设计说明书。
六、推荐参考资料1.杨明广.王秀华. Visual Baisc程序设计教程.中国科学技术出版社,2006.11,21世纪教材;2.王秀华.余建坤. Visual Baisc程序设计上机和级考实训教程.中国科学技术出版社,2006.11,21世纪教材;3.龚沛曾. Visual Baisc程序设计简明教程(第二版).高等教育出版社,2003 4.曾强聪.新编Visual Basic程序设计教程.清华大学出版社,2004指导教师签名日期年月日系主任审核日期年月日。
模拟时钟行走课程设计总体要求采用模块儿化程序设计;鼓励可视化编程;源程序中有足够的注释;学生可自行增加新功能模块儿;必须上机调试通过;注重算法运用,优化存储效率与运算效率;需提交源程序及相关文件;目录1 课程任务书2 系统设计3 模块设计3.1 总体结构3.2 流程图3.3 使用的主要函数4 调试及测试1、调试过程中的问题2、调试结果5 设计总结6 心得体会及致7 答辩记录8 教师意见一、课程设计任务书在屏幕上显示一个活动时钟;能模拟机械钟表行走;准确地利用数字显示日期和时间;按任意键时程序退出。
二、系统设计总体结构:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。
每隔一秒读取一次时间,直到键盘有输入为止。
流程图开始初始化绘画窗口画表盘否获取系统时间结束使用的主要函数:setlinestyle 设置画线setcolor 设置颜色line(int x1,int y1,int x2,int y2)画直线circle(int x,int y,int r)画圆outtextxy(int x,int y,char *textstring)在指定位置输出字符initgraph(int x, int y); 初始化绘图窗口setwritemode( ); 设置绘图模式kbhit() 检查是否有键盘输入GetLocalTime(&ti); 获取当前时间sleep() 程序暂停若干时间三、模块设计主要模块功能、源代码及注释:1.计算表针的位置并画出表针void Drawzhizhen(int hour, int minute, int second){double a_hour, a_min, a_sec; // 时、分、秒针的弧度值int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的位置a_sec = second * 2 * PI / 60; // 计算时、分、秒针的弧度值a_min = minute * 2 * PI / 60 + a_sec / 60;a_hour= hour * 2 * PI / 12 + a_min / 12;x_sec = int(120 * sin(a_sec)); y_sec = int(120 * cos(a_sec)); ///计算时、分、秒针的位置x_min = int(100 * sin(a_min)); y_min = int(100 * cos(a_min));x_hour= int(70 * sin(a_hour)); y_hour= int(70 * cos(a_hour));setlinestyle(PS_SOLID, NULL, 10); // 画时针setcolor(BLUE);line(300 + x_hour, 240 - y_hour, 300, 240 );setlinestyle(PS_SOLID, NULL, 5);// 画分针setcolor(GREEN);line(300 + x_min, 240 - y_min, 300, 240 );setlinestyle(PS_SOLID, NULL, 2); // 画秒针setcolor(WHITE);line(300 + x_sec, 240 - y_sec, 300, 240 );}2.画表盘void Drawbiaopan(){int i,l,x1,x2,y1,y2;setbkcolor(1);circle(300,240,180);circle(300,240,185);for(i=0;i<60;i++) /*划钟点上的短线*/ {if(i%5==0)l=15;elsel=5;x1=180*sin(i*6*PI/180)+300;y1=180*cos(i*6*PI/180)+240;x2=(180-l)*sin(i*6*PI/180)+300;y2=(180-l)*cos(i*6*PI/180)+240;line(x1,y1,x2,y2);}outtextxy(300,80,"12") ;outtextxy(300,390,"6");outtextxy(140,230,"9");outtextxy(460,230,"3");outtextxy(380,100,"1");outtextxy(220,100,"11");outtextxy(430,160,"2");outtextxy(430,310,"4");outtextxy(380,370,"5");outtextxy(220,370,"7");outtextxy(160,160,"10");outtextxy(160,310,"8");}3.将获取的整数型时间变量转换成字符型void ch1(int a,int x) //将年转换成字符型并输出{char b,c,d,e;b=(char)(a/1000+48);c=(char)((a%1000)/100+48);d=(char)((a%100)/10+48);e=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);outtextxy(x+20,10,d);outtextxy(x+30,10,e);}void ch2(int a,int x) //其他时间转换成字符型并输出{char b,c;b=(char)(a/10+48);c=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);}主函数:void main(){initgraph(640, 480); // 初始化绘图窗口Drawbiaopan(); // 绘制表盘setwritemode(R2_XORPEN); // 设置绘图模式SYSTEMTIME ti; // 定义ti保存当前时间while(!kbhit()) // 按任意键退出钟表程序{GetLocalTime(&ti); // 获取当前时间ch1(ti.wYear,10);outtextxy(50,10,"年"); //输出时间ch2(ti.wMonth,65);outtextxy(85,10,"月");ch2(ti.wDay,100);outtextxy(120,10,"日");ch2(ti.wHour,135);outtextxy(155,10,":");ch2(ti.wMinute,165);outtextxy(185,10,":");ch2(ti.wSecond,195);Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); // 画表针Sleep(1000); // 延时 1 秒Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); // 画表针}closegraph(); // 关闭绘图窗口}四调试及测试使用vc企业版进行反复调试五设计总结调试过程出现的问题:1.Vc++6.0中没有“graphics.h”,安装turboc.2.0中的函数库EasyX后出现权限问题。
模拟时钟程序设计摘要模拟电⼦时钟主要就是对电⼦时钟4个功能模块的组成进⾏编程。
对电⼦时钟的界⾯显⽰模块,时钟动画处理模块,数字时钟处理模块。
界⾯显⽰模块主要调⽤了C语⾔图形系统函数和字符屏幕处理函数画出时钟程序的主⾯。
按键控制处理模块第⼀是读取⽤户按键的键值。
第⼆是通过对键盘按键值的判断,执⾏相应的操作。
时钟动画处理模块是通过对相关条件的判断和时钟指针坐标值的计算,完成时,分,秒指针的擦除和重绘。
以及最后的数字处理模块是实现数字时钟的显⽰和数字时钟的修改。
关键词:C语⾔;电⼦时钟;WIN-TC;⽬录(参考⼀)第⼀章综述 (4)1.1 课题的现实意义 (4)1.2 软件环境 (4)1.3 硬件环境 (4)1.4 项⽬⼈员分⼯ (4)第⼆章系统设计流程图 (5)2.1 系统流程图 (5)2.2 主要功能表 (5)第三章系统分析和设计 (8)3.1 图形的绘制和输出 (8)3.2 ⽂本的输出显⽰ (8)3.3 计算函数的调⽤ (8)3.4 程序的运⾏和退出 (10)第四章系统测试 (11)4.1 系统测试 (11)4.2 调试 (11)4.3 错误原因分析⼀ (11)4.4 错误原因分析⼆ (11)第五章⽤户使⽤说明书 (14)5.1 运⾏WIM-TC程序进⼊系统界⾯ (14)5.2 系统的使⽤ (14)5.3 退出程序 (14)第六章⼯作总结 (15)第七章源代码 (16)参考⽂献 (28)第⼀章综述1.1课题的现实意义:随着社会的进步和科技的发展,电⼦钟表业成为了我们⽣活中不可缺少的⼀部分。
特别是应⽤在如⽕车站之类的公共场所,其⽤途不⾔⽽喻。
在此,我们介绍⼀个电⼦时钟的设计和实现,模拟windows⾃带的时钟。
1.2软件环境:WINTC;C语⾔,Windows开发环境;1.3硬件环境:学校台式电脑1.4项⽬⼈员分⼯:界⾯设计--------刘丹,程序设计--------林帅键界⾯设计:在颜⾊搭配的发⾯,其中也遇到了⼀点⼩⿇烦,就是在搭配秒针颜⾊的时,运⾏的时候秒针⾛的所有路径都会留下痕迹,开始的时候秒针的颜⾊只能选择深灰⾊,其他的颜⾊都会出现路径⾛时痕迹的出现,这时候就应该考虑到在编写程序中这个数字代号是否已经被其他的名称所使⽤了。
摘要 ............................................................. - 0 -1 引言 ........................................................... - 2 -1.1 选题背景 ..................................................... - 2 -1.2 任务与分析 ................................................... - 2 -2 方案设计 ....................................................... -3 -3 界面设计 ....................................................... - 3 -4 代码设计及程序调试 ............................................. - 4 -总结与体会 ....................................................... - 7 -致谢 ............................................................. - 9 -参考文献 ........................................................ - 10 -摘要随着计算机的不断更新发展,计算机图形操作和动画设计扮演着极为重要的角色, Windows环境下的Visual Basic提供了丰富的图形功能。
本文主要通过对选题背景、方案设计、界面设计、代码编写及调试以及软件使用说明等的介绍,介绍了作者利用Visual Basic对“模拟时钟转动”程序的开发设计过程。
目录1.基本功能描述 (1)2.设计思路 (1)3.软件设计 (3)3.1 设计步骤 (3)3.2 界面设计 (4)3.3 关键代码的实现 (8)3.3.1 构造函数功能实现原理 (8)3.3.2 确定指针位置实现原理 (8)3.3.3 OnDraw()函数实现原理 (9)3.3.4 OnTimer()函数的实现原理 (9)3.3.5 其它功能的实现原理 (9)4.结论与心得体会 (10)5.参考文献 (10)6.思考题 (11)7.附录 (11)7.1 调试报告 (11)7.2 测试结果 (13)7.3 关键源代码 (13)模拟时钟程序1.基本功能描述模拟时钟程序为指针式时钟,在时钟的上方用数字形式显示日期,时钟下方用数字形式显示数字时钟。
数字时钟与指针时钟显示一致,并且与系统时间保持一致。
另外,在菜单栏上添加控制按钮,分别实现时钟的暂停、启动、时间调整、恢复系统时间等功能。
同时,添加工具栏,以便快捷实现上述操作功能。
当暂停按钮按下时,指针停止走动,数字时钟停止显示;当启动按钮按下时,指针重新开始走动,数字时钟开始显示;当恢复系统时间按钮被按下时,指针时钟和系统时间重新保持一致;当时间调整按钮被按下时,弹出对话框,对时间进行设置,按下确定按钮后,指针时间显示与设置时间一致并开始转动。
2.设计思路程序开始启动后,计时器启动,每次间断一秒自动调用OnTimer()函数,OnTimer()函数包含了各个时钟的计时规则,即秒、分、时、日、月、年等计时规则。
此后进行刷新重绘操作,即调用OnDraw()函数,对指针和数字时钟进行重绘。
程序产生消息循环,当收到暂停消息时,关闭计时器,停止计时;当收到启动消息时,启动计时器,重新开始计时;当接收到恢复系统时间消息时,调用系统时间,并初始化各时间变量开始计时;当接收到调整时间消息时,构建对象,并获取对象中各时间变量的值,并开始计时。
在指着重绘时,需要知道其位置,通过调用SetClock()函数实现。
案例五模拟时钟应用程序以实例为背景学习基于MFC的WINDOWS应用程序设计,编写一个模拟时钟程序,此程序在屏幕左边有一个指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。
用菜单选项或按钮设置时间和秒表。
时间不必与机器系统时间相同,可任意设置。
模拟时钟示意图1 编程要求(1)为该程序设计一个美观大方的图标。
(2)程序界面设计合理,色彩得体大方,显示正确。
(3)时针、分针和秒针形象美观,即使各指针重合也可辨认。
(4)各指针运动规律正确。
为便于演示,时钟速度应比实际时间快20倍,即1小时相当于3分钟。
(5)数字式时钟的时间显示与指针式时钟显示一致。
(6)按下设置时间按钮或菜单项可弹出一对话框,用于设置当前的时间和日期。
(7)按下秒表控制按钮后,秒表显示窗中显示从0开始的时间,单位为百分之一秒。
再次按下秒表控制按钮后计时停止,该窗口显示累计时间。
2 问题分析本题主要涉及到的知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。
指针运动算法和屏幕重绘方法是本程序主要难点所在。
不论何种指针,每次转动均以π/30弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。
计算指针端点(x, y)的公式如下:x =圆心x坐标+ 指针长度* cos (指针方向角)y =圆心y坐标+ 指针长度* sin (指针方向角)注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),由于指针可能跨越圆心,因此一个指针需要计算两个端点。
三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此应该使用一个定时器消息来处理指针的运动。
若用三个定时器消息分别处理时针、分针和秒针的运动,就会使问题复杂化且不易实现三个指针联动的正确规律。
采用一个定时器消息可以很容易实现指针联动算法。
由于屏幕的重绘速度很快(50 ms一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。
//单片机实验模板文件。
具有三个基本功能:// 1、数码管、发光二极管扫描显示// 2、键盘扫描,返回0---15// 3、T0中断,产生基本延时2.5ms,并且调用显示函数// 根据以上功能,该文件为进一步编写实验程序、实际应用程序,提供了基础#include <reg52.h>#define delay5ms(x) {delay_xms=x*2; while(delay_xms<255);} //用于延时的宏,x的1个数值对应延时5ms。
x<=127。
void display(void);unsigned char codeledcode[]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};//共阴极7段数码管显示段码//unsigned char xdata dis_seg _at_ 0xfeff; //输出数码管段显示码地址//unsigned char xdata dis_bit _at_ 0xfdff; //输出数码管位控制码地址unsigned char min,sec,hour;unsigned char bdata dis_buf[7]; //dis_buf[0]为最高位数据(显示在左边),dis_buf[5]为最低位数据;dis_buf[6]为8个发光二极管的数据。
unsigned char data delay_xms; //用于延时sfr IPH = 0xb7; //定义中断优先级(高2级)寄存器//******************************************************************void int_t0(void) interrupt 1 //T0中断函数,fosc按11.0592M计算,定时时间为2.5ms {TH0=0xf7;delay_xms--;display(); //调用显示函数}//******************************************************************void display(void) //数码管显示函数。