搜档网
当前位置:搜档网 › 模拟时钟应用程序

模拟时钟应用程序

模拟时钟应用程序
模拟时钟应用程序

案例五模拟时钟应用程序

以实例为背景学习基于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一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。本程序采用非删除式重绘,假定指

针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针;如果指针没有动,则直接绘制指针。

另外,秒表需要采用单独的定时器消息控制。

3 实现步骤

(1)用AppWizard生成一个名为Clock的单文档(SDI)程序框架。为了简化应用程序,在第四步时去掉Docking toolbar和Initial status bar选择项,其他各选项均可用缺省设置。

(2)编辑项目的菜单资源,在主框架窗口的主菜单(IDR_MAINFRAME)中添加一个名为“时钟控制”的下拉菜单。在“时钟控制”菜单中添加三个菜单选项“启动时钟”、“停止时钟”和“时间设置”。并在菜单属性项中设定“启动时钟”菜单的ID标号为ID_START,“停止时钟”菜单的ID标号为ID_STOP,“时间设置”菜单的ID标号为ID_SETTIME。为了简化菜单,可删除系统原有的“文件”、“编辑”菜单项。

(3)利用ClassWizard为视图类添加菜单命令处理函数。进入ClassWizard的Message Maps选项卡,选择Class Name项为CClockView 类,在Object IDs列表框中分别选择新添加的菜单选项的ID,在Messages列表框中选择COMMAND,按下Add Function按钮添加成员函数。ClassWizard会为“启动时钟”、“停止时钟”和“时间设置”菜单选项添加相应的消息响应函数OnStart ( )、OnStop ( )和OnSettime ( )。

(4)利用ClassWizard为视图类添加定时器和鼠标消息处理函数。进入ClassWizard的Message Maps选项卡,选择Class Name项为CClockView类,在Messages列表框中分别选择定时器消息WM_TIMER 和鼠标消息WM_LBUTIONDOWN,按下Add Function按钮添加成员函数。ClassWizard会添加相应的定时器和鼠标消息响应函数OnTimer和OnLButtonDown。

(5)使用Developer Studio菜单的Insert / Resource…选项调出Insert Source对话框,为项目添加新的对话框资源。在对话框属性中,修改对话框名为“时间设定”。在对话框中增加用来输入年、月、日、时、分、秒的编辑框控件,如下图所示。

对话框

通过控件属性,将年、月、日、时、分、秒等编辑控件的ID改为IDC_YEAR、IDC_MONTH、IDC_DAY、IDC_HOUR、IDC_MINUTE 和IDC_SECOND。

(6)设计好这个对话框模板后,利用ClassWizard自动建立对话框类。进入ClassWizard后,它会发现已建立的对话框模板资源,并弹出一个对话框询问是否要为该对话框模板建立类。按下“OK”按钮,会

弹出New Class对话框,在Name栏填写对话框类的名称CSetTimeDlg 后按“OK”按钮,即可为对话框创建一个对应的类。

(7)利用ClassWizard为对话框类添加与各控件对应的数据成员。选择MemberVariables选项卡,确保Class Name项为对话框CSetTimeDlg 类,然后在选项卡下方的窗口中选择各控件的ID并按下“Add Variable…”按钮,为其添加对应成员变量,如表11.4所示。

表11.4 编辑控件属性

最后一列为变量取值范围。

(8)编辑工程的图标资源,在Resource View选项窗口中修改Icon 结点所包含的主框架图标(IDR_MAINFRAME),修改标准图标(32像素×32像素)及小图标(16像素×16像素),从而为该程序设计一个美观大方的图标。

(9)完成以上工作后,即可修改程序框架,添加必要的代码。

4 程序清单

按以下步骤向视图类(CClockView)添加下列数据成员及成员函数。

(1) 添加表示年、月、日、时、分、秒的变量。

int year;

int month;

int day;

int hour;

int minute;

int second;

(2) 添加秒表的计数变量。

int watch;

(3) 添加时钟的画笔及画刷变量。

