com时钟控件课程设计报告

合集下载

电子时钟课程设计报告

电子时钟课程设计报告

.XX工程学院课程设计课程名称单片机原理与应用课题名称电子时钟设计专业班级学号姓名指导教师_李XX2012年5月5日XX工程学院课程设计任务书课程名称单片机原理与应用课题电子时钟设计专业班级学生XX学号指导教师李XX审批任务书下达日期2011年5 月5 日任务完成日期2011年5月20 日电气信息学院课程设计评分表指导教师签名:________________日期:________________注:①表中标*号工程是硬件制作或软件编程类课题必填内容;②此表装订在课程设计说明书的最后一页。

课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件〔非16K大小的图纸及程序清单〕。

以下为课程设计的指导书〔程序及电路图全有〕程序局部:/**************************按下设置键对应的位〔时分秒〕闪烁,再按下数字键即可设置时间,设置好后按确定退出程序可在整点提示,无闹钟设置**************************/#include "reg51.h" //包含51单片机头文件#define uchar unsigned char#define uint unsigned intsbit Buzzer=P2^7;//定义喇叭接口,用于报时uint sec;//秒存放器uint min=0;//分存放器uint hour=0;//小时存放器uint tt;//计数器值uint cursor=0;uchar a=0xff;uchar tempkey,num,numclear;uchar codeSeg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示0-9的对应P0输出的16进制代码uint code tab[3][4]={ {'1','2','3','4'},{'5','6','7','8'},{'9','0','S','Q'}}; //矩阵〔3行4列〕表示0到F的16个键值void delay(uint t)//延时函数{uint i;while(t--){for (i=0;i<125;i++);}}void Tdelay(unsigned int i)//短时间延时函数{while(i--);}void Kdelay()//长时间延时函数{uchar i,j;for(i=100;i>0;i--)for(j=248;j>0;j--);}void display(uchar L9,uchar L10,uchar L11,uchar L12,uchar L13,ucharL14)//数码管显示函数,L9-L14分别为1-6个数码管显示的值即:时分秒{//P2=0xFF;if(cursor==3){P1=0x7F|a;P0=L9;delay(1);}else{P1=0x7F;P0=L9;delay( 1);} //hourif(cursor==3){P1=0xBF|a;P0=L10;delay(1);}else{P1=0xBF;P0=L10;del ay(1);} //hourif(cursor==2){P1=0xDF|a;P0=L11;delay(1);}else{P1=0xDF;P0=L11;d elay(1);} //minif(cursor==2){P1=0xEF|a;P0=L12;delay(1);}else{P1=0xEF;P0=L12;de lay(1);} //minif(cursor==1){P1=0xF7|a;P0=L13;delay(1);}else{P1=0xF7;P0=L13;del ay(1);} //secif(cursor==1){P1=0xFB|a;P0=L14;delay(1);}else{P1=0xFB;P0=L14;del ay(1);} //sec}char kbscan() //键盘扫描函数,假设有按键函数将返回键值{unsigned char hang,lie,key;if(P3!=0x0f) //0x0f==0000 1111,此处扫描是否有按键按下delay(5);//延时用于按键消抖if(P3!=0x0f){switch(P3&0x0f)//分析按键“列〞值〔矩阵键盘有行列之分〕{case 0x0e:lie=0;break; //0x0e==0000 1110case 0x0d:lie=1;break; //0x0d==0000 1101case 0x0b:lie=2;break; //0x0b==0000 1011case 7:lie=3;break;}P3=0xf0;P3=0xf0;switch(P3&0xf0)//分析按键“行〞值{case 0xe0:hang=0;break; //0xe0==1110 0000case 0xd0:hang=1;break; //0xd0==1101 0000case 0xb0:hang=2;break; //0xb0==1011 0000}P3=0x0f;while(P3!=0x0f);//等待按键松开key=tab[hang][lie];}elsekey=0;return (key);//键值返回给函数}void SetTime1() //此定时器增加数码管动态闪烁{//----------定时器用1TMOD |= 0x20; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH1 =(65536-50000)/256; //50毫秒TL1 =(65536-50000)%256; //给定初值,这里使用定时器最大值从0开场计数一直到65535溢出EA=1; //总中断翻开ET1=1; //定时器中断翻开TR1=1; //定时器开关翻开}main(){unsigned char temp,str[32];TMOD=0x02; //设置模式为定时器T0的模式2 〔8位自动重装计数初值的计数值〕TH0=0x06; //设置计数器初值高位,靠TH0存储重装的计数值X0=256-250=6TL0=0x06; //设置计数器初值低位TR0=1; //启动T0ET0=1; //开启定时器T0中断允许EA=1; //开启中断总控制P3=0x0f; //给P3口付初值0x0f==0000 1111,以便按键扫描num = 0;Buzzer=0; //关闭蜂鸣器while(1){if(min==0&&sec<1)Buzzer=1;else Buzzer=0; //到整点蜂鸣器响temp = kbscan();//扫描是否有按键操作if(temp!=0){if(temp =='S')//判断按键是“设置键〞{delay(1);if(temp =='S')//防抖动{++cursor ;if(cursor>3){cursor=0;TR0 =1; TR1 = 0;}//cursor=1-3分别为设置秒、分、时3种状态}}if(cursor==0&&temp == 'Q'){min=0;sec=0;hour=0;} //非设置状态下按下“确定、复位〞键清零时间if(temp == 'Q')//判断按键为“确定〞键:在设置时间状态下按下此键为确定设置完毕{delay(1);if(temp == 'Q'){for( numclear =0;numclear<32;numclear++) //全部写零{str[numclear] = 0;}if(min>=60 ){min =0;}if(hour>=24 ){hour = 0;}cursor = 0;TR0 = 1;TR1 = 0;}}if(cursor !=0 && temp!='S' && temp !=0)//设置状态下改变时间{delay(1);if(cursor !=0 && temp!='S' && temp!=0){TR0 = 0;if(cursor==1){sec=temp-48;str[++num] = sec;sec =str[num-1]*10+sec;SetTime1();}if(cursor==2){min=temp-48;str[++num] = min;min =str[num-1]*10+min;SetTime1();}if(cursor==3){hour=temp-48;str[++num] = hour;hour =str[num-1]*10+hour;SetTime1();}}}}display(Seg[hour/10],Seg[hour%10],Seg[min/10],Seg[min%10],Seg[sec/1 0],Seg[sec%10]); //显示时间到数码管上}}void t0(void)interrupt 1 using 0 //t0的中断程序,用于时间运作{tt++;if(tt==4000)//定时器的定时计数,4000次250us为1秒{tt=0;a=~a;sec++;if(sec>=60){sec=0;min++;if(min>=60){min=0;hour++;if(hour>=24){hour=0;}}}}}void Time_1() interrupt 3 using 1//中断处理函数,用于在设置时间时数码管闪烁{static unsigned int n=0;n++;if(n==500){n=0;a=~a;}}电路图〔protus仿真图〕:。

