C语言课程设计(电子时钟) .doc_第1页
C语言课程设计(电子时钟) .doc_第2页
C语言课程设计(电子时钟) .doc_第3页
C语言课程设计(电子时钟) .doc_第4页
C语言课程设计(电子时钟) .doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学程序设计专用纸摘 要就钟表的演变历史而言,它大致可以分为3个演变阶段,第一,从大型钟向小型钟演变;第二,从小型钟向袋表过渡;第三,从袋表象腕表发展。每一阶段的发展都和当时的技术发明有着十分紧密的联系,同时它也是各个不同时期的科学家和钟表工匠智慧的结晶。钟和表通常是以内机的大小来区别的。按国际惯例,机芯直径超过50mm、厚度超过12mm的为钟;直径3750mm、厚度46mm者,称为怀表;直径37mm以下为手表;最坚固、最精密的机械之一。现代钟表的原动力有机械力和电力两种。机械钟表是一种用重锤或弹簧的释放能量为动力,推动一系列齿轮运转,借助调速器调节轮系转速,以指针指示时刻和计量时间的计算器。 在生活进步的今天,电子时钟正成为人们生活的一部分,特别是应用在如火车站之类的公共场所,其用途不言而喻。 关键词: 模拟系统; 电子时钟; 时间修改.目 录 一. 设计过程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. 程序功能随着社会的进步和科技的发展,电子时钟逐渐成为人们生活中不可缺少的一部分,下面介绍一种电子时钟的设计和实现。其基本功能模块图如图2程序设计电子时钟 界面显示模块按键控制模块时钟动画处理模式数字时钟模块 1) 设计思路程序设计一般由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在电子时钟程序中,重点和难点在于时、分、秒针坐标值得计算和时钟指针的运行控制,旨在了解c语言图形模式下的编程,了解系统的绘图机数据结构等方面的知识。利用几个模块现实时钟的运转,并可在界面进行时间的更改。 2)数据结构此程序中,使用了c语言的time结构体和几个全局变量,结构如下:1).time结构体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 clockhandle()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()函数开始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()函数的调用。 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!=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 buffer110;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/*下移键:修改时间*/#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型秒钟数转换成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=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,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); rectangle(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);/*绘制电子动画时钟下的数字时钟的边框架*/ /*绘制数字时钟的时分秒的分隔符*/ setcolor(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,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:time+); 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=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);/*在电子表绘制分针*/ 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; 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*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(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)!=(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:timeupchange(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=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; 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+) 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)

温馨提示

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

评论

0/150

提交评论