模拟时钟转动课设报告_第1页
模拟时钟转动课设报告_第2页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、模拟时针转动程序姓名:李建利学号: 12020326完成日期: 2012 年 12 月设计目的加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟 练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。 学会上机调试程序。熟悉 C 语言图形模式下的编程,掌握利用 C 语言相关函数开 发电子时钟的基本原理。能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动 时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数 字式时钟的时间显示与指针式时钟显示一致。总体设计电子时钟1J1-动画显示模块转动时针处理模块数字时钟处理模块电子时钟的功能

2、描述开始进入图形模式转动时钟数字时钟的显示退出系统显示进入主体界面显示动态图像结束电子时钟流程图模块描述动画处理模块在屏幕上显示 sin 和 cos 型的动态函数图像,显示运动的问候语转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24 进制,分钟和秒是 60 进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟 所显示的时间与计算机的系统时间一致。详细设计time 结构体strume timeusig ned char ti_

3、min;usig ned char ti_hour;usig ned char ti_hud;usig ned char ti_sec;time 结构体定义在 dos.h 文件中,可以保存系统的当前时间。全局变量 double h , m s;这三个变量分别保存小时,分钟,秒。double x , y, x1, y1 , x2, y2;保存数字时钟中小时分钟秒在屏幕中显示的位 置。struct time t1; 定义一个 time 结构类型的数组。函数功能的描述1.def()函数原型 : void def () def ()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin 型的彩

4、带,且在整个函数中保留结果。2.abc()函数原型 : void abc()abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。3 .digitclock ()函数原型 :void digitclock ()digitclock 函数用于在(x,y)位置显示 clock 值,clock 值为时分秒。4. clockhandle()函数原型 :void clockhandle()clockhandle ()函数用于完成时针转动和数字时钟的显示,包括时针转动角度的 运算,还有对声音的输出。5 . main()函数原型 : void main()main ()函数是主函数,既包

5、括绘画表盘的基本框架,又有对其他函数的调用函数测试与调试在函数编写完成后,进行过多次测试。在测试过程中遇到很多的问题,数字时钟的显示位置与理想中的有偏差,转动时针移动后痕迹不能清除。题通过对 clockhandle ()的调整得到了很好的解决。还有就是在动画处理上运动时间的间隔和遇到路程的测试遇到了问题, 最后通过查阅资料都得到了解决。源程序清单#include#include#include#include#include#include#define PI 3.1415926#define ESC 0 x11b#define step 10/* 函数声明 */int digithour(d

6、ouble);int digitmin(double);int digitsec(double);像 这些问但void digitclock(int,int,int);void clockhandle();void abc(); void def();double h,m,s,day,mon; double x,x1,x2,y,y1,y2; struct time t1;/* 主函数 */main()int driver,mode=0,i,j;driver=DETECT; /* initgraph(&driver,&mode,);/* setlinestyle(0,0,3);setbkcolo

7、r(0);/* 画主体框架的边线 */ setcolor(12); line(82,430,558,430); line(70,62,70,418);line(82,50,558,50); line(570,62,570,418); line(70,62,570,62); line(76,56,295,56);line(342,56,564,56);/* 画主体框架的边角弧线 */ setlinestyle(0,0,3);自动检测显示设备 */初始化图形系统 */arc(82,62,90,180,12);setlinestyle(0,0,3);arc(558,62,0,90,12);setli

8、nestyle(0,0,3);arc(82,418,180,279,12);setlinestyle(0,0,3);arc(558,418,270,360,12);setlinestyle(0,0,7);setcolor(9);outtextxy(301,53,CLOCK);setcolor(15);outtextxy(299,53,CLOCK); /* setcolor(9);rectangle(342,72,560,380); /*setwritemode(0); /* 原来信息覆盖) */setcolor(13);outtextxy(405,75,BeiJing Shijian);/*

9、绘制电子时钟的边框 */ setlinestyle(0,0,1); setcolor(7); line(392,310,510,310);line(392,330,510,330); arc(392,320,90,270,10); arc(510,320,270,90,10);/* 绘制数字时钟的分隔符 */ setcolor(5);for(i=431;i=470;i+=39)for(j=317;j=324;j+=7) setlinestyle(0,0,3);circle(i,j,1);/* 绘制表示小时的圆点 */for(i=0,m=0,h=0;i=11;i+,h+)显示标题 */绘制矩形时

10、钟框架 */ 规定划线的方式(将所画位置的x=100*sin(h*60+m)/360*PI)+451;y=200-100*cos(h*60+m)/360*PI);setlinestyle(0,0,3);setcolor(5);circle(x,y,1);/* 绘制表示分针或秒针的圆点 */setcolor(3);for(i=0,m=0;i28) n=0;/* 利用此循环,延时一秒 */while(t0.ti_sec=s&t0.ti_min=m&t0.ti_hour=h) gettime(t);if(bioskey(1)!=0)k=bioskey(0);/* 数字时钟的秒针 */setcolor

11、(15);digitclock(485,318,digitsec(s)+1);/* 用原来的颜色在原来位置再绘制秒针,清除当前秒针 */setcolor(12);x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);line(451,200,x2,y2);/* 分针处理 */if(t0.ti_min!=m)/* 消除当前分针 */setcolor(15);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);/* 绘制新的分针 */m=t0.ti_min;digitclock(4

12、46,318,digitmin(m); /* */x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);/*小时处理 */if(t0.ti_hour*60+t0.ti_min)!=(h*60+m)/* 消除当前时针 */setcolor(15); x=50*sin(h*60+m)/360*PI)+451;y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y);/* 绘制新的时针 */h=t0.ti_hour;digitclock(408,318,digithour(h);x=50

13、*sin(h*60+m)/360*PI)+451;y=200-50*cos(h*60+m)/360*PI);line(451,200,x,y);/* 在指定位置显示数字时钟 */void digitclock(int x,int y,int clock)char bufferl10;setfillstyle(0,2);bar(x,y,x+15,328); /* if(clock=60) clock=0;sprintf(bufferl,%d,clock); outtextxy(x,y,bufferl);在数字时钟中显示新的钟值画一个二维码 */* 将 double 型的小时数转换成 int 型

14、*/ int digithour(double h) int i;for(i=0;i=23;i+)if(h=i) return i;/* 将 double 型的分针数转换成 int 型 */ int digitmin(double m)int i;for(i=0;i=59;i+)if(m=i) return i;/* 将 double 型的秒钟数转换成 int 型 */ int digitsec(double s)int i;for(i=0;i=59;i+)if(s=i) return i;/* 滚动的字幕 */void abc()int n,size,q=0; static int startx=5;static int starty=10; setbkcolor(1);while(q10)q=q+1;for(n=1;n=35;n+) cleardevice(); setcolor(2); setlinestyle(0,0,1); setfillstyle(1,10);rectangle(startx+n*step,starty+n*step,startx+n*step+160,starty+n*step+80); /* 绘制矩形 */ floodfill(startx+n*step+10,starty+n*step+20,2);settextst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论