数字时钟的课程设计

数字时钟的课程设计

数字时钟的课程设计一、课程目标知识目标:1. 学生能理解数字时钟的基础知识,掌握时钟的数字显示原理。

2. 学生能运用所学知识,分析并描述数字时钟的显示方式及其变化规律。

3. 学生了解数字时钟在实际生活中的应用,理解时分秒的概念。

技能目标:1. 学生能够通过观察、分析,动手操作,设计简单的数字时钟模型。

2. 学生能够运用所学知识,解决与数字时钟相关的问题,如时间计算、闹钟设定等。

3. 学生能够运用数字时钟知识,进行实际生活中的时间管理。

情感态度价值观目标:1. 学生培养对数字时钟的兴趣,激发学习科学技术的热情。

2. 学生通过数字时钟的学习,认识到时间的重要性,养成珍惜时间的良好习惯。

3. 学生在团队协作中,学会互相尊重、沟通、合作,培养集体荣誉感。

课程性质:本课程以实践性、趣味性为主,注重培养学生的动手能力、观察力和团队协作能力。

学生特点:五年级学生具有一定的逻辑思维能力、动手操作能力和团队协作能力。

教学要求:教师应采用生动有趣的教学方法,引导学生主动参与,关注学生的个体差异,鼓励学生提出问题、解决问题,注重培养学生的实践能力和创新能力。

通过课程目标的实现,使学生能够将所学知识应用于实际生活,提高学生的综合素质。