CPen m_HouPen, m_MinPen, m_SecPen; // 各种针的画笔CBrush m_MarkBrush; // 表盘标记的画刷

(4) 添加时钟控制变量。

CPoint m_Center; // 表的中心

double m_Radius; // 表的半径

CPoint m_Hour [2], m_OldHour [2]; // 时针当前及前一次位置CPoint m_Minute [2], m_OldMin [2]; // 分针当前及前一次位置CPoint m_Second [2], m_OldSec [2]; // 秒针当前及前一次位置(5) 添加秒表的两个按钮位置变量。

CRect m_WatchStart;

CRect m_WatchStop;

(6) 添加两个函数,计算时钟各指针位置。

void SetClock (int hour, int minute, int second);

CPoint GetPoint (int nLenth, int nValue);

(7) 在视图类构造函数中增加初始化语句:

然后添加下列代码:

在OnDraw函数中添加下面代码:

// 用白色覆盖原位置时针

请注意将表示时间的整数转换为CString 字符串类型的方法以及秒表的显示方法。另外,watch 计数器以1/100秒为计数单位,每达到100则秒数加1。

u 按照下列步骤增加时钟控制代码:

①修改Onstart和OnStop函数,设置时钟运动消息。按比正常时钟快20倍的假定,50ms产生一个消息。其代码为:

②修改OnTimer函数,正确计算并处理年、月、日、时、分、秒等变量的联动变化,其代码为:

③ 添加时间设置对话框代码。

首先在ClockView. cpp 文件头部添加下列语句: #include “SetTimeDlg. H”

在时间设定对话框类的构造函数中,做如下修改,将初始日期设为2010-7-10:

最后,在OnSettime函数中添加代码如下:

用C++编写模拟时钟程序

模拟时钟程序 1 基本功能描述 本次课程设计是基于面向对象的应用程序设计,主要运用C++语言在VC++开发环境下的MFC中编程实现。模拟时钟的基本功能是程序初始在屏幕上有一指针式时钟表盘,表盘为椭圆形,内部分布有12个刻度,表盘上有三个长度和颜色不同的时针分针和秒针,相互之间容易辨认,指针的运动通过数学推导之后以代码实现。表盘的下方是一个数字形式显示的数字钟,其显示时间的格式是时:分:秒,指针式时钟和数字式时钟显示的时间同步,且两个时钟所显示的时间与系统时间相致,页面的菜单项设有时间设置项,可以对所显示的时间进行调整,能进行调整的具体内容是年、月、日、时、分、秒。设计成功之后,此应用程序便可以起到时钟显示的作用。 2 设计思路 2.1 程序流程图

图1 模拟时钟程序流程图 2.2 程序流程分析 (1) 绘制指针式的时钟和数字式的时钟图形时,要在CView类下进行。其中OnDraw()函数在绘制视图窗口时被调用,在定义了画刷CBrush和画笔CPen之后,调用GetClientRect()定义屏幕大小并确定椭圆中心的坐标,然后调用Ellipse绘制椭圆,即指针式的时钟表盘,SetTextColor绘制文本颜色,调用MoveTo和LineTo绘制表盘指针,同时调用CreateFont()创建数字钟字体,TextOut则是用以数字钟的文本输出。 (2) 模拟时钟处理消息的过程:首先调用SetTimer函数定义时钟消息,包括参数指定计时器的ID,消息产生的时间间隔,回调函数为NULL;调用消息处理函数OnTimer()刷新窗口显示。在相应的WM_TIMER消息处理里添加时钟消息响应代码;最后调用KillTimer 释放该时钟。 (3) 要实现时钟的动态效果,即时间窗显示的时间每隔一秒钟更新一次,需要在时间窗格的正文调用CStatusBar::SetPaneText()函数。要定时更新,则应利用WM_TIMER消息,计时器每隔一定的时间间隔就会发出一个WM_TIMER消息,而这个时间间隔可由用户指定。MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作。先利用ClassWazard给CMainFrame类加入WM_TIMER消息处理函数OnTimer(),CMainFrame:: OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用

单片机电子时钟程序

