C语言课程设计(电子时钟).doc

上传人:laozhun 文档编号:2384963 上传时间:2023-02-17 格式:DOC 页数:23 大小:207.50KB
返回 下载 相关 举报
C语言课程设计(电子时钟).doc_第1页
第1页 / 共23页
C语言课程设计(电子时钟).doc_第2页
第2页 / 共23页
C语言课程设计(电子时钟).doc_第3页
第3页 / 共23页
C语言课程设计(电子时钟).doc_第4页
第4页 / 共23页
C语言课程设计(电子时钟).doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C语言课程设计(电子时钟).doc》由会员分享,可在线阅读,更多相关《C语言课程设计(电子时钟).doc(23页珍藏版)》请在三一办公上搜索。

1、摘 要就钟表的演变历史而言,它大致可以分为3个演变阶段,第一,从大型钟向小型钟演变;第二,从小型钟向袋表过渡;第三,从袋表象腕表发展。每一阶段的发展都和当时的技术发明有着十分紧密的联系,同时它也是各个不同时期的科学家和钟表工匠智慧的结晶。钟和表通常是以内机的大小来区别的。按国际惯例,机芯直径超过50mm、厚度超过12mm的为钟;直径3750mm、厚度46mm者,称为怀表;直径37mm以下为手表;最坚固、最精密的机械之一。现代钟表的原动力有机械力和电力两种。机械钟表是一种用重锤或弹簧的释放能量为动力,推动一系列齿轮运转,借助调速器调节轮系转速,以指针指示时刻和计量时间的计算器。 在生活进步的今天

2、,电子时钟正成为人们生活的一部分,特别是应用在如火车站之类的公共场所,其用途不言而喻。 关键词: 模拟系统; 电子时钟; 时间修改.目 录 一. 设计过程1. 程序功能 . 32 程序设计 . 3 1)设计思路 . 3 2)数据结构 . 3 3)主函数 . 4 4)流程图 . 4 3 程序运行及分析 . 8 4 运行结果 . 9二. 源代码 . 10 1 程序预处理 . 112. 主函数 . 113. 时钟动画处理模块 . 144时钟按键控制模块 . 15 5数字时钟处理模块 . 19三. 设计总结 . 22四. 参考文献 . 23 课程设计(电子时钟)一.设计过程1. 程序功能随着社会的进步

3、和科技的发展,电子时钟逐渐成为人们生活中不可缺少的一部分,下面介绍一种电子时钟的设计和实现。其基本功能模块图如图2程序设计电子时钟 界面显示模块按键控制模块时钟动画处理模式数字时钟模块 1) 设计思路程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在电子时钟程序中,重点和难点在于时、分、秒针坐标值得计算和时钟指针的运行控制,旨在了解C语言图形模式下的编程,了解系统的绘图机数据结构等方面的知识。利用几个模块现实时钟的运转,并可在界面进行时间的更改。 2)数据结构此程序中,使用了C语言的time结构体和几个全局变量,结构如下:1).time

4、结构体struct time unsigned char ti_min;/*分钟*/ unsigned char ti_hour;/*小时*/ unsigned char ti_hund;/*百分之一秒*/ unsigned char ti_sec;/*秒*/2).全局变量double h,m,s;double x,x1,x2,y,y1,y2;struct time t1; 3)主函数1) keyhandle()2)timeupchange()3) timedownchange()4) digitclock()5)drawcuesor()6) clearcursor()7) void cloc

5、khandle()8) main()4)流程图 :电子时钟执行主流程图:进入图形模式绘制主窗体界面绘制电子时钟界面绘制帮主界面调用clockhandle()时钟处理程序 退出程序结束开始进入图形模式main()函数定义变量driver,mode=0,i,j;j=431i=470定义圆心坐标(0,0,3)i+=39设置颜色setcolor(15); i=0,m=0,h=0;开始i=11N x=100*sin(h*60+m)Y i+;h+; i=0;m=0;i=59Nx=100*sin(m/30*PI)+451Y m+;j+; setcolor(4); return0; 结束clockhandle

6、()函数开始keyhandle()函数:定义变量k=0,count;count=2k!=Escti_0 sec.&Multiplex定义颜色setcolor(12)setcolor(15)Mutiplerkey=UPNkey=DOWNY时间上移设置Nkey=TAB break时间下移设置NY setcolor(15)breakbreak调用时间函数结束digitclock函数:char buffer l10clock=60 是否 clock=0sprintf(buffer,”%d”,clock)3程序运行及分析: 1) main()函数主要实现了对电子时钟的初始化工作,及clockhandle