二、教学内容本课程依据课程目标,结合课本内容,组织以下教学大纲:1. 数字时钟的基础知识:- 时钟的演变与数字时钟的原理- 时分秒的概念及其在数字时钟中的应用2. 数字时钟的组成与显示方式:- 数字时钟的显示屏、电路和程序- 数字时钟的显示方式:LED、LCD等- 数字时钟的显示变化规律3. 数字时钟的应用:- 时间计算与时间管理- 闹钟功能及其设置方法- 数字时钟在生活中的实际应用案例4. 动手实践与团队协作:- 设计简单的数字时钟模型- 操作数字时钟,解决实际问题- 团队合作,交流分享制作经验教学内容安排与进度:1. 基础知识学习(1课时)2. 数字时钟组成与显示方式(1课时)3. 数字时钟应用(1课时)4. 动手实践与团队协作(2课时)教材章节关联:本教学内容与课本第四章“时间及其测量”相关,涉及第四节“电子时钟及其应用”。

COM时钟控件

COM时钟控件

为时钟设置计时器, 每秒钟刷新一次时间显示。 为时钟设置计时器 每秒钟刷新一次时间显示。用ClassWiza rd 为 CClockControl类添加 类添加WM _ CREA TE 消息的响应函数 消息的响应函数OnCr eat 类添加 e( ) ,在该函数中建立定时器。 在该函数中建立定时器。 在该函数中建立定时器
• 为此控件添加属性 为了易于说明问题 只添加一个库存属性和一个自 为此控件添加属性, 为了易于说明问题, 定义属性。 选项卡中单击Add 定义属性。在ClassWiza rd 下Automation 选项卡中单击 Proper ty 按钮 在弹出的“Add Property”对话框中 按钮, 在弹出的“ ”对话框中External name 组合框下选择下拉列表中的“BackColor” 表示背景色。再 组合框下选择下拉列表中的“ ” 表示背景色。 添加一个属性, 组合框中填入“ 添加一个属性 在External name 组合框中填入“ClockT ype”, 类 ” 型设为BOOL 型, 用于表示时钟样式。 用于表示时钟样式。 型设为
3、属性和方法 BackColor 标准属性,设置控件背景颜色 ForeColor 标准属性,设置控件前景颜色 DrawClick(CDC *pDC, const CRect &rcBounds, const CRect &rcInvalid) 该方法为自定义方法,表盘放在该方法中 CurrenTime(CDC *pDC, const CRect &rcBounds, const CRect &rcInvalid) 该方法也为自定义方法,用来得到系统时间
vo i d CCl ockCt r l :: ::OnDr aw(CDC* pdc, con s t CRe c t& r cBound s, con s t CRe c t& r c I n va l i d ) { CRe c t r e c t; ::Ge tCl i en tRe c t ( t h i s→m_hWnd, &r e c t ); / / 获取客户区 :: i n t nCen t e rX= r e c t. r i gh t/ 2; / / 获取客户区中心坐标 i n t nCen t e rY= r e c t. bo t t om/ 2; pdc→ Se tTex tCo l o r (Tr an s l a t eCo l o r (Ge t Fo r eCo l o r ( ) ) ); / / 设置文本颜 色 pdc→ Se tBkMode (TRANSPARENT); / / 设置背景为透明 CBr u s h * pBr u s h = new CBr u s h (T r an s l a t eCo l o r (Ge tBa ckCo l o r ( ) ) ); / / 新建画刷 颜色为背景色 新建画刷, pdc→ F i l l Re c t (&r e c t, pBr u s h ); / / 将控件所占客户区填为透明 de l e t e pBr u s h; CFon t * pOl dFon t; pOl dFo n t =Se l e c t S t ockFon t (pd c ); / / 选择库存字体 CTime Time=CTime:: Ge tCu r r en tT ime ( ); / / 获取当前时间 :: CS t r i n g sNumbe r ; / / 整点数字

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

数字时钟课程设计报告

数字时钟课程设计报告

一.设计题目数字时钟仿真设计二.设计目的和要球1)目的掌握数字时钟的工作原理和设计方法,学会用Multisim10软件操作实验内容,掌握设计性试验的实验方法。

数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的应用。

数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

因此,我们此次设计数字钟就是为了了解数字钟的原理,从而学会制作数字钟。

而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。

且由于数字钟包括组合逻辑电路和时序电路。

