模拟时钟转动程序课程设计报告
msp430模拟时钟课程设计

msp430模拟时钟课程设计一、课程目标知识目标:1. 学生理解MSP430单片机的结构与功能,掌握其基本编程方法。
2. 学生能够解释模拟时钟的运行原理,了解时钟模块在单片机系统中的应用。
3. 学生掌握如何使用MSP430内置的定时器/计数器功能来实现时钟功能。
技能目标:1. 学生能够运用C语言进行MSP430单片机的程序编写,完成模拟时钟的设计与实现。
2. 学生通过实践操作,培养动手能力,提高问题解决和调试程序的能力。
3. 学生能够利用所学知识,对模拟时钟进行优化和拓展,实现更多功能。
情感态度价值观目标:1. 学生通过本课程的学习,培养对单片机及编程的兴趣,提高对电子工程领域的认识。
2. 学生在课程实践中,培养团队协作和沟通能力,学会分享和互助。
3. 学生通过解决实际问题,增强自信心,形成积极向上的学习态度。
课程性质:本课程为实践性较强的课程,结合理论知识,让学生动手实践,培养实际操作能力。
学生特点:学生具备一定的单片机基础知识,对编程有一定了解,但实际操作能力有待提高。
教学要求:课程注重理论与实践相结合,强调学生动手实践,鼓励学生探索和解决问题,培养其创新意识。
通过课程目标的分解,使学生在完成具体学习成果的过程中,达到课程目标的要求。
后续教学设计和评估将以此为基础,确保教学效果。
二、教学内容本课程教学内容主要包括以下三个方面:1. MSP430单片机基础:- 简介及特点:使学生了解MSP430单片机的性能、结构和应用领域。
- 编程环境:学习MSP430的开发工具,如IAR、CCS等。
- 基本编程:掌握MSP430的GPIO、定时器/计数器等基本模块的使用。
2. 模拟时钟原理与实现:- 时钟原理:介绍时钟的基本概念,如秒、分、时等,以及它们的计算方法。
- 时钟设计:学习如何使用MSP430内置定时器/计数器实现时钟功能。
- 显示技术:了解数码管、LCD等显示技术,并应用于时钟显示。
3. 课程实践:- 编程实践:编写程序实现模拟时钟功能,包括秒、分、时的显示和更新。
c模拟时钟课程设计

c 模拟时钟课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握C语言的基本语法、数据类型、运算符、控制结构等,了解模拟时钟的基本原理和设计方法。
技能目标要求学生能够运用C语言编写简单的模拟时钟程序,培养学生的编程能力和问题解决能力。
情感态度价值观目标培养学生的团队合作意识、创新精神和对计算机科学的兴趣。
二、教学内容教学内容主要包括C语言基础知识、模拟时钟的设计与实现。
详细的教学大纲如下:1.C语言基础知识:介绍C语言的基本语法、数据类型、运算符、控制结构等,为学生编写模拟时钟程序打下基础。
2.模拟时钟的设计与实现:讲解模拟时钟的基本原理,引导学生运用C语言编写模拟时钟程序,培养学生的编程能力和问题解决能力。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C语言基础知识和模拟时钟的设计原理,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队合作能力。
3.案例分析法:分析典型的模拟时钟程序案例,引导学生学会分析问题、解决问题。
4.实验法:让学生动手编写模拟时钟程序,培养学生的实际编程能力和操作技能。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的C语言教材,为学生提供系统的学习资料。
2.参考书:提供相关的C语言编程参考书籍,丰富学生的知识储备。
3.多媒体资料:制作精美的PPT、教学视频等,增强课堂教学的趣味性和生动性。
4.实验设备:为学生提供充足的计算机设备,确保每位学生都能动手实践。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用多元化的评估方式。
评估内容包括平时表现、作业、考试等。
1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和知识掌握程度。
C语言模拟时钟转动课程设计报告