程序开始 ORG 0000H AJMP MAIN ORG 000BH AJMP CLOCK ORG 0100H 主程序开始: MAIN: MOV SP,#70H MOV 6EH,#00H ;显示缓存器初始值设定 MOV 6DH,#00H MOV 6CH,#00H MOV 6BH,#00H MOV 6AH,#00H MOV 69H,#00H MOV 50H,#00H ;秒,分,小时初始值设定 MOV 51H,#00H MOV 52H,#00H MOV DPTR,#0F003H ;8255端口定义,PA,PB为输出 MOV A,#80H MOVX @DPTR,A MOV 4FH,#00H MOV TMOD,#01H ;定时器T0及TL0,TH0初始值设定 MOV TH0,#3CH MOV TL0,#0B0H SETB EA ;开总中断 SETB ET0 ;开定时器中断 SETB TR0 循环程序开始,并显示时间: START: MOV A,50H LCALL BCD MOV 6AH,A ;显示秒十位 MOV 69H,B ;显示秒个位 MOV A,51H LCALL BCD MOV 6CH,A ;显示分十位 MOV 6BH,B ;显示分个位 MOV A,52H LCALL BCD ;调用十六进制至BCD码转换子程序 MOV 6EH,A MOV 6DH,B LCALL DIS ;调用显示子程序 LCALL KEY ;调用键盘子程序 AJMP START ;主程序结束

BCD: MOV B,#0AH ;BCD码转换子程序 DIV AB RET CLOCK: PUSH ACC ;保护现场 PUSH PSW CLR TR0 MOV TH0,#3CH ;定时参数重新设置 MOV TL0,#0B0H SETB TR0 INC 4FH ;100ms单元加1 MOV A,4FH CJNE A,#0AH,D0 ;100ms单元=10,就秒单元加1 MOV 4FH,#00H ;100ms单元内容清0 MOV A,50H ADD A,#01H ;秒单元加1 MOV 50H,A CJNE A,#3CH,D0 ;秒单元内容=60,则秒单元清0 MOV 50H,#00H MOV A,51H ;分,时单元代码 ADD A,#01H MOV 51H,A CJNE A,#3CH,D0 MOV 51H,#00H MOV A,52H ADD A,#01H LCALL RING ;报警子程序 MOV 52H,A CJNE A,#18H,D0 MOV 52H,#00H D0: POP PSW ;出栈,退出中断子程序 POP ACC RETI RING: MOV R3,A CLR P1.0 LCALL DELL50 SETB P1.0 LCALL DELL50 DJNZ R3,RING RET 键盘子程序: KEY: JB P1.7,MSET ;秒设定子程序 LCALL DELL ;防抖动延时 JB P1.7,MSET INC 50H

模拟时钟转动程序

模拟时钟转动程序 一、课程设计的内容 能模拟机械钟表行走,还要准确利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。 二、课程设计的要求与数据 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)

模拟电子时钟c语言程序

算法:将当前时间显示到屏幕,当时间发生变化时,清屏,显示新的时间(当有键盘操作时退出程序)。 显示时间格式:小时:分钟:秒 /* DEV C++ Win XP*/ #include #include #include #include typedef struct { int x; int y; }Point; time_t now; struct tm *pt,t1,t2; int printpoint(Point p) { Point p1; p1.x=p.x+2; p1.y=p.y+4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x, p1.y+1); printf("%c%c",2,2); p1.y+=4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x,p1.y+1); printf("%c%c",2,2); return 0; } int print0(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%c%4s%c",2," ",2); } return 0; }