通过它可以进一步学习和掌握各种组合逻辑电路与时序电路的原理和方法。

2)要求(1)设计一个具有时、分、秒的十进制数字显示的计时器。

(2)具有手动校时、校分的功能。

(3)通过开关能实现小时的十二进制和二十四进制转换。

(4)具有整点报时的功能,应该是每个整点完成相应点数的报时,如3点钟响3声。

三.设计原理1)总体方案设计数字时钟由振荡器、分频器、计数器、译码现实、报时等电路组成。

其中,振荡器和分频器组成标准信号发生器,直接决定计时系统的精度。

由不同进制的计数器、译码器和显示器组成计时系统。

将标准秒信号送入采用六十进制的“秒计数器”,每累计60s就发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。

“分计数器”也采用六十进制计数器,每累计60min,发出一个“时脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用二十四进制或十二进制计时器,可实现对一天24h 或12h 的累计。

译码显示电路将“时”、“分”、“秒”计数器的输出状态通过六位七段译码器显示器显示出来,可进行整点报时,计时出现误差时,可以用校时电路校时、校分。

数字时钟的原理框图如图1所示。

2)单元电路设计1.秒脉冲产生电路秒脉冲产生电路用一个1Hz 的秒脉冲时钟信号源代替。

数字钟课程设计报告(正文)

数字钟课程设计报告(正文)

数字钟课程设计报告(正文)课程设计报告课题名称:电子技术课程设计学生学号:专业班级:学生姓名:指导教师:目录一、设计目的 (2)二、设计所需元件器材 (2)三、原理框图 (2)四、各功能模块图 (3)五、设计出现的问题及心得 (9)六、思考题 (10)七、课程设计说明书 (12)一、设计目的数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时序电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法.二、设计所需元件器材1.555定时器1片2.74LS90集成块6片3.CD4511集成块6片4.共阴极7段数码管6个5.面包板1个(型号SYB-118)6.10uf电解电容1个7.0.1uf瓷片电容1个8.68k电阻一个9.15k电阻一个10.单股线8m左右11.镊子12.剪刀13.斜口钳14.74LS14一片15.74LS20一片16.按键两个17.电阻1k 3个18.电阻 100欧6个19.5伏电源三、原理框图基本原理为555定时器产生基准秒脉冲,将信号送到60进制秒计数器,秒计数器60一循环,会产生进位信号,同时将这信号送到60进制分计数器,分计数器循环也会产生进位信号,送到24进制时计数器。

每级计数器都有译码器与之相对,将计数器送出的4位信号转变成数码管的十进制信号,这样就能显示出具体时间。

四、各功能模块图1.555定时器555定时器是一种集模拟、数字于一体的中规模集成电路,其应用极为广泛。

555定时器内部结构如图4-1-1所示。

课程设计数字电子时钟设计

课程设计数字电子时钟设计

课程设计数字电子时钟设计一、课程目标知识目标:1. 学生能理解数字电子时钟的基本原理,掌握时钟的各个组件及其功能。

2. 学生能掌握数字电子时钟设计中涉及的二进制、十六进制等基础知识。

3. 学生了解数字电子时钟设计中常用的集成电路及其应用。

技能目标:1. 学生能够运用所学知识,设计并搭建一个简单的数字电子时钟电路。

2. 学生能够通过编程实现对数字电子时钟的显示控制,具备初步的编程能力。

3. 学生能够运用所学知识解决数字电子时钟设计过程中遇到的问题。

情感态度价值观目标:1. 学生对数字电子技术产生兴趣,培养探究精神和创新意识。

2. 学生在团队合作中学会沟通与协作,培养团队精神和责任感。

3. 学生认识到数字电子技术在实际应用中的重要性,提高学习的积极性和主动性。

课程性质:本课程为实践性较强的课程,结合理论知识与动手实践,培养学生的实际操作能力。

学生特点:学生具备一定的电子电路基础,对数字电子技术有一定了解,但编程能力较弱。

教学要求:教师需结合学生特点,采用讲解、演示、实践相结合的教学方法,引导学生主动参与,提高学生的动手实践能力和创新能力。

在教学过程中,注重培养学生的团队合作意识和解决问题的能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高综合运用知识的能力。