《C语言程序设计》课程设计报告题目:模拟时钟转动程序班级:组别:组员:指导教师:目录第一章课程设计的题目 (2)1.1 C语言课程设计的题目 (2)第二章课程设计的要求 (2)2.1 C语言课程设计的要求 (2)第三章课程设计的目的 (2)3.1 C语言课程设计的目的 (2)第四章课程设计的内容 (3)4.1 C语言课程设计的程序清单和注释 (3)第五章课程设计的运行结果 (7)5.1 C语言课程设计的运行结果 (7)第六章课程设计的结果分析 (8)6.1 C语言课程设计的结果分析 (8)第七章课程设计的心得体会 (9)7.1 C语言课程设计的心得体会 (9)模拟时钟转动程序第一章课程设计的题目1.1 C语言课程设计的题目本次为期两周的课程设计的题目为设计一个模拟时钟转动的程序。
第二章课程设计的要求2.1 C语言课程设计的要求能模拟机械钟表行走;要准确地利用数字显示日期和时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致;按任意键时程序退出。
第三章课程设计的目的3.1 C语言课程设计的目的加深对讲授内容的理解,尤其是一些语法规定。
通过课程设计,自然地、熟练地掌握。
熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。
学会上机调试程序。
第四章课程设计的内容4.1 C语言课程设计的程序清单和注释模拟时钟转动程序清单+注释#include<windows.h> //包含窗口头文件#include<math.h> //头文件,包含了一些数学计算的函数#define TWOPI (2*3.14159)#define IDTIMER 1 //计时器ID#define ANGLE TWOPI/360 //2PILRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam ); //回调函数Int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow ) // 应用启动函数mian {TCHAR szClassName[] = TEXT("analogCloc");MSG msg; //定义消息HWND hwnd; //窗口句柄WNDCLASS wndclass; //系统支持结构,定义并初始化窗口结构 wndclass.cbClsExtra = 0; //窗口类无扩展wndclass.cbWndExtra = 0; //窗口势力无扩展wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//窗口背景为白色wndclass.hCursor = NULL;wndclass.hIcon = NULL;wndclass.hInstance = hInstance; //当前实例句柄 wndclass.lpfnWndProc = WindowProc; //关联到消息回调函数wndclass.lpszClassName = szClassName;wndclass.lpszMenuName = NULL; //窗口中无菜单wndclass.style = CS_HREDRAW | CS_VREDRAW ; //窗口重绘风格RegisterClass(&wndclass);hwndCreateWindow(szClassName,TEXT("Clock"),WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, hInstance, NULL); //创建窗口ShowWindow(hwnd,nCmdShow); //显示窗口UpdateWindow(hwnd); //更新窗口,强制显示while(GetMessage(&msg,NULL,0,0)) //函数GetMessage 是从调用线程的消息队列里取得一个消息并将其放于指定的结构{TranslateMessage(&msg); //消息处理DispatchMessage(&msg); //消息派遣}return msg.wParam; //windows应用程序的消息循环形式}void setISOTROPIC(HDC hdc,int cxClient,int cyClient)//设置映射模式,使之成为笛卡尔坐标系的映射模式{SetMapMode(hdc,MM_ISOTROPIC);SetWindowExtEx(hdc,1000,1000,NULL); // 逻辑单位与设备单位比1/2SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL);SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); //竖坐标向上为正,下为负}void drawClock(HDC hdc) // 画时钟圆盘{int x, y, radius; //以逻辑单位表示的窗口原点坐标SelectObject(hdc,CreateSolidBrush(RGB(1,148,138)));//设置整个窗口线条颜色for(int i=0;i<360;i+=6){x = (int)(cos(TWOPI/360*i)*900); //cos函数,包含在math.h头文件利的函数y = (int)(sin(TWOPI/360*i)*900);radius = !(i%5)?40:10;Ellipse(hdc,x-radius,y-radius,x+radius,y+radius);// 把弧度制转换成坐标形式,Ellipse函数用来画圆}}void drawHands(HDC hdc,SYSTEMTIME *pst,BOOL hChange)// draw hands函数负责绘制时钟的时针、分针和秒针的轮廓{int radius[3] = {500,700,850};int angle[3];angle[0] = pst->wHour*30+pst->wMinute/12*6;angle[1] = pst->wMinute*6;angle[2] = pst->wSecond*6;for(int i=hChange?0:2;i<3;i++){MoveToEx(hdc,0,0,NULL);LineTo(hdc,(int)(radius[i]*cos(ANGLE*(90-angle[i]))),(int)(radius[i]*sin(ANGLE*(90-angle[i]))));}}LRESULT CALLBACK WindowProc(HWND hwnd,UINT message, // 消息标识符,标识某个特定的消息WPARAM wParam,LPARAM lParam) //消息处理函数{TCHAR time[40];PAINTSTRUCT ps;HDC hdc;static int cxClient, cyClient;SYSTEMTIME st; //定义结构体变量static SYSTEMTIME preSt;BOOL hChange;switch(message) //switch 语句一个case代表一种情况 {case WM_CREATE: // 窗口创建事件SetTimer(hwnd,IDTIMER,1000,NULL); //创建一个1000ms定时器GetLocalTime(&st); //得到当前系统时间wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);SetWindowText(hwnd,time); // 设置当前时间为窗口titlepreSt = st;return 0;case WM_SIZE:cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);return 0;case WM_TIMER: //定时器到时,即是每隔一秒要重画下界面GetLocalTime(&st); //每次都要获取当前时间hChange = st.wHour!=preSt.wHour||st.wMinute!=preSt.wMinute;hdc = GetDC(hwnd);setISOTROPIC(hdc,cxClient,cyClient);SelectObject(hdc,GetStockObject(WHITE_PEN));drawHands(hdc,&preSt,hChange);SelectObject(hdc,GetStockObject(BLACK_PEN));drawHands(hdc,&st,TRUE);ReleaseDC(hwnd,hdc);wsprintf(time,TEXT("%d年%d月%d日%d时%d分%d秒"),//记录系统时间,包括年、月、日、时、分、秒st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);SetWindowText(hwnd,time); //setwindowText函数:系统里的函数preSt = st; // 更新完毕后记录前一次的状态return 0;case WM_KEYDOWN:case WM_CHAR:DestroyWindow(hwnd); // 关闭窗口return 0;case WM_PAINT: //窗口绘制消息hdc = BeginPaint(hwnd,&ps); //开始绘制setISOTROPIC(hdc,cxClient,cyClient);drawClock(hdc);drawHands(hdc,&preSt,TRUE);EndPaint(hwnd,&ps); //结束绘制 return 0;case WM_DESTROY: //程序退出消息PostQuitMessage(0);return 0;}returnDefWindowProc(hwnd,message,wParam,lParam);//其他消息有系统默认处理}第五章课程设计的运行结果5.1 C语言课程设计的运行结果第六章课程设计的结果分析6.1 C语言课程设计的结果分析运行结果分析问题一:程序清单中某个符号添加错误,导致编译时出现错误,执行不出结果。
模拟时钟转动程序