int print1(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); printf("%5s%c"," ",2); } return 0; } int print2(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else if(i>0&&i<6) printf("%5s%c"," ",2); else printf("%c",2); } return 0; } int print3(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%5s%c"," ",2); } return 0; } int print4(Point p) {

基于51单片机的电子时钟设计源程序

#include unsigned char DispBuf[6]; //时间显示缓冲区 unsigned char Disdate[6]; //日期显示缓冲区 unsigned char DisSec[6]; //秒表缓冲区 struct //设定时间结构体 { unsigned char Hour; unsigned char Min; unsigned char Sec; }Time; struct //设定日期结构体 { unsigned char Year; unsigned char Month; unsigned char Days; }Date; struct //设定毫秒结构体 { unsigned char Minite; unsigned char Second; unsigned char MilliSec; }Millisecond; unsigned char point=0; unsigned char point1=0; unsigned char point2=0; unsigned char Daymount; unsigned char Daymount1; unsigned char T0_Int_Times=0; //中断次数计数变量 unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁 unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁 unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char DisPlay_Back1=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char i,j; unsigned char SetMillisecond; //启动秒表 code unsigned char LEDCode[]={0x01,0xd7,0x22,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80}; //数码管显示代码 code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码 void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); void changedate(); // 调日期 void displaydate(); // 显示日期 void makedays(); //确定每个月的日期 void runSec();

用C#编的模拟时钟(附源代码)

使用C#模拟时钟表的一种简单制作方法 1.GDI+图形库简介 1.1概述 GDI+是Microsoft的新.NET Framework类库用于图形编程,因为它是.NET Framework的一部分,所以也是面对对象的。 1.2设备环境和对象 在GDI+中识别输出设备的方式是使用设备环境DC对象,该对象存储特定设备的信息并能把GDI+API函数调用转换为要发送给该设备的指令,还可以查询设备环境对象,确定对应的设 备有什么功能,这样才能据此调整输出结果。 在GDI+中设备环境包装在.NET基类System.Drawing.Graphics中,大多数绘图工作都是调用Graphics的对象完成的。 2.如何利用GDI+绘制时钟表 2.1时钟表的各控件属性的设置 用C#中各控件制作一个指针式的时钟放在桌面上显示的界面。包括1个PictureBox控件、1个Timer控件、1个NotifyIcon控件及StatusStrip控件。 2.2各控件的属性设置 Timer控件的Interval属性值设置为1000,Enable属性值设置为True;窗体的StartPosi tion属性设置为CenterScreen,这个属性使得钟表在屏幕上中中央显示。 2.3功能实现代码 为实现该时钟表功能,需要设计并输入相应对象相应事件或过程的程序代码。方法是:在设计状态,双击相应控件,或双击控件的某一事件,并输入相应的C#程序代码。 2.4通用声明及时钟表设计方法 在程序中需要有一批变量或常量的定义,可事先在通用声明中完成,代码如下: const int s_pinlen = 100;//秒针长度 const int m_pinlen = 75; //分针长度 const int h_pinlen = 75; //时针长度 PointF center = new PointF(s_pinlen +3, s_pinlen +3);//中心点位置 SolidBrush sb = new SolidBrush(Color.Black);//时钟圆心的刷子 除上述变量声明外,时钟表功能编写子方法,方法名为:AngleToPos和myClock,

模拟时钟电路的程序

//单片机实验模板文件。具有三个基本功能: // 1、数码管、发光二极管扫描显示 // 2、键盘扫描,返回0---15 // 3、T0中断,产生基本延时2.5ms,并且调用显示函数 // 根据以上功能,该文件为进一步编写实验程序、实际应用程序,提供了基础 #include #define delay5ms(x) {delay_xms=x*2; while(delay_xms<255);} //用于延时的宏,x的1个数值对应延时5ms。 x<=127。 void display(void); unsigned char code ledcode[]={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次仅扫描1位,每2.5ms扫描一位 { static unsigned char data i=0, scan=0xfe; P0=0; if(i<6) P0=ledcode[dis_buf[i]]; else

模拟时钟的VB程序

沈阳航空航天大学课程设计 学号2009040301055 班级94030102 姓名李超 指导教师刘学平 2010 年3 月15 日

沈阳航空航天大学 课程设计任务书 学院:航空宇航工程学院专业:飞行器制造班级:94030102 学号:2009040301055 题目:模拟时钟 一、课程设计时间 2011年3月7日~11日(第1周),共计1周。 二、课程设计内容 在窗体上演示一个正在工作的有时、分、秒指针的时钟,要求:可以对时钟的时间进行手工修正。 用户界面中的菜单(或命令按钮)至少应包括“运行时钟”、“修改时间”、“退出”3项。 三、课程设计要求 程序质量: ?贯彻事件驱动的程序设计思想。 ?用户界面友好,功能明确,操作方便;可以增加其它功能或修饰。 ?代码应适当缩进,并给出必要的注释,以增强程序的可读性。 课程设计说明书: ?课设结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提 供的模板。 四、指导教师和学生签字 指导教师:________ 学生签名:________ 五、成绩 六、教师评语

目录 一、需求分析 (4) 二、设计分析 (5) 三、关键技术 (7) 四、总结 (12) 五、完整的源程序 (14) 六、参考文献 (16)

一、需求分析 “模拟时钟”软件。在窗体上演示一个正在工作的有时、分、秒指针的时钟,要求:可以对时钟的时间进行手工修正。用户界面中的菜单(或命令按钮)至少应包括“运行时钟”、“修改时间”、“退出”3项。 ①在VB窗体Form1中设计模拟时钟表盘,设计四个按钮:运行时钟、修改时间、应用、退出。在窗体Form2中设计填输入时间的位置和两个按钮:重新输入、确定。 ②用运行时钟按钮使时钟从零点开始运行。 ③利用修改时间按钮在Form2中输入合理时间,单击确定后单击应用使模拟时钟按所需时间开始运行。 ④Form2中重新输入按钮可以使所有Text控件清空,可以进行时间的重新输入。 ⑤程序可以实现时钟指针的转动。

模拟电梯问题实验报告

电梯模拟问题 一、目的与要求 1. 掌握线性结构的逻辑特点及存储实现; 2. 根据选题,按规范化流程完成课程设计报告: ⑴.提供需求分析。(15分) ⑵.列出概要设计。(包括:抽象数据类型的描述;程序结构图或功能模块图)(20分) ⑶.给出详细设计。(包括:①存储结构的描述;②算法的详细设计,对复杂算法,最好画出其N-S流程图;③函数的调用关系图)(30分) ⑷.进行调试分析(注:调试时遇到的问题及解决方法,程序的输出结果及对结果的分析)。(15分) ⑸. 整理设计总结。(设计心得体会,以及其他总结信息等)(10分) ⑹.附有程序清单(注:代码可具有适当注释,用来说明程序的功能、结构)。(10分) 二、设计步骤 1、线性结构是有序数据元素的集合,存在着“一对一”的线性关系且只有一 个首结点,一个尾结点,首结点只有后继没有前趋,尾结点只有前趋没有后继。顺序表的存储结构包括顺序表和链表,顺序存储是指将线性表元素按照逻辑顺序依次存储在一组连续的地址单元中。链式存储是通过结点中的链域将线性表中n个结点按其逻辑顺序链接在一起。分为:单向链表,双向链表,循环链表。 2、(1)设计一个电梯模拟系统。这是一个离散的模拟程序,因为电梯系统是 乘客和电梯等“活动体”够成的集合,虽然他们彼此交互作用,但是他们的行为是基本独立的。在离散的模拟中,一模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。可模拟某校五层教学楼的电梯系统,或者九层教学楼的电梯系统。 此程序的关键是模拟好电梯运行状态的转换与乘客进出的同步进行,需要一个函数判断电梯的运行状态,决定电梯的下一个运行状态如电梯的开门,关门,上升,下降,减速,加速等,也需要模拟时钟的函数来判断该运行哪个函数,也需要定义几个结构体存放结点信息。 (2)时钟函数: void DoTime() { //此函数用于模拟时钟 while(1) { if(Time>MaxTime)

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

《高级语言》课程设计 课题名称模拟时钟转动程序 学院信息工程专业网络工程地点 D507 学生姓名钟都华学号 13046130 开课时间 2013 至 2014 学年第 2 学期 同组人李卓 成绩

一、课程设计的目的和要求 1.课程设计的目的 本程序旨在训练读者的基本编程能力,使读者熟悉C语言图形模式下的编程。本程序中涉及时间结构体、数组、绘图等方面的知识。通过本程序的训练,使读者能对C 语言有一个更深刻的了解,掌握利用C语言相关函数开发电子时钟的基本原理,为进一步开发出高质量的程序打下坚实的基础。 2.课程设计的要求 能模拟机械钟表行走;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;要准确的利用数字显示日期和时间并且可以根据用户的需求更改当前时间(指针式时钟与数字式时钟实现同步更改);数字式时钟的时间显示与指针式时钟显示一致;可以通过上下键改变当前的时、分、秒;改的时间是小时、分钟、还是秒数;通过Tab键切换按Esc时程序退出。 二、设计 如下图,此电子时钟主要由以下4个功能模块组成。 1.界面显示模块 电子时钟界面显示在调用时钟运行处理之前完成,在这里主要调用了C语言图形系统函数和自负屏幕处理函数画出时钟程序的主界面。主界面包括类似Windows自带的电子时钟的界面和帮助界面两部冯。电子时钟界面包括一个模拟时钟运转的钟表和一个显示时间的数字钟表。在帮助界面中,主要包括一些按键的操作说明。 2.按键控制模块 按键控制模块主要完成两大部分功能。第一,读取用户按键的键值。第二,通过对键盘按键值得判断,执行相应的操作,如光标移动、修改时间。 3.时钟动画处理模块 在时钟动画处理模块中,它通过对相关条件的判断和时钟坐标值的计算,完成时、分、秒指针的擦除和重绘,以达到模拟时钟运转的功能。

电子时钟的设计及程序

电子时钟的设计及程序 一.设计目的: 1.理解掌握定时/计数器和中断的使用方法。 2.掌握微机常用的输入输出方式及接口技术。 3.掌握一定的汇编语言知识,培养自己的动手操作能力。 4.学习程序设计的基本思路和方法。 二.程序内容: 第一部分:定义显示界面。 第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。 第三部分:将存在系统内存区的时间数用显示字符串的形式显示出来。 第四部分:获取键盘的按键值,以ESC键退出系统返回DOS。三.程序设计原理: 首先在数据段开辟一显示缓冲区,用来存储系统时间。调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。调用DOS字符串显示功能将时间显示 出来。并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。由于获取了的系统时间不会自动刷

新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序。利用BIOSS设计窗口,选择适当的背景和前景等,使屏幕显示更加完美。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下ESC键返回DOS系统。四.程序流程图如下: DATA SEGMENT ;设置数据段 BUF1 DB 'THE TIME IS NOW: $' BUF5 DB ' @@@@@ ^^^^^^^ @@@@@@ $' BUF6 DB ' &&&&&& ####### &&&&&& $' BUF7 DB ' 00 >o o < 00 $' BUF8 DB ' 00 (::) 00 $' BUF9 DB ' 00 ~~ 00 $' BUF10 DB ' 00 !! 00 $' BUF3 DB 'CLASS:040402206 $' BUF4 DB 'NAME:hu ling wei $' BUF2 DB 10 DB 10 DUP(?) DATA ENDS STACK SEGMENT STACK ;设置堆栈段

C语言模拟时钟转动程序

#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(1); circle(300,240,200); circle(300,240,205); circle(300,240,5); for(i=0;i<60;i++) /*划钟点上的短线*/ { if(i%5==0) l=15; else l=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); } } #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(1); circle(300,240,200); circle(300,240,205); circle(300,240,5); for(i=0;i<60;i++) /*划钟点上的短线*/ { if(i%5==0)

模拟时钟应用程序

案例五模拟时钟应用程序 以实例为背景学习基于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一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。本程序采用非删除式重绘,假定指

电子时钟程序

+-+ 机电工程系 课程设计报告题目: 专业: 班级: 学号: 姓名: 同组人: 指导老师: 答辩日期:

一、绪论 当今世界但片机以飞快的速度在发展,了解和掌握单片机技术是我们机电系学生应该学习的课程之一,基于本学期对单片机的学习,现在对单片机语言所写出的电子时钟展开说明,现在生活很多东西都是离不开电子了,许许多多的东西都被电子产品所代替,时钟就是一种在我们生活之中很普通的电子产品,它虽然在单片机机之中算是一种比较简单的东西,但它在我们生活在是普遍存在的,它能让我们对更多的电子产品有所了解,所以我们想要了解更多的电子产品,电子时钟也是我们应该了解的,所以我们对电子时钟展开课程设计,并对其工作原理及工作方式进行了解,这样能让我们初步学习到有关的电子产品。设计过程中我们将对生活中电子时钟的工作方式进行了解,接着我们要在学过的单片机语言基础上,对电子时钟这样的工作方式进行单片机解释,有单片机语言解释,为什么电子时钟要这样工作,接着我们有汇编语言写出电子时钟程序,在报告中我们将对单机汇编语言的有关语句进行解释,并对单片机的电路板的工作原理进行解释,并对电子时钟工作方式进行说明。 二、对本课程设计的分析 2.1 工作原理 当电子时钟上电时候将在电子时钟上显示23-30-00,带表现在是时间,电子时钟将按正常的时间一样走动,有对应的四个按钮用来调整时钟所对应的时间,第一个按钮对应设置按钮,当它按下去时候,时钟将停止走动,这时候将进入调时间模式,第二个按键用来选择调的是时还有分还秒,第三个按键用来加运算的,

第四个按键用来减运算的。 2.2 P3口对应的按键操作功能系统框图 开始 P3.0是否按 下 P3.1是否按 下 YES P3.2是否按下 P3.3是否按下NO P3.3是否按下21H 是否为几 YES P3.2是否按下P3.3是否按下P3.2是否按下NO 时加一 YES NO 时减一 是否为一 YES NO 分加一 分减一 是否为2NO YES YES NO 秒加一 秒减一 说明:以上框图是系统版上对应的四个按键对电子时钟的操作功能,在什么情况下,对应的按键实现什么样的功能。 三、 主要电路模块的实现方案比较及选择

单片机模拟电子时钟设计

单片机课程设计 课题:单片机模拟电子时钟设计 学院:自动化学院 专业: 07电气工程及其自动化 (低压电力智能控制方向) 姓名:谭善文 学号:2007104743002 指导老师:张华

目录 一、前言 (3) 二、设计目的 (3) 三、设计任务与要求 (3) 四、设计原理 (3) 五、总体设计方案 (4) 六、小结与展望 (21) 七、致谢 (22) 八、主要参考文献 (22) (3)、晶振 (5) (4)、LED (5) (5)、复位 (6) (6)、蜂鸣器 (6) (7)、按键 (6) (8)、串行口 (7) (9)、单片机 (7) (10)、数码管 (8) 2、程序编写 (10) 六、小结与展望 (21) 七、致谢 (22) 八、主要参考文献 (22)

一、前言 在当今的工作和生活环境中,有越来越多的单片机在为人们服务,例如电视遥控、手机、洗衣机、空调等,单片机几乎无所不在,学习单片微型计算机这门课程,就是为了对单片微型计算机有进一步感性的认识,了解、掌握、应用,甚至设计开发它。让我们能综合运用单片机的软、硬件技术分析实际问题,为工业生产、科学研究和实验设备等领域的单片机应用和开发打下良好的基础。 二、设计目的 a)通过《单片微型计算机原理与接口技术教程》了解单片微型计算机的发 展; b)根据课程设计的要求,学会用汇编语言设计程序,学会应用程序设计调 试软件; c)通过调试程序设计模块,掌握单片微型计算机的结构原理,了解程序设 计的编程思想; d)通过软件调试熟悉使用单片机指令系统,掌握汇编语言程序设计方法及 编程技巧,掌握子程序的设计与使用,熟悉中断服务程序的设计及调用 过程。 三、设计任务与要求 任务:利用单片机定时功能实现电子时钟的计时 要求:1.设计单片机电子时钟设计控制方案,功能设计; 2.详细描述实现需要的硬件,效果等; 3.编写汇编语言程序设计,在KEIL仿真实现调试程序; 四、设计原理 单片机可以利用定时功能实现电子时钟的计时。设计时利用单片机的定时器

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码 程序:(注已完全经过调试,达到预期目的) #include #define uchar unsigned char #define uint unsigned int uchar count=0; sbit LED=P1^0; uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管 0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0; void delay(uint i) //延迟函数 { uint j; for(;i>0;i--) for(j=124;j>0;j--); } void init() { ET0=1; TMOD=0x51; //选定定时器0,1和中断0,1 TH0=(65536-25000)/256; TL0=(65536-25000)%256; //设定时器0时间为250ms一次 ET1=1; TH1=0xff; TL1=0xff; //定时器1为中断 EX0=1; IT0=1; //中断0开 EX1=1; IT1=1; //中断1开 TR0=1; //定时器0开 TR1=1; //定时器1开 EA=1; //总中断开 } void display() //时钟显示函数 {