二、教学内容1. 数字电子时钟原理:介绍时钟的基本工作原理,包括振荡器、分频器、计数器、显示器等组成部分及其功能。

相关教材章节:第二章第二节“数字电子时钟的基本原理”2. 数字电子技术基础:回顾二进制、十六进制等基础知识,为数字电子时钟设计打下基础。

相关教材章节:第一章“数字电子技术基础”3. 集成电路与应用:学习数字电子时钟设计中常用的集成电路,如555定时器、CD4510计数器等。

相关教材章节:第三章“集成电路与应用”4. 数字电子时钟设计:讲解如何设计并搭建数字电子时钟电路,包括电路图的绘制、元器件的选择等。

相关教材章节:第四章“数字电子时钟的设计与制作”5. 编程控制:学习如何通过编程实现对数字电子时钟的显示控制,介绍简单的编程知识和技巧。

数字钟课程设计报告排版

数字钟课程设计报告排版

数字钟课程设计报告排版一、课程目标知识目标:1. 学生能理解数字钟的基本原理和组成部分,掌握数字钟电路的设计方法。

2. 学生能够运用所学知识,设计并制作一个简单的数字钟。

3. 学生了解数字钟在日常生活和科技领域中的应用。

技能目标:1. 学生能够运用电子元件和工具进行数字钟的搭建,提高动手实践能力。

2. 学生掌握数字钟程序编写的基本方法,培养编程思维和解决问题的能力。

3. 学生能够通过课程学习,培养团队协作和沟通表达的能力。

情感态度价值观目标:1. 学生对电子技术产生兴趣,激发探索科学技术的热情。

2. 学生在学习过程中,养成积极思考、勇于创新的习惯。

3. 学生通过团队合作,学会尊重他人、分享成果,培养良好的团队精神。

课程性质:本课程为电子技术实践课程,注重理论与实践相结合,培养学生的动手能力和创新能力。

学生特点:五年级学生,具备一定的电子元件知识和编程基础,好奇心强,喜欢动手实践。

教学要求:结合学生特点,注重启发式教学,引导学生自主探究,关注学生个体差异,因材施教。

通过课程学习,使学生在掌握知识技能的同时,培养良好的情感态度价值观。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 数字钟原理及组成- 介绍数字钟的基本原理,包括计时、显示等部分- 分析数字钟的各个组成部分,如时钟电路、计数器、译码器、显示器件等2. 数字钟电路设计- 学习数字钟电路的基本设计方法- 掌握常见电子元件的使用,如IC、晶体振荡器、LED等3. 数字钟程序编写- 了解编程语言及其在数字钟设计中的应用- 学习编写简单的数字钟程序,实现计时、显示等功能4. 数字钟制作与调试- 制定制作数字钟的步骤,明确各阶段任务- 学习使用工具和仪器,进行数字钟的搭建和调试5. 数字钟应用与拓展- 探讨数字钟在日常生活和科技领域的应用- 激发学生兴趣,引导他们进行数字钟的拓展创新教学内容安排与进度:第一课时:数字钟原理及组成第二课时:数字钟电路设计第三课时:数字钟程序编写第四课时:数字钟制作与调试第五课时:数字钟应用与拓展教材章节及内容:第一章:电子技术基础1.1 数字电路概述1.2 常见电子元件介绍第二章:数字钟设计与制作2.1 数字钟原理2.2 数字钟电路设计2.3 数字钟程序编写2.4 数字钟制作与调试第三章:数字钟应用与拓展3.1 数字钟在日常生活和科技领域的应用3.2 数字钟的拓展与创新三、教学方法1. 讲授法:- 在数字钟原理及组成、数字钟电路设计等内容的教学中,采用讲授法,为学生讲解基本概念、原理和方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《COM时钟控件》课程设计报告学院:计算机科学与工程专业:计算机科学与技术班级:090603学号:090603120姓名:张阳阳指导老师:耿军雪目录目录21 课题背景.........................................错误!未定义书签。

1.1 背景、目的、意义、解决的主要问题及应达到的技术要求错误!未定义书签。

2 课程设计内容及要求...............................错误!未定义书签。

3 系统分析与设计...................................错误!未定义书签。

3.1 系统分析...................................错误!未定义书签。

3.2 系统设计...................................错误!未定义书签。