课程设计课程名称高级语言程序课程设计题目名称模拟时钟转动程序学生学院自动化学院专业班级自动化06级(2 )班学号 3106000858 学生姓名霍杰英指导教师杨其宇2007年6月18日广东工业大学课程设计任务书题目名称模拟时钟转动程序学生学院自动化学院专业班级自动化06级(2 )班姓名霍杰英学号3106000858一、课程设计的内容要求:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
二、课程设计的要求与数据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[5] /course/3_program/c/cshl/2007213/21159.html发出任务书日期:2007年 6 月18 日指导教师签名:计划完成日期:2007年 6 月22 日基层教学单位责任人签章:主管院长签章:目录1 设计目的与要求 (5)2 总体设计 (6)3 详细设计 (7)功能模块设计 (7)3.1画出钟表的轮廓 (7)3.2获取系统时间 (7)3.3让时间和声音动起来 (7)4调试分析 (8)5 总结 (11)6 附录 (12)7 答辩记录 (16)8 指导教师意见 (17)1 目的与要求(1) C题目二十九: 模拟时钟转动程序要求:能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
模拟时钟实验报告

连接线段,隐藏点。
8.选中圆点标记,把线段进行两次缩放,每次缩放长度不一样,再改成不同颜色。
9.先建参数,秒=1.00,选择操作按钮动画里面的动画,修改标签为“启动时钟”动画为离散型,选中秒针旋转。
10.分针和时针与步骤9相同
11.利用文本工具添上数字。
1.计算小时数trunc(秒/3600)=?计算分trunc((秒-小时数*3600)/60)=?计算秒,秒-小时数*3600-分*60=?
2.单击、属性设置,数值标签精确度为单位、显示为无标签。
3.用文字工具A拖一个矩形区域,先点击数字,接着输入பைடு நூலகம்时,类似输入分秒。
三、调试和运行程序过程中产生的问题及采取的措施:
设计模拟时钟实验报告
姓名
陈贵
学号
33号
日期
2013.03.26
实验项目
模拟时钟和数字时钟
指导教师
黄建华
一、上机实验的问题和要求(需求分析):
先用几何画板画一个圆,在进行缩放、旋转、深度迭代等操作做模拟时钟,再利用数据计算、属性设置、最后用文字工具拖一个矩形,点击数字进行输入
二、程序设计的基本思想,原理和算法描述:
隐藏点和线段,也可以选中对象后【右键单击】或单击【显示(D)】菜单栏,再单击隐藏命令。
五、运行输出结果及分析:
1.先画一个圆
2.在隐藏圆上的点,在点一个点,以此点为缩放中心进行缩放,然后在缩放点和圆上点构造线段,再隐藏缩放点。
3.先标记圆心,选中点和线段旋转30°
4.建立参数t=10,选中点,再选中参数,按住SHIFT健,进行深度迭代。
5.重复2、3、4步骤(数据不同旋转6°、T=58)。
模拟时钟程序报告书