P0=tab[hour/10%10]; P2=0xfe; delay(1); P0=tab[hour%10]; P2=0xfd; delay(1); P0=tab[fen/10%10]; P2=0xfb; delay(1); P0=tab[fen%10]; P2=0xf7; delay(1); P0=tab[miao/10%10]; P2=0xef; delay(1); P0=tab[miao%10]; P2=0xdf; delay(1); } void main() //主函数 { init(); LED=0; while(1) { display(); } } void T0_int() interrupt 1 //定时器0函数{ TH0=(65536-25000)/256; TL0=(65536-25000)%256; count++; if(count==20) { count=0; miao= miao +1; LED=~LED; if(sec==60) { miao=0; fen= fen +1;

模拟时钟转动程序

东南大学 C语言课程设计报告 课程名称:计算机综合课程设计 学院:土木工程学院 设计题目:模拟时钟转动程序 级别:B级 学生姓名:韦信丞 学号:05114419 同组学生: 学号: 指导教师:郭恒宁 2015年9月 1 日 C语言课程设计任务书

模拟时钟转动程序 一、课程设计的内容 1、能模拟机械钟表行走 2、还要准确利用数字显示日期和时间 3、在屏幕上显示一个活动时钟 4、按任意键时程序退出。 二、课程设计应完成的工作 1、编写完成相应题目的程序 2、编写课程设计报告,课程设计报告应该包含以下6部分 1)需求分析:包括设计题目、设计要求以及系统功能需求分析 2)总体设计:包括系统总体设计框架和系统功能模块图 3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图 4)调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、 解决方法及其效果等,相应效果截图) 5)总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方需要改进?课程设计的学习与体会?有哪些合理化建 议? 6)附录:主要原程序代码含必要的注释 3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。 四、应收集的资料及其主要参考文献 [1]谭浩强.C程序设计(第四版),北京:清华大学出版社,2010年6月[2]陈清华朱红 . C语言课程设计案例精选与编程指导(第一版),南京:东南大学出版社,2003年6月 [3]顾小晶 . 实用C语言简明教程(第一版),北京:中国电力出版社,2003年9月

8086数字电子钟的设计 附程序代码

附件3 课程设计(综合实验)报告 ( 2011 -- 2012 年度第 1 学期) 名称:硬件课程与实践 题目:8086数字电子钟的设计 院系: 班级: 学号: 学生姓名: 指导教师: 设计周数:2周 成绩: 日期:2011年09月01日

一、课程设计的目的与要求 1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。 2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。 3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。 二、课程设计正文 A.设计题目:8086数字电子钟的设计: 1.设计并完成LED七段数码管数字钟电路。 2.数字钟显示格式为:HH:MM:SS。 3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。 4.具有暂停时间及复位功能。 B.设计方案 本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。 C.硬件原理 1.七段数码管显示和键盘扫描显示 图1.1七段数码管

图1.2伟福实验台六位LED的电路图及寻址空间 实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

模拟时钟转动程序

课程设计 课程名称高级语言程序课程设计题目名称模拟时钟转动程序 学生学院自动化学院 专业班级自动化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) 附录:主要源程序代码,含必要的注释。

相关主题