3.2.1 模块设计.................................................................................. 错误!未定义书签。

3.2.2 详细设计.................................................................................. 错误!未定义书签。

4 系统调试与测试分析...............................错误!未定义书签。

4.1 系统测试...................................错误!未定义书签。

4.2 系统调试...................................错误!未定义书签。

5运行效果 (9)6程序清单 (11)7 心得体会.........................................错误!未定义书签。

参考文献错误!未定义书签。

附录主要程序代码...................................错误!未定义书签。

一、课程设计目的时钟几乎是每个人生活中必备的生活用品。

时钟虽小确非常重要。

一款良好的时钟可以给人们带来极大的便利。

当然,现在关于时钟的各种应用程序层出不求,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。

为了达到上述目标,以及课程设计的要求,结合自己自身的情况,选择了PC平台、Windows操作系统、Visual C++ 6.0开发平台、MFC框架来实现自己的程序。

而且希望能通过自己这款小应用程序的设计,来掌握面向对象的程序设计方法,了解C++面向对象的设计方法和技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。

二、课程设计内容及要求程序所实现的功能:运行界面是一指针式时钟,包括时分秒三个指针,有12个钟点的显示,并通过指针的转动来实时更新时间。

同时可以显示相应时间的数字钟形式。

通过菜单可以实现闹铃功能、表盘背景、指针颜色设置、倒计时等功能。

同时为程序窗口增加了一张精美图片作为背景三、系统分析与设计1、系统分析为了使程序的显示更加美观,该程序使用了C++可视化程序设计方法进行设计。

在可视化程序设计中,建立了一个MFC单文档应用程序工程,该工程包括了视图类、文档类对话框类和主框架类。

在主框架类中修改窗口等属性,使整个时间的显示更加协调。

模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成模拟电子时钟的功能。

文档类定义时钟的相关属性,包括int类型的year、month、day、hour、minute、second,和包括CString类型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息。

int类型的时间日期属性用以计算,CSrting类型的时间日期属性用以显示,通过CString 类中的成员函数Formart可以把int型的数据转成CString型的。

视图类实现时钟的主要功能,在该类的OnDraw函数里面对时间日期进行显示输出。

向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。

为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时间间隔一致。

每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对时间加一秒。

通过一个计时器消息,使视图50ms 刷新一次,以保证时间的准确性。

在视图类中需要添加几个方法:用于计算时间的方法RunTime()、计算星期的方法Week()、int 型转CString 型的方法Change()、获取系统时间的方法GetDateTime()、重获系统时间方法OnReset()和计时器消息。

在计算时间日期的时候,每达到1秒的时候对second 进行加1,然后判断是否达到60秒,达到的话minute 就加1,同样的方法对hour 、day 、month 和year 进行计算,在对day 计数时,考虑到大小月和闰年,对day 进行加1时,判断是哪一月和是否为闰年。

在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。

在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。

在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。

2、 系统设计2.1 模块设计+CDateTimeDoc()+year +month +day +hour +minute +second +strCDateTimeDoc +CDateTimeView()+OnDraw()+Week()+RunTime()+Change()+GetDateTime()-flag -_sec1-_sec2CDateTimeView +OnInitDialog()+OnOK()-year -day -hour -minute -month -secondCSetting 依赖主要类图各模块关系图画出主程序及其主要模块的流程图:闹钟的时、分、秒数据的输入;当前时刻表盘时分秒针运主要模块1、时钟表盘的绘制、表盘的刻度,当前时刻表盘时分秒针运行的数据2.2 详细设计时钟组件的绘制1、打开 VC++6.0,新建一个 MFC AppWizard(exe),工程名称为shizhong。

选择单文档窗口,点击完成就可以创建成功。

2、添加WM_TIMER消息响应函数,加入Invalidate();//重绘窗口该函数的作用是使整个窗口客户区无效。

窗口的客户区无效意味着需要重绘。

在 View 类中的 OnDraw( )中对表盘进行绘制,输入绘制代码。