目录1. 基本功能描述 (1)2. 设计思路 (2)3. 软件设计 (3)3.1 设计步骤 (3)3.2 界面设计 (6)3.3 关键功能的实现 (7)3.3.1 指针式时钟的实现 (7)3.3.2 数字式时钟的实现 (8)3.3.3 设置部分的实现 (8)4 结论与心得体会 (8)5 参考文献 (9)6 思考题 (9)7 附录 (10)7.1 调试报告 (10)7.2 测试结果 (11)7.3 关键源代码 (12)模拟时钟程序1. 基本功能描述计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。
而模拟时钟是一种集计时器和时钟显示于一体的程序。
以实例为背景学习基于MFC的WINDOWS程序设计,编写一个指针式时钟程序.界面上包括数字式时钟、指针式时钟,可以实现对系统时间的修改与再定义。
具体要求包括以下三点:1)指针式时钟包含均匀分布的十二个刻度点、时/分/秒三指针,具体表盘形式可自由设计,要求时钟样式得体、易于辨认。
同理,要求指针位置随系统时间变化运动且与数字式时钟同步。
2)数字钟的钟面为一个规则的矩形,其显示时间的格式是时:分:秒,小时为24进制,分钟和秒是60进制,显示时间随系统时间变化跳变且与指针式时钟同步。
3)包含修改系统时间菜单项,可在弹出对话框中修改并再定义系统时间。
该对话框弹出时,数字式时钟与指针式时钟不停止跳变(与WINDOWS系统自带时钟程序一致)。
4)程序界面设计合理,色彩得体大方,显示正确。
效果图如图1所示:图1 时钟效果显示图2. 设计思路图2CView类OnDraw( )函数中。
下面对上页程序流程图中关键步骤作出简要分析说明:1)要实现时钟程序的显示及同步跳变,实质上是在实现每隔一秒定时刷新屏幕重新绘图。
OnCreate( )函数创建计时器并定义计时间隔为一秒,OnTimer( )函数作计时器的消息处理函数用于通知OnDraw( )函数重新绘图。
模拟时钟转动程序

C语言集中上机实验报告题目五: 模拟时钟转动程序院系:班级:姓名:学号:指导教师:2011 年12 月08日目录一课程设计的地位、作用与目的 (2)二课程的基本要求 (2)三课程设计的主要设计思路与流程图 (2)1.设计思路2.流程图3.使用的主要函数4.程序各功能模块四程序的运行结果 (7)1.调试过程出现的问题2.运行结果五心得体会 (7)一课程设计的地位、作用与目的为综合应用C语言程序设计理论知识、进一步提高学生综合解决问题、协调工作的能力和良好的软件开发习惯,特安排本实验内容。
希望通过该实习能够进一步激发学生的学习热情,培养学生初步编程的能力,为后续的学习和发展奠定基础。
二课程的基本要求能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
三课程设计的主要设计思路与流程图设计思路:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。
每隔一秒读取一次时间,直到键盘有输入为止。
流程图开始使用的主要函数: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(WHITE);line(300 + x_hour, 240 - y_hour, 300 - x_hour / 7, 240 + y_hour / 7);setlinestyle(PS_SOLID, NULL, 5);// 画分针setcolor(YELLOW);line(300 + x_min, 240 - y_min, 300 - x_min / 5, 240 + y_min / 5);setlinestyle(PS_SOLID, NULL, 2); // 画秒针setcolor(RED);line(300 + x_sec, 240 - y_sec, 300 - x_sec / 3, 240 + y_sec / 3);}2.画表盘void Drawbiaopan(){int i,l,x1,x2,y1,y2;setbkcolor(1);circle(300,240,180);circle(300,240,185);circle(300,240,20);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(); // 关闭绘图窗口}四程序的调试与运行结果调试过程出现的问题:1.Vc++6.0中没有“graphics.h”解决办法:安装turboc.2.0中的函数库EasyX2.无法获取系统时间解决办法:使用函数GetLocalTime( );并使用#include <time.h>声明3.Outtextxy()函数无法显示整数型时间解决办法:将整数型时间变量转换为字符型再输出运行结果:五心得体会由于C语言没有学过图形方面的知识,很多东西都要去查资料。
模拟时钟转动程序(精)

