模拟时钟程序设计.doc
《模拟时钟程序设计.doc》由会员分享,可在线阅读,更多相关《模拟时钟程序设计.doc(29页珍藏版)》请在沃文网上搜索。
1、摘 要模拟电子时钟主要就是对电子时钟4个功能模块的组成进行编程。对电子时钟的界面显示模块,时钟动画处理模块,数字时钟处理模块。界面显示模块主要调用了C语言图形系统函数和字符屏幕处理函数画出时钟程序的主面。按键控制处理模块第一是读取用户按键的键值。第二是通过对键盘按键值的判断,执行相应的操作。时钟动画处理模块是通过对相关条件的判断和时钟指针坐标值的计算,完成时,分,秒指针的擦除和重绘。以及最后的数字处理模块是实现数字时钟的显示和数字时钟的修改。关键词 :C语言;电子时钟;WIN-TC;29目 录(参考一)第一章 综述411 课题的现实意义412 软件环境413 硬件环境414 项目人员分工4第二
2、章 系统设计流程图521 系统流程图522 主要功能表5第三章 系统分析和设计831 图形的绘制和输出832 文本的输出显示8 33 计算函数的调用834 程序的运行和退出10第四章 系统测试1141 系统测试1142 调试1143 错误原因分析一1144 错误原因分析二11第五章 用户使用说明书1451 运行WIM-TC程序进入系统界面 1452 系统的使用14 53 退出程序14 第六章 工作总结15第七章 源代码 16 参考文献28第一章 综述1.1课题的现实意义: 随着社会的进步和科技的发展,电子钟表业成为了我们生活中不可缺少的一部分。特别是应用在如火车站之类的公共场所,其用途不言而喻
3、。在此,我们介绍一个电子时钟的设计和实现,模拟windows自带的时钟。1.2软件环境:WINTC;C语言,Windows开发环境;1.3硬件环境: 学校台式电脑1.4项目人员分工: 界面设计-刘丹,程序设计-林帅键界面设计:在颜色搭配的发面,其中也遇到了一点小麻烦,就是在搭配秒针颜色的时,运行的时候秒针走的所有路径都会留下痕迹,开始的时候秒针的颜色只能选择深灰色,其他的颜色都会出现路径走时痕迹的出现,这时候就应该考虑到在编写程序中这个数字代号是否已经被其他的名称所使用了。程序设计:程序应该分模块编译才能提高效率。弄懂程序流程图,可以在最短时间发现错误。实验报告的部分处理:对实验数据报告的整体
4、思路的流程的粗矿处理和填写。PPT的大体制作:在PPT中主要是根据对我们这次模拟时钟的主要思路,从而我们也是编写程序的主要步骤,在其中我们也注明了一些在模拟时钟出现的一些错误的原因。 第二章 系统设计流程图21系统设计原理图 程序流程图如下所示退出程序开始进入图形界面绘绘制主体框界面绘制电子时钟界面绘制帮助界面调用时钟处理程序结束(图1)2.2 主要功能表如下所示电子时钟 按键控制模块数字动画处理模块界面显示模块时钟动画处理模块 (图2)界面显示模块:电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用C语言图形系统函数和字符屏幕处理函数画出时钟程序的主界面,主界面包括类似windows
5、自带的电子时钟的界面和帮助界面两部分。按键控制模块:按键控制模块主要完成两部分功能。第一,读取用户按键的键值。第二,通过对键盘按键值的判断,执行相应的操作,如光标、修改时间。时钟动画处理模块:它通过对相关条件的判断和时钟指针指标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。数字时钟处理模块:主要实现了数字时钟的显示和数字时钟的修改。其中,在数字时钟的修改中,用户可先按Tab键定位需要修改内容的位置,然后通过按光标上移或下移键来修改当前时间。第三章 系统分析与设计3.1 图形的绘制与输出函数(1)图形方式的初始化通过函数initgraph来完成。其调用格式为:Innitgr
6、aph(*gdriver, *gmode,*path);函数initgraph是通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形方式。其中3个参数含义如下:gdriver是一个整型值,用来指定要装入的图形驱动程序。gmode是一个整型值,用来设置图形显示模式。path是一个字符串,用来指明图形驱动所在的路径。如果路径为C:TC,则写在参数中则为“C:TC”. (2)line函数:用来指定两个点之间画一条直线,其调用格式为:line(int x1, int y1, int x2 , int y2);其中(x1,y1)和(x2,y2)分别为直线的两个端点坐标。(3)arc函数:
7、用来画圆弧,其调用格式为:arc(int x, int y, int angs, int ange, int r);其中(x,y)为圆弧所在的圆心的坐标,angs,ange分别为圆弧的起始角和终止角,单位为“度”,r圆弧的半径(4)circle函数:该函数用来指定圆心和半径画圆。其调用格式为:circle(int x, int y, int r);其中x,y为指定圆心的坐标,r为圆的半径。(5)cleardevice():清屏使用该函数,它的作用就是清除全屏幕,并将当前点位置设置与屏幕的左上角(0,0)。执行后原先的视图不再存在。(6)closegraph():其作用是释放所有图形系统的分配存
8、储区,恢复到调用initgraph之前状态。(7)setlinestyle():该函数用于设置当前绘图所用的线型与宽度,这些设置仅限于对直线类图形有效。其调用格式为:setlinestyle(int sty, int pat, int b);其3个参数的含义如下:sty用来定义所画直线类型,pat用于用户自定义类型,b指定所画直线粗细。(8)setbkcolor():该函数用来设置背景色,其功能是设置绘图时的背景颜色。其调用格式如下:setbkcolor(int color),其中参数color代表所取颜色,可以为整型常数,也可以为符号常数。(9)setcolor(int color):该函数
9、用来设置前景色,即绘图用的颜色,其调用格式与“setbkcolor”相同。3.2 文本的输出显示其中调用outtextxy函数,outtextxy函数用来在(X,Y)位置输出一个字符串。其调用格式为:outtextxy(int x, int y , char *text );其中参数(x,y)为指定位置坐标,text为待输出的字符串。3.3计算函数的调用调用clockhandle()函数:(1) 程序中旧时钟指针的去除是借助setwritemode(mode)函数设置画线的方式来实现的。如果mode=1,则表示画线是用当前特性的线与所画之处的线进行异或操作,实际上画出的线是原有线与现在规定的线
10、进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没画线,即在当前位置处清除了原来的画线。(2) bioskey()为直接使用BIOS服务的键盘接口函数。其原型为:int bioskey(int cmd),cmd的值决定执行什么操作,当cmd=0时,bioskey()返回下一个在键值,如果按下一个键则返回一个非零值,否则返回0值;当cmd=2时,bioskey()Shift,Ctril,Alt,ScrollLock,NumLock,CapLock,Insert键的使用状态。(3)time结构体struct timeunsigned char ti_min;/*分钟*/unsigne
11、d char ti_hour;/*小时*/unsigned char ti_hund;/*百分之一秒*/unsigned char ti_sec;/*秒*/;time 结构体定义在dos.h文件中,用来保存当前系统时间(4)gettime(struct time*t):该函数用于获取系统时间。(5)settime(t):用于设置新的系统时间。(6)数字时钟处理函数:digithour(double);/*将小时数转换成整型*/digitmin(double);/*将分钟数转换成整型*/ digitsec(double);/*将秒数转换成整型*/digitclock(int, int, int)
12、;/*在指定位置显示时间*/(7)按键处理函数:keyhandle(int key, int count);/*按键处理*/drawcursor(int count);/*根据count的值画一个光标*/clearcursor(int count);/*消除光标*/timeupchange(int count);/*处理光标上移*/timedownchange(int count);/*处理光标下移3.4程序的运行和退出打开WIN-TC软件,新建个文件,将程序复制到软件上,运行程序显示下页界面,按ESC可退出程序。进入图形界面,按TAB键可切换光标在时分秒间的位置,按方向键可调节可调节光标相应
13、位置时分秒的值。第四章 系统测试4.1系统测试打开WIN-TC软件先进行编译检查语法是否有错误,确认语法正确再运行程序。4.2调试问题一: 程序不显示只是闪过问题二:程序无法正常退出;问题三:图形文件打不开,显示如下代码:“”linker error:unable to open input file Cos.OBJ ; 问题四:图形才画到一半就结束运行;问题五:调试分钟的时候时钟出现问题,时钟分钟不同步;4.3 错误原因分析一软件篇问题一:在Window2000以上版本运行WIN-TC软件是应在其后面的输入语句添加getch().以便让程序可以停顿一下。问题三:将其文件保存在桌面上,导致路径
14、设置错误。可以再新建个模板,将源代码复制到模板上,默认保存后运行程序问题四:没有调用相关的头文件(#include ),导致当程序调用到与该头文件有关的程序时出错。 4.4错误原因分析二算法篇问题二:程序出现死循环,检查一下循环语句的算法,发现如下循环语句for(count=2;count!=Esc;) 应将其改为for(count=2;k!=Esc).问题五:算法还不够完善,原先算法如下,由于程序中m=t0.ti_min, 导致后面的条件语句(if(t0.ti_hour*60+t0.ti_min)!=(h*60+m))中的m值发生变化,致使调节分钟值的时候时钟无法同步:因此因在设置一个变量r
15、来收上一个m的值,故改进算法如下所示然而算法仍然不够完善,分钟转完一圈,时钟又要回到原点,由于t0.ti_hour=60时,m=0.导致程序不够完善,故再改进算法如下所示:if(t0.ti_min!=m)/*如果分钟有变化*/ /*消除当前分钟*/setcolor(15);/*白色*/ setlinestyle(0,0,3);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI); line(451,200,x1,y1); /*绘制新的分钟*/ r=m;/*第一次改进*/ m=t0.ti_min;digitclock(446,318,digitmin(m);
16、/*数字时钟显示分钟*/x1=80*sin(m/30*PI)+451; y1=200-80*cos(m/30*PI); line(451,200,x1,y1); else r=m;/*第一次改进*/*小时处理*/if(t0.ti_hour*60+t0.ti_min)!=(h*60+r) /*消除当前时钟*/ setcolor(15);x=50*sin(h*60+r)/360*PI)+451;/*第一次改进*/y=200-50*cos(h*60+r)/360*PI);/*第一次改进*/setlinestyle(0,0,3);line(451,200,x,y);/*绘制新的时钟*/ if(m=0&
17、r=59) t0.ti_hour+; settime(t);/*第二次改进*/if(m=59&r=1)/*第二次改进*/ t0.ti_hour-; settime(t); h=t0.ti_hour;digitclock(408,318,digithour(h);x=50*sin(h*60+m)/360*PI)+451;y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y); 第五章 用户使用说明书5.1用户使用说明书 5.1 打开WINTC软件,新建个模板,将源代码复制到程序上。先编译该程序,默认保存路径,运行程序进入图形界面。5.2 按TAB键改变切换光
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 时钟 程序设计