四、系统测试与调试分析1、系统测试2.调试分析程序的调试过程会发现很多设计程序过程中的漏洞,也会有很多bug出现,需要仔细的不断调试才能尽量的把程序调试的完美,我的程序调试的过程中出现的问题较多,现列举几个比较有代表性的,希望供其他人参考1、我最初想到的是设计出一个不依靠读取系统时间就能独立运行的时钟,但是,个人能力实在有限,设计了一段时间还是没有头绪,只能投机取巧的读取系统时间代替了,这样的话一些个性话的功能就不能够实现了,像把一分钟设置成120秒,每小时30分钟等2、目前的程序虽然能正常运行,但是,对于一些错误是不能反映出来的,像输入闹钟时间,如果输入的范围不对的话也不能给出提示3、闹钟的时间输入因为没有秒的限制,如果是当前时间的话,目前的程序会直接报时,应该可以改成当前时间不报时的五、运行效果1、windows系统 vc++6.0设计2、本程序不需要安装使用,直接运行即可弹出时钟对话框3、图1 时钟主界面图2 程序功能界面进入程序后会弹出图1界面显示系统时间,点击设置按钮可以出现图2功能列表图3 闹钟时间设置界面图4 倒计时时间设置界面打开功能列表可以选择各个功能,图3为选择闹钟功能弹出的对话框,图4为选择倒计时功能弹出的对话框六、程序清单(1): //视图类的构造函数CShejiView::CShejiView(){// TODO: add construction code hereCBitmap bmp;//定义一个位图类型的变量。

bmp.LoadBitmap(IDB_BITMAP1); ///加载位图m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷。

CTime curtime = CTime::GetCurrentTime();//同步系统时间。