7、()函数的调用。 main() int driver,mode=0,i,j; driver=DETECT;/*自动检测显示设备*/ initgraph(&driver,&mode,);/*初始化图形系统*/ setlinestyle(0,0,3);/*设置当前画线宽度和类型:设置三点宽度实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/ setcolor(9);/*设置当前画线颜色*/2) 时钟的处理模块主要由clockhndle()函数来实现,借助setwritemode(mode)函数设置画线的方式来实现的。setwritemode(1); for(count=2;k!

8、=Esc;) /*开始循环,直至用户按下Esc键结束循环*/3) 此程序对按键进行处理、判断,调用函数来实现。void clockhandle() int k=0,count; setcolor(15); gettime(t);/*取得系统时间,保护在time结构类型的数组变量中*/int keyhandle(int key,int count) switch(key) case UP:timeupchange(count-1); break;4) 调用下面函数,处理时分秒的位置。修改时间。 void digitclock(int x,int y,int clock)char buffer11

9、0;int digithour(double h)int digitmin(double m)int digitsec(double s) void drawcursor(int count) switch(count)void clearcursor(int count) switch(count)4.运行结果 运行初始状态:运行修改后:二. 源码分析:1 程序预处理#include#include#include#include#define PI 3.1415926/*定义变量*/#define UP 18432/*上移键:修改时间*/#define DOWN 20480/*下移键:修改

10、时间*/#define Esc 283/*Esc键:退出系统*/#define TAB 3849/*Tab键:移动光标*/*函数声明*/int keyhandle(int,int); /*键盘按键判断,并调用相关函数处理*/int timeupchange(int); /*处理上移按键*/ int timedownchange(int);/*处理下移按键*/int digithour(double); /*将double型小时数转换成int型 */ int digitmin(double);/*将double型分钟数转换成int型*/int digitsec(double);/*将double

11、型秒钟数转换成int型*/ 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 t1; /*定义一个time结构类型的数组*/2. 主函数main()main() int driver,mode=0,i,j; driver

12、=DETECT;/*自动检测显示设备*/ initgraph(&driver,&mode,);/*初始化图形系统*/ setlinestyle(0,0,3);/*设置当前画线宽度和类型:设置三点宽度实线*/ setbkcolor(0);/*用调色板设置当前背景颜色*/ setcolor(9);/*设置当前画线颜色*/ 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,297,56); line (340,

13、56,564,56);/*画主体框架的边直线*/ /* arc(int x,int y,int stangle,int endangle,int radius */ arc (82,62,90,180,12); arc (558,62,0,90,12); setlinestyle(0,0,3); arc(82,418,180,279,12); setlinestyle(0,0,3); arc(558,418,270,360,12); /*画主体框架的边角弧线*/ setcolor (15); outtextxy (300,53,CLOCK);/*显示标题*/ setcolor(7); rect

14、angle(342,72,560,360);/*画一个矩形,作为时钟的框架*/ setwritemode(0);/*规定画线的方式.mode=0,则表示画线时将所画位置的原来信息覆盖*/ setcolor(15); outtextxy(433,75,CLOCK);/*时钟的标题*/ setcolor(7); line (392,310,510,310); line (392,330,510,330); arc (392,320,90,270,10); arc (510,320,270,90,10);/*绘制电子动画时钟下的数字时钟的边框架*/ /*绘制数字时钟的时分秒的分隔符*/ setcol

15、or(5); for(i=431;i=470;i+=39) for(j=317;j=324;j+=7) setlinestyle (0,0,3); circle (i,j,1);/*以(x,y)为圆心,1为半径画圆*/ setcolor(15);line (424,315,424,325);/*在运行电子时钟前先画一个光标*/ /*绘制表示小时的圆点*/ for(i=0,m=0,h=0;i=11;i+,h+) x=100*sin(h*60+m)/360*PI)+451; y=200-100*cos(h*60+m)/360*PI); setlinestyle(0,0,3); circle (x,

16、y,1); /*绘制表示分钟或秒钟的圆点*/ for(i=0,m=0;i=59;m+,i+) x=100*sin(m/30*PI)+451; y=200-100*cos(m/30*PI); setlinestyle(0,0,1); circle(x,y,1); /*在电子表的左边打印帮助提示信息*/ setcolor(4); outtextxy(184,125,HELP); setcolor(15); outtextxy(182,125,HELP); setcolor(5); outtextxy(140,185,TAB:Cursor move); outtextxy(140,225,UP:Ti

17、me+); outtextxy(140,265,DOWN:Time-); outtextxy(140,305,Esc:Quit system!); outtextxy(140,345,Version:2.0); setcolor(12); outtextxy(150,400,Nothing is more important than time!); clockhandle();/*开始调用时中处理程序*/ closegraph();/*关闭图形系统*/ return 0;/*表示程序正常结束,向操作系统返回一个0值*/ 3 时钟动画处理模块 void clockhandle() int k=