•
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");
绘制表盘部分
• 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);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言》课程设计课题名称模拟时钟转动程序学院信息工程专业网络工程地点 D507 学生姓名钟都华学号 13046130 开课时间 2013 至 2014 学年第 2 学期同组人李卓成绩一、课程设计的目的和要求1.课程设计的目的本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下的编程。
本程序中涉及时间结构体、数组、绘图等方面的知识。
通过本程序的训练,使读者能对C 语言有一个更深刻的了解,掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。
2.课程设计的要求能模拟机械钟表行走;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;要准确的利用数字显示日期和时间并且可以根据用户的需求更改当前时间(指针式时钟与数字式时钟实现同步更改);数字式时钟的时间显示与指针式时钟显示一致;可以通过上下键改变当前的时、分、秒;改的时间是小时、分钟、还是秒数;通过Tab键切换按Esc时程序退出。
二、设计如下图,此电子时钟主要由以下4个功能模块组成。
1.界面显示模块电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用了C语言图形系统函数和自负屏幕处理函数画出时钟程序的主界面。
主界面包括类似Windows自带的电子时钟的界面和帮助界面两部冯。
电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟表。
在帮助界面中,主要包括一些按键的操作说明。
2.按键控制模块按键控制模块主要完成两大部分功能。
第一,读取用户按键的键值。
第二,通过对键盘按键值得判断,执行相应的操作,如光标移动、修改时间。
3.时钟动画处理模块在时钟动画处理模块中,它通过对相关条件的判断和时钟坐标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。
4.数字时钟处理模块在数字时钟处理模块中,它主要实现了数字时钟的显示和数字时钟的修改。
其中,用户可先按Tab键定位需要修改内容的位置,然后通过按光标上移()或下移(功能模块设计1.电子时钟执行主流程此电子时钟执行主流程如右图所示。
首先,程序调用initgraph()函数,使系统进入图形模式,然后通过使用line()、arc()、outtextxy()、circle()等函数来绘制主窗口及电子时钟界面,最后调用clockHandle()函数来处理时钟的运转及数字时钟的显示。
在clockhandle()函数中,它使用了bioskey()函数来获取用户的按键值,当用户按键为Esc时,程序会从clockhandle()函数中返回,从而退出程序。
2.电子时钟界面显示电子时钟界面的实现比较简单,在功能模块有详细描述,值得一提的是,模拟时钟运转的动画时钟的时间刻度是用大小不同的圆来表示的,三根长度不同但有一端在相同坐标位置的直线分别表示时、分、秒针。
3.按键控制模块(1)按下Tab键,清除上一个位置的光标,然后在新位置出绘制一个光标。
(2)按下光标上/下移键,增加/减少相应的时、分、秒值。
(3)按下Esc键,程序结束时钟运行,从而退出系统。
4.动画处理模块坐标点的计算rsinα rcosα分别是这两条虚线的长度弧度360°=2π在电子时钟中,秒针转动60次每一次的弧度为2π/60 = π/30;上图对于∠K而言sin=边3/边1,在程序中已经知道∠α的弧度也就知道了∠K的度数;设分钟为m则∠K开始进入图形模式绘制主窗体界面绘制电子时钟界面绘制帮助界面调用clockhandle()时钟处理程序退出系统结束的度数为m*2π/60 = m*π/30,利用C函数sin(m*π/30)则可得到边3与边1的比,带入程序rsinα则可得到边3的长度;设秒针的长度为80像素即r = 80像素 rsinα=80*sin(m*π/30)可求得rsinα长度,则可以得到相对于圆心而言X轴的偏移位置即451+rsinα也就是K的X轴坐标。
同理求的Y轴坐标,对∠K而言,cos∠K=边2/边1 则80*cos(m*π/30) 就可得到y轴的偏移位置K坐标为(451+rsinα,200-rcosα)5.数字时钟处理模块它主要由光标上移或下移按键共同控制,当光标在时/分/秒位置且按下上移/下移按键,程序会将当前时间的时/分/秒增加/减少1,即增加/减少1小时/分钟/秒。
函数功能描述1.keyhandle()函数原型:int keyhandle(int key,int count)Keyhandle()函数用于对用户的按键值key进行判断,然后调用timeupchange(count)或timedownchange(count)或直接处理Tab按键,其中count的值为1、2、3,1表示小时、2表示分钟、3表示秒钟。
按Tab键后,count值加1.2.timeupchange()函数原型:int timeupchange(int count)Timeupchange()函数用于增加时、分、秒数,然后将新的时间设置为系统当前时间。
3.timedownchange()函数原型:int timedownchange(int count)Timedownchange()函数用于减少时、分、秒数,然后将新的时间设置为系统当前时间。
4.digitclock()函数原型:void digitclock(int x,int y,int clock)Digitclock()函数用于在(x,y)位置显示clock值,clock值为时、分、秒值。
5.drawcursor()函数原型:void drawcursor(int count)Drawcursor()函数用于对count进行判断后,在相应位置绘制一条直线作为光标。
6.clearcursor()函数原型:void clearcursor(int count)clearcursor()函数用于对count进行判断后,在相应位置擦除原来的光标。
7.void clockhandle()函数原型:void clockhandle()void clockhandle()函数用于完成时钟转动和数字时钟的显示。
8.main()函数原型:void main()Main()为主函数。
分工:钟都华:电子时钟主流程、界面显示模块、时钟动画处理模块、对程序的改进。
李卓:时钟按键控制模块、数字时钟处理模块、代码的输入。
三、编码#include<graphics.h> //程序的预处理#include<stdio.h>#include<math.h>#include <dos.h>#define PI 3.1415926#define UP 0x4800#define DOWN 0x5000#define ESC 0x11b#define TAB 0xf09int keyhandle(int,int);int timeupchange(int);int timedownchange(int);int digithour(double);int digitmin(double);int digitesc(double);void digitclock(int,int,int);void drawcursor(int);void clockcursor(int);void clockhandle();double h,m,s;double x,x1,x2,y,y1,y2;struct time t[1];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,418);line(76,56,179,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,70,560,360);setwritemode(0);setcolor(15);outtext(433,75,"CLOCK");setcolor(7);line(392,310,510,310);line(392,330,510,330);arc(392,320,90,370,10);arc(510,320,270,90,10);setcolor(5);for(i=431;i<=470;i+=38)for(j=317;j<=324;j+=7){setlinestyle(0,0,3);circle(i,j,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;}void clockhandle() //时钟动画处理模块{int k=0;count;setcolor(15);gettime(t);h=t[0].ti_hour;m=t[0].ti_min;x=50*sin((h*60+m)/360*PI)+451;y=200-50*cos((h*60+m)/360*PI);line(451,200,x1,y1);x1=80*sin(m/30*PI)+451;y1=200-80*cos(m/30*PI);line(451,200,x1,y1);digitclock(408,318,digithour(h));digitclock(446,318,digitmin(m));setwritemode(1);for(count=2;k!=Esc;){setcolor(12);sound(500);delay(700);sound(200);delay(300);nosound();s=t[0].ti_sec;m=t[0].ti_min;h=t[0].ti_hour;x2=98*sin(s/30*PI)+451;y2=200-98*cos(s/30*PI);line(451,200,x2,y2);while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h) {gettime(t);if(bioskey(1)!=0){k=bioskey(0);count=keyhand(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(t[0].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=t[0].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((t[0].ti_hour*60+t[0].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=t[0].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);}}}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){t[0].ti_hour++;if(t[0].ti_hour==24) t[0].hour=0;settime(t);}if(count==2){t[0].ti_min++;if(t[0].ti_min==60) t[0].min=0;settime(t);}if(count==3){t[0].ti_sec++;if(t[0].ti_sec==60) t[0].sec=0;settime(t);}}int timedownchange(int count){if(count==1){t[0].ti_hour--;if(t[0].ti_hour==0) t[0].hour=23;settime(t);}if(count==2){t[0].ti_min--;if(t[0].ti_min==0) t[0].min=59;settime(t);}if(count==3){t[0].ti_sec--;if(t[0].ti_sec==0) t[0].sec=59;settime(t);}}void digitclock(int x,int y,int clock)//数字时钟处理模块{char buffer1[10];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);break;case 2:line(465,315,465,325);break;case 3:line(505,315,505,325);break;}}void clearcursor (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;}}四、调试和运行调试:程序在VC++6.0上不能运行,原因是VC++6.0无graphics函数,只能在win-tc 上运行。