m_hour = curtime.GetHour();m_minute = curtime.GetMinute();m_second = curtime.GetSecond();flag=0;//时钟正常工作状态flag2=1;//倒计时无效;hour=-1;minute=-1;set=0;}(2)//ondraw()函数进行绘制void CShejiView::OnDraw(CDC* pDC){CShejiDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCRect rect;GetClientRect(rect);///取得客户区域pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域,而我们在mbrushbackground里加载了位图,所以理所当然就变成了我们设置的图片//画表盘,标注刻度CRect client;GetClientRect(&client);int centerX = client.Width()/2;int centerY = client.Height()/2;int clockRadius = centerX > centerY ? centerY : centerX;//用较小的一个作为钟表的半径,避免半径太大矩形放不开clockRadius = clockRadius * 0.9;int keduDRadius = clockRadius * 0.85;int keduXRadius = clockRadius * 0.95;int hourRadius = clockRadius * 0.3;//时针半径int minuteRadius = clockRadius * 0.5;//分针半径int secondRadius = clockRadius * 0.7;//秒针半径//CPen clockPen(PS_SOLID, 2, RGB(0,0,255));CPen clockPen(PS_SOLID, 2, bpcolor);//配合下面的执行代码,使用自己定义的画笔来设置表盘的颜色CPen * oldPen = pDC->SelectObject(&clockPen);//恢复到原来的画笔//标注刻度for(int i = 0; i< 12; i++){pDC->MoveTo(centerX + keduDRadius * cos(i * 30 * PI / 180),centerY + keduDRadius * sin(i * 30 * PI / 180));pDC->LineTo(centerX + clockRadius * cos(i * 30 * PI / 180),centerY + clockRadius * sin(i * 30 * PI / 180));}for(int j = 0; j< 60; j++){pDC->MoveTo(centerX + keduXRadius * cos(j * 6 * PI / 180),//keduxradius是0.95,更加接近圆周,所以比起时针当然理所当然的更短 centerY + keduXRadius * sin(j * 6 * PI / 180));pDC->LineTo(centerX + clockRadius * cos(j * 6 * PI / 180),centerY + clockRadius * sin(j * 6 * PI / 180));}pDC->SelectObject(oldPen);//调节时,分,秒针角度显示的关系double secondRadians = m_second * 2 * PI / 60; //一个圆周是2pi,共有60秒,所以一秒是左边这个表达式,用的是弧度值double minuteRadians = m_minute * 2 * PI / 60 + secondRadians / 60;//秒针每动一格,其效果等同于分针动1/60格double hourRadians = m_hour * 2 * PI / 12 + minuteRadians*5 / 60;//依照所计算的角度画出时,分,秒针//CPen secondPen(PS_SOLID, 2, RGB(0,255,0));CPen secondPen(PS_SOLID,2,secondcolor);oldPen = pDC->SelectObject(&secondPen);pDC->MoveTo(centerX , centerY);//时针的起点在中心pDC->LineTo(centerX + double(secondRadius) * sin(secondRadians), centerY - double(secondRadius) * cos(secondRadians));pDC->SelectObject(oldPen);//CPen minutePen(PS_SOLID, 4, RGB(255,255,0));CPen minutePen(PS_SOLID, 4, minutecolor);oldPen = pDC->SelectObject(&minutePen);pDC->MoveTo(centerX , centerY);pDC->LineTo(centerX + double(minuteRadius) * sin(minuteRadians), centerY - double(minuteRadius) * cos(minuteRadians));pDC->SelectObject(oldPen);//CPen hourPen(PS_SOLID, 8, RGB(255,0,255));CPen hourPen(PS_SOLID,8,hourcolor);oldPen = pDC->SelectObject(&hourPen);pDC->MoveTo(centerX , centerY);pDC->LineTo(centerX + double(hourRadius) * sin(hourRadians), centerY - double(hourRadius) * cos(hourRadians));pDC->SelectObject(oldPen);//画表盘中心CBrush abrush(RGB(255,0,0));CBrush * oldbrush = pDC->SelectObject(&abrush);pDC->Ellipse(centerX - 8, centerY - 8 , centerX +8, centerY +8);//最左是圆心减8,最右是圆心加8pDC->SelectObject(oldbrush);//定义数字时钟的位置,显示当前时间CRect dianzibiao(centerX-52,centerY*6/15, centerX+52,centerY);CString shijian;char temp1[3], temp2[3], temp3[3];itoa(m_hour, temp1, 10);itoa(m_minute, temp2, 10);//ITOA功能,把一整书转换为字符串,10进制itoa(m_second, temp3, 10);shijian.Insert(0, temp1);//temp1用来保存小时,temp2用来保存分钟,temp3用来保存秒shijian += ":";//时和分之间的帽号if(m_minute < 10){shijian += "0";//如果分钟小于10,则在前面加上字符“0”,以用来显示“07”、“08”之类的形式}shijian += temp2;shijian += ":";if(m_second < 10){shijian += "0";//同理}shijian += temp3;//完成数字时钟显示当前时间pDC->SetBkMode (TRANSPARENT);pDC->SetTextColor(RGB(255,0,0));pDC->DrawText(shijian,&dianzibiao,DT_CENTER);//dianzibiao是一个矩形,shijian是我们转换后的cstring类型//设置文本的字体大小,颜色CString b("指针式时钟--陈庆敬");CFont abc;abc.CreateFont(15, // nHeight0, // nWidth0, // nEscapement0, // nOrientationFW_ULTRABOLD, // nWeightFALSE, // bItalicFALSE, // bUnderline0, // cStrikeOutANSI_CHARSET, // nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamilyb); // lpszFacenameCFont * oldFont = pDC->SelectObject(&abc);pDC->SetTextColor(RGB(255,0,0));CRect rectText1(centerX-52,centerY*3/2, centerX+52,centerY*2);pDC->DrawText(b, &rectText1, DT_CENTER);CString c("12");CRect rectText2(centerX-8,centerY-keduDRadius*10/9+10, centerX+8,centerY-(keduDRadius*10/9-14)+10);pDC->SetTextColor(RGB(255,0,0));pDC->DrawText(c, &rectText2, DT_CENTER);CString d("6");CRect rectText3(centerX-5,centerY+(keduDRadius*10/9-14-10), centerX+5,centerY+keduDRadius*10/9-10);pDC->DrawText(d, &rectText3, DT_CENTER);CString e("9");CRect rectText4(centerX-(keduDRadius*10/9-14)+10,centerY-7, centerX-keduDRadius*10/9+10,centerY+7);pDC->DrawText(e, &rectText4, DT_CENTER);CString f("3");CRect rectText5(centerX+(keduDRadius*10/9-14)-10,centerY-7, centerX+keduDRadius*10/9-10,centerY+7);pDC->DrawText(f, &rectText5, DT_CENTER);pDC->SelectObject(oldFont);//若定时时间到则提醒“时间到”if((m_hour==hour)&&(m_minute==minute)&&(set==0)){PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);//播放插入的格式为wav的音乐文件set=1;//这个函数使你能够获得当前应用程序的实例句柄。

相关文档
最新文档