18、0,count; setcolor(15); gettime(t);/*取得系统时间,保护在time结构类型的数组变量中*/ h=t0.ti_hour; m=t0.ti_min; x=50*sin(h*60+m)/360*PI)+451;/*时针x的坐标值*/ y=200-50*cos(h*60+m)/360*PI);/*时针y的坐标值*/ line(451,200,x,y);/*在电子表中绘制时针*/ x1=80*sin(m/30*PI)+451;/*分针x的坐标值*/ y1=200-80*cos(m/30*PI);/*分针y的坐标值*/ line(451,200,x1,y1);/*在电子表

19、绘制分针*/ digitclock(408,318,digithour(h);/*在数字时钟中,显示当前的小时值*/ digitclock(446,318,digitmin(m);/*在数字时钟中,显示当前的分钟值*/ setwritemode(1); for(count=2;k!=Esc;) /*开始循环,直至用户按下Esc键结束循环*/ setcolor(12);/*淡红色*/ sound(500);/*以指定频率打开PC扬声器,这里频率为500*/ delay(700);发一个频率为HZ的音调 sound(200); delay(300); nosound(); s=t0.ti_sec;

20、 m=t0.ti_min; h=t0.ti_hour; x2=98*sin(s/30*PI)+451; y2=200-98*cos(s/30*PI); line(451,200,x2,y2); while(t0.ti_sec=s&t0.ti_min=m&t0.ti_hour=h) gettime(t); if(bioskey(1)!=0) k=bioskey(0); count=keyhandle(k,count); if(count=5) count=1; setcolor(15);digitclock(485,318,digitsec(s)+1);setcolor(12);x2=98*si

21、n(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(446,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)!=

22、(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*sin(h*60+m)/360*PI)+451; y=200-50*cos(h*60+m)/360*PI); line(451,200,x,y); 4 时钟按键控制模块int keyhandle(int key,int count) switch(key) case UP:timeupcha

23、nge(count-1); break; case DOWN:timedownchange(count-1); break; case TAB:setcolor(15); clearcursor(count); drawcursor(count); count+; break; return count;int timeupchange(int count) if(count=1) t0.ti_hour+; if(t0.ti_hour=24) t0.ti_hour=0; settime(t); if(count=2) t0.ti_min+; if(t0.ti_min=60) t0.ti_min

24、=0; settime(t); if(count=3) t0.ti_sec+; if(t0.ti_sec=60) t0.ti_sec=0; settime(t); int timedownchange(int count) if(count=1) t0.ti_hour-; if(t0.ti_hour=0) t0.ti_hour=23; settime(t); if(count=2) t0.ti_min-; if(t0.ti_min=0) t0.ti_min=59; settime(t); if(count=3) t0.ti_sec-; if(t0.ti_sec=0) t0.ti_sec=59;

25、 settime(t); 5 数字时钟处理模块void digitclock(int x,int y,int clock)char buffer110; 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) int i; for(i=0;i=23;i+) if(h=i) return i; int digitmin(double m) int i; for(i=0;i=59;i+)

26、 if(m=i) return i; int digitsec(double s) int i; for(i=0;i=59;i+) if(s=i) return i; void drawcursor(int 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; void clearcursor(int count) switch(count) case 2:line(424,315,424,3

27、25);break; case 3:line(465,315,465,325);break; case 1:line(505,315,505,325);break; 三. 设 计 总 结:在这次c语言课程设计的实习中,我深感压力,因为对于一门新接触的课程很是陌生,且平时在这方面没有过多的关注,平时学的一点理论知识也很有限,编程序、写流程图都不是很好,在实习过程中也明显的准备不足,很多都不懂,刚开始不知从何入手,遇到了很多难题,于是我决定查找资料,来弥补我的不足。从起初的选题材,到总体设计,并进行可行性分析,再进行分工编程,最后进行调式,开始出现了很多错误,在认真的对阅、查找、修改之后,终于看到

28、了运行结果,跳动的钟面深深地感动着我,嘀嗒的声音更是动听,再进行时间修改后,一切正常,最终完成这次课程设计。但在编程和调程序过程中,也学到了很多知识,也使对C语言的技能更加娴熟,并在这一周的努力中我也明白一个道理,个人的学识终究是有限的,但集体的智慧是无限的,有同学的帮住,也有来源于老师的指导,最重要的,我从编程中获得了的乐趣,懂得学好C语言是一种在社会立足的技能,并找到了另一种替代语言的表述方式,不仅明白学好这一门课程的重要性,也了解到学好这门技术对科学的发展有着不可估量的价值,对于我们的生活有着不言而喻的好处。 四参考文献C程序设计(第三版),谭浩强编,清华大学出版社Turbo C 2.0实用大全,常玉龙等编写,北京航空航天大学出版社C语言趣味程序百例精解,陈朔鹰 陈英主编,北京理工大学出版社C语言课程设计案例精编,姜灵芝 余 键 著, 清华大学出版社C语言实现,杨峰 著, 清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号