模拟时钟程序设计全解
数字钟的设计与仿真-完整演示、功能强大
闹钟
计时
开关群
五、原理图的设计
2、计时原理
五、原理图的设计 2.1 秒信号的产生 由555 定时器 得到1Hz 的脉冲,功能主要是产生标准秒脉冲信 号和提供功能扩展电路所需要 的信号。 555计时器构成的多谐振荡器的工作原理:
它由分压器、比较器、基本R—S 触发器和放电三极管等部分组成。
五、原理图的设计
2.3 译码电路设计之星期的显示 关于星期的显示,本小组采用指示灯亮灭来指示星期。
五、原理图的设计
2.3 译码电路设计 星期显示的译码电路直接由基本门电路组成:
五、原理图的设计 2.4 整点报时功能原理
蜂 鸣 器
判断是 否 是否 为55秒 前50秒 后
五、原理图的设计
555计时器的内部结构图
A
∞
A
∞
五、原理图的设计
多谢振荡器的模拟电路图
五、原理图的设计
2.2 计数器模块原理 在数字钟的控制电路中,分和秒的控制都是一样的,都是由 一个十进制计数 器和一个六进制计数器串联而成的,在电路的设 计中我采用的是统一的器件 74LS161N 的反馈置数法来实现十进制 功能和六进制功能,根据74LS161 的结构 把输出端的0101 (十进 制为5)用一个与非门74LS00 引到Load 端便可置0,这 样就实现了 六进制计数。同样,在输出端的1001 (十进制为9)用一个与非门 74LS00 引到Load 端便可置0,这样就实现了十进制计数。在分和秒 的进位时, 用秒计数器的Load 端接分计数器的CLK控制时钟脉冲, 脉冲在上升沿来时计数 器开始计数。时计数器可由两个十进制计 数器串接并通过反馈接成二十四制计数器。
三、设计结果
我小组设计的数字钟已达到设计要求。可完成基本的计时功 能。 并设计有拓展项目:闹钟功能,计时部分添加星期的显示。
模拟时钟程序
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代替。
C语言模拟时钟转动课设报告-附代码
模拟时针转动程序姓名:学号:完成日期: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()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。
模拟时钟转动程序(精)
绘制表盘部分
• void init() /*画时钟边框函数*/ • { • int i,l,x1,x2,y1,y2; • setbkcolor(1); /*设置背景颜色白色 */ • circle(300,240,200); /*画圆心为(300,240)半径200圆*/ • circle(300,240,205); • circle(230,180,25); • rectangle(220,280,400,300); /*画矩形(左上角和右下 角坐标)*/ • circle(380,180,25); • circle(300,240,5);
整点报时模块(*丌要求)
• while(t[0].ti_sec==s) • gettime(t); /*获得系统时间*/ • gotoxy(44,18); /*使光标移动到指定坐标*/ • printf("\b\b\b\b\b\b\b\b\b"); /*退格,使表示时间癿字符串 丌断变化*/ • sound(400); /*按给定癿频率打开PC扬声器*/ • delay(70); /*中断程序癿执行,时间为70毫秒*/ • sound(200); • delay(30); • nosound(); /*按给定癿频率兲闭PC扬声器*/ •
√
√
√ √ √
√ √ √ √ √ √ √ √ √
程序简要内容
程序系统癿结构
模拟时钟转
指针式时钟
数字式时钟
算法 • 丌论何种指针,每次转动均以π/30弧度(一 秒癿角度)为基本单位,且都以表盘中心为转动 圆心。计算指针端点(x, y)癿公式如下:x =圆 心x坐标 指针长度 * cos (指针方向角)y =圆心y坐 标 指针长度 * sin (指针方向角)注重,指针长度 是指自圆心至指针一个端点癿长度(是整个指针 癿一部分),由于指针可以跨越圆心,因此一个 指针需要计算两个端点。三个指针癿运动是相兲 联癿,秒针转一圈引起分针运动一格,分针转一 圈引起时针运动一格,因此应该使用一个定时器 消息来处理指针癿运动。
《C#程序设计(第2版)》电子教案 项目十 绘制模拟时钟
任务一 自定义用户控件的设计
新建项目,为窗体设置背景图 片并在相应事件中写入代码。
ቤተ መጻሕፍቲ ባይዱ
任务一 自定义用户控件设计步骤:
1. 创建 ClockDesign控件库 2. 创建 ClockControl控件 3. 创建clockTimer控件,拖放Timer控
件 4. 自定义OnPaint事件处理程序 5. 定时(1秒)重绘控件
自定义用户控件设计的相关理论知识
一、c# 如何重写控件的OnPaint事件 二、C# 图形绘制——指定线条端部形状
1、使用预定义形状 2、使用自定义形状
任务二 自定义用户控件的使用
在同一个解决方案中,新建工程窗体,使用昨天大家创 建的用户自定义控件。最终效果图如下:
项目十 绘制模拟时钟 小结
通过本项目,学生能绘制出模 拟时钟。在此过程中,学生掌握了 如何自定义用户控件,也掌握测试 与使用用户控件的基本方法。
C#程序设计
项目十 绘制模拟时钟
项目十 绘制模拟时钟
游戏公司最近请软件工程师小李绘制模拟时钟用于 显示当前系统时间,小李在分析了网络上现有的代 码后,再考虑到代码的重用性,决定先自定义一个 时钟控件,然后用拖放的方式使用。效果图如下:
项目十 绘制模拟时钟分析
绘制模拟时钟主要的步骤: 1.自定义用户控件的设计 2.自定义用户控件的使用
模拟时钟转动程序
模拟时钟转动程序一、课程设计的内容能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
二、课程设计的要求与数据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.目的与要求要求:能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
用VC++制作-模拟时钟应用程序
案例五模拟时钟应用程序以实例为背景学习基于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一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。
模拟时钟程序设计全解
CTime t=CTime::GetCurrentTime();
ssecond=(t.GetHour()-atoi(m_s1))*3600+(t.GetMinute()-atoi(m_s2))*60+t.GetSecond()-atoi(m_s3);
}
7.32退出按钮的实现
而在程序初步完成后,导师初查指出用SetTime()计数与系统时间的进度存在误差,所以不可以用SetTime()函数计时。于是本人将算法改成用系统时间和编辑框输入的时间
作差,得到一个定值,再用系统时间减去这个定值就为设置的时间了,此时SetTime()函
数仅仅起到一个重绘作用,时间进度是有系统时间进度决定的。
//绘制菱形时针
pDC->Polygon(ptDiamond, 4);
//恢复设备环境
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}//时针
CClockMinHand::CClockMinHand()
{
//定义默认颜色
m_crMain = RGB(0, 255, 100);
m_crOther = RGB(128, 128, 0);
}
CClockMinHand::~CClockMinHand()
{
}
void CClockMinHand::Draw(CDC *pDC)
{
//初始化设备环境
CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther);
5.
模拟时钟程序
课程设计报告(本科)课程:高级语言程序设计学号: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++程序设计教程李乘璋北京理工大学出版社。
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设计任务:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
8模拟时钟转动程序设计
《计算机应用基础》课程设计任务书一、设计题目模拟时钟转动程序设计二、主要内容设计一个类似于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指导教师签名日期年月日系主任审核日期年月日。
模拟时钟行走C语言程序
模拟时钟行走课程设计总体要求采用模块儿化程序设计;鼓励可视化编程;源程序中有足够的注释;学生可自行增加新功能模块儿;必须上机调试通过;注重算法运用,优化存储效率与运算效率;需提交源程序及相关文件;目录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()函数实现。
用VC++制作-模拟时钟应用程序
案例五模拟时钟应用程序以实例为背景学习基于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) //数码管显示函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先,指针时钟的背景,指针形状长度,正点格子和秒数格子的设计代码过于繁琐和复杂,稍做了解便可从网上抄录,然后再把参数及变量改成自己设计部分所需的名称即可。
其次,本程序的基础及核心思路为用一个计数器器SetTime(1,1000,NULL)调用WM_TIMER的On Timer()函数,达到更新时间,重绘窗口的效果。
m_crOther = RGB(128, 128, 0);
}
CClockMinHand::~CClockMinHand()
{
}
void CClockMinHand::Draw(CDC *pDC)
{
//初始化设备环境
CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther);
}指针时钟的OnTimer函数
以上关键源代码主要为算法,全为本人设计,无参考文献。
7.34指针时钟时针分秒针的绘制
CClockHourHand::CClockHourHand()
{
//定义默认颜色
m_crMain = RGB(0, 255, 100);
பைடு நூலகம்m_crOther = RGB(128, 128, 0);
CBrush brMain(m_crMain), brOther(m_crOther);
CPen *pOldPen = pDC->SelectObject(&penOther);
CBrush *pOldBrush = pDC->SelectObject(&brMain);
//确定当前指针的弧度
//int nTime = (m_tmCur.GetHour() % 12) * 3600;
fRadian += 0.5 * PI;
nRadus = m_nRadius / 20;
ptDiamond[1].Offset((int)(nRadus * sin(fRadian)), (int)(- nRadus * cos(fRadian)));
fRadian += 0.5 * PI;
nRadus = m_nRadius / 10;
ptDiamond[1].Offset((int)(nRadus * sin(fRadian)), (int)(- nRadus * cos(fRadian)));
fRadian += 0.5 * PI;
nRadus = m_nRadius / 10;
ptDiamond[2].Offset((int)(nRadus * sin(fRadian)), (int)(- nRadus * cos(fRadian)));
而在程序初步完成后,导师初查指出用SetTime()计数与系统时间的进度存在误差,所以不可以用SetTime()函数计时。于是本人将算法改成用系统时间和编辑框输入的时间
作差,得到一个定值,再用系统时间减去这个定值就为设置的时间了,此时SetTime()函
数仅仅起到一个重绘作用,时间进度是有系统时间进度决定的。
int nTime = (j % 12) * 3600;
nTime += k* 60;
nTime += l;
double fRadian = 2 * PI * nTime / 3600 / 12;
//确定绘制菱形指针所需的四个角的坐标
CPoint ptDiamond[4];
for(int i=0; i<4; i++)
}
void CClock2Dlg::Onexitbt()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
KillTimer(1);
}
7.33实现系统时间与自定义时间同步的函数
void CClock2Dlg::OnTimer(UINT nIDEvent)
nTime += l;
double fRadian = 2 * PI * nTime / 3600;
//确定绘制菱形指针所需的四个角的坐标
CPoint ptDiamond[4];
for(int i=0; i<4; i++)
{
ptDiamond[i] = m_rcRegion.CenterPoint();
5.
完成本次课程设计是我大学生涯做过最困难的事情,没有之一。由于过度自信和选择的随意,在没有了解MFC之前变随意选择了一个题目。动手起来处处是难点,每完成一个部分都要花费大量时间,效率十分低。于是花费一天时间查阅文字资料,终于会MFC程序设计有了一定的了解,着手起来顺利许多。元旦前一天整个下午都在机房向老师请教问题,感觉之前从网上生搬硬套的东西也通透了很多。最后在跨年钟声敲响前一刻完成了试验,感觉整个人一下轻松下来,细想收获颇丰。
4用菜单选项打开的对话框,或者主界面里的控件设置时间。时间不必与机器系统时间相同,可任意设置。
2.
编辑运行代码时,窗口界面会出现一个色调为绿色,背景为黑色的指针时钟;一个精确到秒的数字时钟;一个退出按钮;一个设置按钮;三个设置自定义时间的编辑框。运行时调用的为系统的时间,在编辑框中分别输入自定义时分秒点击设置,指针时钟和数字时钟会跳转为自定义时间。按退出键关闭窗口。
fRadian += 0.5 * PI;
nRadus = m_nRadius / 20;
ptDiamond[3].Offset((int)(nRadus * sin(fRadian)), (int)(- nRadus * cos(fRadian)));
//绘制菱形分针
pDC->Polygon(ptDiamond, 4);
以上便是本次实验的设计思路。
4.
4.1
1.决定用基本对话框来完成本次实验并设计好实验的对话框样式,添加所需的按钮、编辑框等控件。
2.数字时钟难度不大,而指针时钟比较困难,上网查阅指针时钟的制作的教程,并寻找所需的函数。定义好需要的类和成员函数。
3.设计算法并成员函数。
4.2
根据课设题目的要求,我决定设计两个个静态文本分别输出指针时钟的图像和数字时钟的数字显示;设置三个编辑框输入自定义的时分秒;设置两个按钮接收设置的时间和退出程序。
}//数字时钟的OnTimer函数
void CClockEx::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Invalidate(FALSE);
CTime t=CTime::GetCurrentTime();
CBrush brMain(m_crMain), brOther(m_crOther);
CPen *pOldPen = pDC->SelectObject(&penOther);
CBrush *pOldBrush = pDC->SelectObject(&brMain);
//确定分针所在位置的弧度
int nTime = k * 60;
}
CClockHourHand::~CClockHourHand()
{
}
void CClockHourHand::Draw(CDC *pDC)
{
//初始化设备环境
CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther);
1.
2.
3.
4.
5.
6.
7.
1.
1.1
1学习Visual C++的MFC开发程序的步骤。
2综合运用所学的类、继承和多态的知识。
3进一步掌握程序的调试方法。
1.2
1基于MFC的WINDOWS应用程序设计方法,编写一个模拟时钟程序;
2在屏幕中间有一个指针式时钟;
3这个时钟的下方或者上方以数字方式显示时间,该时间应与指针显示的时间一致;
}
int nRadus = m_nRadius / 2;
ptDiamond[0].Offset((int)(nRadus * sin(fRadian)), (int)(- nRadus * cos(fRadian)));
fRadian += 0.5 * PI;
nRadus = m_nRadius / 20;
4.3
用CTime::GetCurrentTime()调用系统的时间;定义一个CTime的对象t,用t.GetHour(),t.GetMinute(),t.GetSecond()抽出时间的时分秒,并同意化成距0:00:00时刻的秒数;用该秒数减去自定义时间的秒数然后化成十分秒的形式,分别在指针时钟和数字时钟的静态文本上输出,并用SetTime()函数每一秒输出一次(即重绘)。便可实现显示时间功能。
int nowtime=t.GetHour()*3600+t.GetMinute()*60+t.GetSecond()-ssecond;
j=nowtime%(24*3600)/3600;
k=nowtime%(24*3600)%3600/60;
l=nowtime%(24*3600)%3600%60;
CStatic::OnTimer(nIDEvent);
str.Format("%02d: %02d: %02d",a,b,c);
SetDlgItemText(IDC_curtime,str);
//m_s1.Format("%02d",a);