指针式时钟设计报告

指针式时钟设计报告
指针式时钟设计报告

指针式时钟课程设计报告

课程名称:

设计题目:

专业班级:

姓名:

学号:

时间:

指导教师:

目录

1、基本功能描述 (2)

2、设计思路 (3)

2.1.程序流程图 (3)

2.2.流程图相应说明 (4)

3、软件设计 (6)

3.1.设计步骤 (6)

3.2.界面设计 (10)

3.3.关键功能的实现 (11)

3.3.1模拟时钟的显示 (11)

3.3.2加载位图作为时钟背景 (13)

3.3.3启动时钟 (14)

3.3.4设置时间 (15)

3.3.5暂停与开始 (15)

3.3.6整点报时 (16)

3.3.7秒表计时 (17)

3.3.8页面刷新及防抖动 (19)

4、课程设计问题总结 (20)

5、结论与心得 (21)

6、参考文献 (23)

7、附录........................................................................‥ (23)

7.1.调试报告 (23)

7.2.测试结果............................................................‥ (25)

1、基本功能描述

本课程设计的指针式时钟程序是基于MFC的windows应用程序设计,程序运行成功后,单文档界面会出现指针式时钟,数字式时钟和秒表计时器。指针式时钟圆表盘圆周上有分布均匀的12个大刻度,每个大刻度分别对应一个小时。每两个大刻度之间还有4个小刻度,刻度显示清晰,并且3、6、9、12刻度点还采用“Broadway”数字字体显示。时针,分针和秒针由粗细及长度各不相同的黑色绘成,其中时针采用镂空结构,秒针呈黑色细线状,尾部有实心圆点连接使得更容易观测。时钟界面为圆形,钟的内框为黑色,外框为宽度更粗的枚红色,并且钟面中心背景设计有一张图片,如此的结构设计使得本时钟更有特色。指针式的时钟表盘右面则是一个以数字式显示时间的数字钟,数字时钟表盘为矩形,字体亦采用深枚红色,其日期显示的格式是xxxx年xx月xx日,时间显示格式是xx:xx:xx,小时为24进制,分钟和秒是60进制。页面的菜单栏中设有时钟控制的栏目,用来对所显示的时间进行设置。用户可直接点击菜单栏中时钟控制的下拉列表的选项,或者直接按对应的快捷键。时钟整体外观简单时尚,使用方便快捷。页面的菜单栏设有时钟控制,可以对所显示的时间进行设置,用户可直接点击菜单栏中时钟控制的下拉列表的选项,或者直接使用快捷键。

本模拟时钟可实现如下功能:

(1)指针式的时钟和数字式的时钟显示的时间同步,且与计算机的系统时间一致,能显示的具体内容是年、月、日、时、分、秒。若想获得系统准确时间只需单击启动时钟。

(2)用户可自定义时间,单击设置时间后,在弹出的对话框中填入符合要求的日期时间,点击确定,两时钟自动跳到所设置的时间。

(3)用户可点击菜单栏中的时钟控制中的暂停,开始选项即可实现随时暂停,开始时钟。

(4)本时钟可实现整点报时,每整点时会有铃声播放出来并弹出消息框显示提示整点。

(5)鼠标左键单击秒表计时器的启动按钮,可开始秒表计时,点击停止,即停止计时。

2、设计思路

2.1程序流程图

2.2 流程图相应说明

(1)程序运行开始定义全局变量theAPP(),对构造函数及相应函数进行初始化,调用OnCreate()函数对时间变量进行初始化

(2)在void CHhlView::OnDraw(CDC* pDC)函数体中,通过调用GetClientRect()函数获区客户区,定义屏幕的大小并确定时钟中心坐标。接着定义画笔CPen()、画刷CBrush()设置钟面圆周的粗细和颜色(外围圆周是黑色,内围是粗的枚红色),然后调用ELLipse()函数确定钟面圆周大小。采用SetTextColor()函数定义输出字体颜色,并用CreateFont()函数定义输出文本字体,采用TextOut()函数输出字体。调用MoveTo(),LineTo()绘制表盘刻度及指针。通过得到在CHlView中定义变量Hour,Minute,Second的值,计算时针、分针、秒针在表盘刻度上的位置。无论何种指针,每次转动均以Pi/30弧度(1s的刻度)为基本单位,且都以表盘中心为转动圆心。圆心坐标为(CenterX,CenterY),端点坐标(X,Y)=(CenterX+指针长度*sinθ,CenterY+指针长度*cosθ)。对数字式时钟的输出控制可通过文本输出格式语句T_data.Format("%02年%02d月%02d 日",Year,Month,Day)来实现输出值的一一对应。

其中:时针偏转弧度θ=(Hour+Minute/60+Second/3600)*Pi/6

分针偏转弧度θ=(Minute+Second/60)*Pi/30

秒针偏转弧度θ=Second*Pi/30

指针偏转弧度θ代表指针顺时针方向相对于0刻度的弧度。

(3)首先在启动时钟前,时钟是不工作的。启动时钟后,在void CHhlView:: OnStartTime()函数体中调用SetTimer()函数设置时间间隔,每一秒钟产生一次时间消息。同时通过调用GetCurrentTime()函数获取系统时间,使得该时钟显示的时间与计算机的系统时间相一致。InvalidateRect(NULL,TRUE)更新窗口,指针开始转动。在Window中,定时器每隔1秒钟就会发出一个WM_TIMER消息。MFC的Windows类中提供了WM_TIMER消息处理函数OnTimer(),通过OnTimer()函数处理时间消息,对秒加一,并进行时间判断,计算正确时间,从而每1秒钟调用OnDraw()函数对界面进行更新,实现钟表走的过程。

(4)启动时钟后,用户可对时钟进行控制,单击菜单栏中的“时钟控制”选项,在下拉列表中自行选择(或者按对应的快捷键)。用户可单击“设置时间”选项,在弹出对话框中设置时间后点击确定,程序通过调用OnSetTime()处理该消息,对时间进行重新赋值后,然后再次调用OnDraw()函数进行刷新重绘,实现设置时间功能;单击“暂停”选项后,通过函数OnStopTime()处理消息,调用KillTimer()函数,终止定时器运行,达到暂停的效果;单击“开始”选项,通过调用函数OnEditRestart()处理消息,调用OnSetTime()函数,重新启动定时器,重新对时间进行更新后,调用OnDraw()函数实现指针的再次运转。当点击菜单

项中的“退出”或直接关闭画面后,程序停止运行。

3、软件设计

3.1.设计步骤

(1)首先在VC++6.0使用MFC AppWizard(exe)创建一个基于单文档的MFC工程,定义项目名称为Hhl后单击确定。在稍后弹出的MFC应用程序向导—步骤1对话框中选择应用程序的类型为单个文档,其它选项使用默认选项,直接点击完成,完成单文档工程的创建。

(2)右键点击在ClassView选项卡中的CHhlView,在弹出的列表中选择中的Add Member Variable…即直接采用向导定义int型的时间变量Year、Month、Day、Hour、Minute、Second和坐标变量CenterX,CenterY,及秒表变量watch,还有一个Double型的表示指针转动角度变量Radians,另外定义一个CString 型的表示输出文本字体类型变量strDigits。

(3)单击菜单栏中的“查看”选择“建立类向导”在CHhlView类中添加消息处理函数OnCreate( )、OnTimer( ),具体操作如下图1所示。然后分别单击Edit Code在hhlView.cpp中的int CLiuJianView::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中添加对日期及时间初始化的代码,将日期赋值为2015年7月5日,时间为0时0分0秒。并且在void CHhlView::OnTimer(UINT nIDEvent)函数中添加消息处理函数代码。详细源代码见压缩文件。

图1 添加消息处理函数OnCreate( )、OnTimer( )

(4)在FileView中的hhlView.cpp找到voidChhlView::OnDraw(CDC* pDC)函数,添加绘制时钟钟面、刻度、指针、数字时钟的代码。详细源代码见压缩文件。

(5)在Resource View选项卡中打开Menu,双击IDR_MAINFRAME,在菜

单项中添加一个“时钟控制”的菜单项,再在“时钟控制”的目录下分别添加“启动

时间”、“设置时间”、“暂停”、“开始”等选项,菜单效果图如图2所示。右击各选项选择“属性”设置对应的ID号及标题。标题中可加上&和一个字母(如&Q启

动时钟),然后打开Accelerator, 双击IDR_MAINFRAME,双击下面空白处,在弹出的对话框中填入对应的ID号及设置快捷键。然后右击选择“建立类向导”为菜单连接视图类ChhlView,选择个选项对应的消息处理函数,单击Edit Code在各消息处理函数中添加处理该消息的源代码。菜单设置各选项情况表如表1所示。

图2 菜单效果图

表1 菜单设置各选项情况表

(6)在Resource View选项卡中右击Dialog,选择“插入Dialog”,新建一个对话框,右击选择“属性”,将对话框ID设置为IDD_SETTIME_DIALOG,将标题改为设置时间。设计对话框界面风格,使包括修改系统时间年、月、日、时、分、秒六个编辑框,如图3所示。编辑这六个编辑框的属性,使控制ID分别为IDC_EDIT_YEAR、IDC_EDIT_MONTH、IDC_EDIT_DAY、IDC_EDIT_HOUR、IDC_EDITMINUTE、IDC_EDIT_SECOND。右击选择“建立类向导”选择Create a new class,将类名定义为CInputDlg,选择Member Variable选项卡,为该类添加六个成员变量分别对应六个编辑框中的输入变量,并且设置各变量的输入值范围,如图4所示。

图3 设置日期和事件对话框

图4 为CInputDlg类添加成员变量

(7) 给程序添加一个标题。找到hhlDoc.cpp中的BOOLCLiuJianDoc::OnNewDocument()函数,在其中加上语句:SetTitle("模拟时钟");。

(8) 对程序进行反复调试、更改,直至成功运行,完成所要求的全部功能。

3.2界面设计

模拟时钟程序的主界面如图5所示,指针式时钟在整个客户区的左边,数字式时钟在右边。指针式时钟界面自定义变量的具体情况如下表2所示。

图5 模拟时钟的主界面

表2 指针式时钟界面自定义变量参数设置

单击“设定时间”弹出的对话框如图3所示,具有6个编

辑框和相应的6个静态文本框,其中编辑框控件的主要参数对应情况如下表3所示。

表3 重新设定时间编辑框控件的主要参数

3.3关键功能的实现

3.3.1模拟时钟的显示

指针式时钟的显示主要是对界面的绘制,其实现代码在hhlView.cpp文件中。其中界面绘制代码在void CHhlView::OnDraw(CDC* pDC)函数中。采用SetTimer()产生周期的时间消息,调用OnDraw()函数对画面进行刷新重绘。每次重绘的时候,由于OnTimer()函数控制时间的改变而导致每次绘制显示的画面不同,从而实现时钟动态显示

(1)在CHhlView.cpp中的void CHhlView View::OnStartTime()函数中调用SetTimer()函数,SetTimer(1,1000,NULL);意义为指定计时器ID为1,且规定计时器的时间间隔为1000ms,即每隔1s调用一次OnTimer()函数NULL代表获取的是系统振荡时间。而OnTimer()函数中语句UpdateWindow();的作用是更新窗口、重绘时钟,故而,综合两函数得到的结果是每隔1s窗口即时重绘一次,实现时钟显示值的实时更新。

(2)OnDraw()函数首先采用GetClientRect()函数获取窗口大小并确定钟面中心坐标(CenterX,CenterY)。接着定义画笔CPen()、画刷CBrush()设置钟面圆周的粗细和颜色,然后调用Ellipse()函数确定钟面圆周的大小。采用SetTextColor()函数定义输出字体颜色,并用CreateFont()函数定义输出文本字体,采用TextOut()函数输出字体。调用MoveTo()和LineTo()绘制表盘刻度及指针。3、6、9、12刻度点采用“Broadway”数字字体显示。调用BitBlt()函数加载位图作为时钟的背景。对于时针,首先利用时间变量计算出时针偏转弧度。偏转弧度Radians

=((double)Hour +(double)Minute / 60.0+(double)Second / 3600)*Pi/6.0 ;然后定义要采用的颜色画笔:CPen HourPen( PS_SOLID, 10, RGB( 0, 0, 0) );

pDC->SelectObject ( &HourPen );采用MoveTo()定义时针起点

pDC->MoveTo( CenterX, CenterY );接着利用偏转角度及自定的时针长度计算出

时针的终点,利用LineTo()画出时针

pDC->LineTo(CenterX)(int)((double)80*sin( Radians)),CenterY-(int)((double)80*co s(Radians)));最后采用同样的原理对时针进行镂空处理:CPen

HourPen1(PS_SOLID,3,RGB(200,200,200)); pDC->SelectObject(&HourPen1);

pDC->MoveTo(CenterX+(int)((double)25*sin( Radians)),CenterY-(int)((double) 25*cos(Radians)));

pDC->LineTo(CenterX+(int)((double)75*sin( Radians)),CenterY-(int)((double)7 5*cos(Radians)));

对于分针、秒针的画法与时针类似,详细源代码见压缩文件。

而对于数字钟,首先编写数字钟输出日期的格式,T_date.Format( "%02d 年%02d月%02d日",Year,Month,Day);最后采用TextOut()对时间和日期进行输出。

3.3.2加载位图作为时钟背景

首先准备一张.BMP格式的图片,单击菜单栏的“插入”,选择“资源”,选择弹出的对话框中BitMap后单击“引入”,然后选择所准备的照片即可。然后在voidCHhlView::OnDraw(CDC*pDC)函数中加入如下代码(需加在画指针的代码前,否则会覆盖住指针):

CDC dcMemory;

dcMemory.CreatCompatibleDC(pDC);

CBitmap pOldBmp;

pOldBmp.LoadBitmap(IDB_BITMAP1);

dcMemory.SelectObject(&pOldBmp);

pDC->BitBlt(CenterX-100,CenterY-65,400,400,&dcMemory,1,1,SRCCOP Y);

3.3.3启动时钟

单击菜单项中的“启动时间”选项,产生消息,调用消息处理函数void CCHhlView::OnStartTime(),其中该函数中调用了SetTimer()函数,启动定时器,开始计时。同时利用GetCurrentTime()函数获得当前时间,对时间变量进行更改。具体代码如下:

void CHhlView::OnStartTime()

{

SetTimer(1,995,NULL);//安装一个计时器

CRect rect;

GetClientRect(rect);///取得客户区域

CTime Time = CTime::GetCurrentTime(); //获取系统时间

Year=Time.GetYear();

Month=Time.GetMonth();

Day=Time.GetDay();

Hour=Time.GetHour();

Minute=Time.GetMinute();

Second=Time.GetSecond();

}

3.3.4设置时间

单击菜单项中的“启动时间”选项,产生消息,调用消息处理函数void

CCHhlView::OnStartTime(),其中该函数中调用了SetTimer()函数,启动定时器,开始计时。同时利用GetCurrentTime()函数获得当前时间,对时间变量进行更改。具体代码如下:

void CHhlView::OnStartTime()

{

SetTimer(1,995,NULL);//安装一个计时器

CRect rect;

GetClientRect(rect);///取得客户区域

CTime Time = CTime::GetCurrentTime(); //获取系统时间

Year=Time.GetYear();

Month=Time.GetMonth();

Day=Time.GetDay();

Hour=Time.GetHour();

Minute=Time.GetMinute();

Second=Time.GetSecond();

}

3.3.5暂停与开始

单击菜单项中的“暂停”后,程序调用void CHhlView::OnStopTime()函数,采用KillTimer()函数终止定时器。单击“开始”选项后,程序调用void CHhlView::OnEditRestart()函数,采用SetTimer函数重启定时器。具体代码如下:void CHhlView::OnStopTime()

{

KillTimer(1); //停止定时器

}

void CHhlView::OnEditRestart()

{

SetTimer(1,995,NULL);

CRect rect;

GetClientRect(rect);///取得客户区域

}

3.3.6整点报时

每到整点时会有铃声播放出来,并弹出消息框显示提醒整点。首先准备一首.Wav格式的铃声,在工程所存文件夹中的Debug文件夹中新建一个sound文

件夹,将铃声存进去。然后在hhlView.cpp中添加三个头文件,分别为#include、#pragma comment(lib,"winmm.lib")、#include "mmsystem.h" 。最后在void CHhlView::OnTimer(UINT nIDEvent)函数中添加如下代码:

if( Minute==0 && Second==0 ) //整点报时

{

PlaySound("sound//zhong.wav",NULL, SND_FILENAME | SND_ASYNC );

AfxMessageBox("亲~整点啦!");

}

3.3.7秒表计时

1)在CHhlView::CHhlView()设定初始化值即watch=0,并在OnDraw函数中添加秒表的两个按钮位置变量。

//秒表的按钮变量

CRect m_WatchStart;

CRect m_WatchStop;

2)设定秒表计数器及按钮位置

//设定秒表计数器及按钮位置

m_WatchStart=CRect(670,310,750,340); //启动

m_WatchStop=CRect(780,310,850,340); //停止

3)在OnDraw函数中添加秒表显示代码。

//秒表显示

pDC->Rectangle(610,220,880,370);

pDC->TextOut(730,220,"秒表");

int minSec=watch%100;

int Sec=(watch/100)%60;

int Min=(watch/100)/60;

CString m_Time;

m_Time.Format("%02d:%02d:%02d",Min,Sec,minSec);

pDC->TextOut(720,270,m_Time);

pDC->Rectangle(&m_WatchStart);

pDC->Rectangle(&m_WatchStop);

pDC->TextOut(m_WatchStart.left+18,m_WatchStart.top+5,"启动");

pDC->TextOut(m_WatchStop.left+18,m_WatchStop.top+5,"停止");

4)秒表定时器消息处理

//秒表定时器消息处理

if(nIDEvent==2)

{

watch++;

InvalidateRect(m_WatchShow,false);

}

5)添加鼠标消息处理函数。进入ClassWizard的Message Map选项卡,在CHhlView类的Message列表框中选择鼠标消息WM_LBUTTONDOWN,按下Add Function按钮添加成员函数OnLButtonDown。如图6所示:

图6.添加OnLButtonDown鼠标处理函数

在该函数中添加控制代码如下:

void CHhlView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CRect m_WatchStart;

CRect m_WatchStop;

m_WatchStart=CRect(670,310,750,340); //启动

m_WatchStop=CRect(780,310,850,340); //停止

if(m_WatchStart.PtInRect(point))

{

watch=0;

SetTimer(2,10,NULL);

}

if(m_WatchStop.PtInRect(point))

{

KillTimer(2);

}

CView::OnLButtonDown(nFlags, point);

}

3.3.8页面刷新及防抖动

1)页面刷新

在定时器1函数中添加表盘时钟和数字时钟的刷新代码。

CRect m_Watchpan;

CRect m_Watchzhong;

m_Watchpan=CRect(CenterX-150,CenterY-150,CenterX+150,CenterY+150) ;

m_Watchzhong=CRect(620,80,870,210);

InvalidateRect(m_Watchpan,false);

InvalidateRect(m_Watchzhong,false);

2)在定时器2中添加秒表时间显示区域的刷新函数

CRect m_WatchShow;

m_WatchShow=CRect(720,270,800,340); //刷新区域

InvalidateRect(m_WatchShow,false);

客户区绘图比较多,颜色与背景色相差比较大时,客户区会出现抖动。这是由于当屏幕刷新时,默认将窗口用系统背景颜色填充,即用白色将窗口刷一遍,然后再在客服区画上图形,当颜色相差较大时,人眼会形成暂离,便会感觉抖动。我们采用一种最简单的方法,即重载OnEraseBkgnd()函数。单击菜单栏中的“查看”选择“建立类向导”在CHhlView类中添加消息处理函数WM_ERASEBKGND,点击Edit Code,在BOOL CHhlView::OnEraseBkgnd(CDC* pDC) 函数中添加语句return TRUE;将CHhlView::OnEraseBkgnd(pDC);语句注释掉。

BOOL CHhlView::OnEraseBkgnd(CDC* pDC)

{

return TRUE;

//return CView::OnEraseBkgnd(pDC);

}

4.课程设计过程中问题总结

1.程序中如何实现时钟时间与计算机系统时间保持一致?

答:程序是通过调用GetCurrentTime()来获取系统时间,由SetTimer()函数设定准确的发出时间消息的间隔,然后由OnTimer()对时间消息响应的同时对时间进行调整,从而使时间可以与系统时间同步。

2.时钟运行后点击暂停,然后再点击开始,时钟指针是如何变化的?该过程怎么实现?

答:模拟时钟显示的时间与系统时间相一致,是通过重新获取系统时间实现的。

3.说明SetTimer()函数、WM_TIMER消息和OnTimer()函数的调用关系?

答:MFC的Windows类提供了WM_TIMER消息处理函数OnTimer(),应在该函数内进行更新时间窗格的工作,利用ClassWizard给CmainFrame类加入WM_TIMER消息处理函数OnTimer(),CMainFrame:: OnTimer()函数是在系统发给框架窗口消息WM_TIMER时调用的,在CMainFrame::OnCreate()函数内调用CWnd:: SetTimer()以安装一个计时器,SetTimer()的第一个参数指定计时器的ID,第二个参数规定了计时器的时间间隔,如间隔是1s,则每隔1s就调用一次OnTimer()函数,第三个参数NULL表示由系统调用OnTimer()函数。

4.重载OnEraseBkgnd()函数,禁止画刷清除背景,会使每次画出的图覆盖在原图上,这里可以采用双缓冲的方式来避免这一问题。

5.结论与心得

经过两个多星期的时间,课程设计所要求设计的指针式时钟便成功完成了。它能显示指针式和数字式的时钟,并且与计算机系统时间保持一致,也可以打开菜单项自行设置时间。此外,它还有秒表计时功能。整个页面简洁清晰,方便用户读取,且操作简单,符合课程设计中的要求。通过本次课程设计,我们对日常生活中的时钟的工作原理有了比较深入的了解,并让我们学会了在Visual C++ 6.0环境下,编写MFC的Windows应用程序的基本操作和方法。MFC定义了一个标准的应用程序框架,为我们提供了大量可重用代码,隐藏了程序设计中的许多复杂工作,在程序编写中,通过使用原有的类和派生新的类,各种控件的添加,类的连接,菜单设计,消息添加,函数编写,使我们对面向对象程序设计有了深刻认识,掌握了程序调试方法,大大提高了我们的编程能力和动手能力。

在指针式时钟的绘制过程之中,我们要考虑表盘坐标的定位,时钟的时针、分针和秒针的长短、粗细以及颜色的选取,以便指针重合时用户也可轻易辨认,还要考虑指针式的时钟与数字式的时钟与系统时间保持一致。在不断的改正错误

和调试的过程之中,所要求设计的指针式时钟总算能成功运行。通过这次课程设计,也使我认识到理论与实际相结合的重要性,同时基本上能够掌握Visual C++编程中的对话框编程的步骤,真的是受益匪浅。这次的设计成果也让我体会到了在编程方面工作流程的重要性、心思缜密的必要性,同时也让我对课堂上的知识更加深刻的理解,在课程设计期间我们还充分运用了网络和图书馆里的资源,参考了许多作品和相关编程知识,这些工作也让我们对更多的程序设计有了初步的概念,能为将来的学习工作打下良好的基础。

6、参考文献

[1] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005.

[3]黄维通,贾续涵.Visual C++面向对象与可视化程序设计.清华大学出版社,2011.

[4]四维科技,赵辉,叶子青. Visual C++系统开发实例精粹.人民邮电出版社,2006.

[5]龙腾科技. Visual C++6.0循序渐进教程.北京希望电子出版社,2005.

[6] 李凤霞,薛静峰,黄都培.Visual C++6.0实用教程.电子工业出版社,2001.

7、附录

7.1调试报告

程序写好后对其进行调试,出现以下错误:

1) error C2065: 'sin' : undeclared identifier,error C2065: 'cos' : undeclared identifier程序中没有定义sin,cos标示符,经分析增加#include "math.h"头文件后,该错误消失。

2) error C2065: 'Pi' : undeclared identifier 程序中Pi没有定义,增加#define Pi

3.141592652后,该错误消失。

3)error C2065: 'CInputDlg' : undeclared identifier程序中CInputDlg没有定义,经分析是由于在ChhlView类中调用了CInputDlg类,增加#include "InputDlg.h"头文件后,错误消失。

4) warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data程序出现警告,经检查后发现是数据类型设置出现问题,将语句

pDC->MoveTo( CenterX+175*sin(Pi/6*TT[i]), CenterY-175*cos(Pi/6*TT[i]));修改

pDC->LineTo(CenterX+(int)((double)75*sin( Radians)),CenterY-(int)((double)75*co s(Radians)));后,错误消失。

5) 程序最终运行正确,并可以实现各项功能,但是画面在不断跳动,最后

重载OnEraseBkgnd()函数,采用禁止清除背景的方法,解决了背景抖动的问题。

6) 时钟一切运作正常后,但是经过长时间运行后,会与系统时间出现稍微

的偏差,经过分析,错误出在定时器上。由于定时器起初定时1秒,再加上程序反应时间,时间画面更改时间略大于1秒,最后减小SetTimer(1,1000,NULL)中的定时时间间隔后,SetTimer(1,995,NULL),使得问题得到了改善。

7)调试运行后发现点击秒表计时器的启动按钮框不响应。这是因为绘制按钮位置的代码定义在OnDraw函数中,但在OnLButton函数中却无法调用这段代码,导致消息和函数无法绑定,所以不响应,将这两个按钮位置的代码重新定义在OnLButton函数中问题解决。

8)启动秒表计时器后,三个表盘区域抖动的很厉害,是因为刷新函数都定义在定时器2中,启动定时器2时同时刷新,所以指针式表盘和数字变盘的刷新函数应写在定时器1函数中,与秒表计时器区分开。

7.2测试结果

图7. 时钟运行效果图与电脑桌面小工具库里时钟显示时间同步

图8. 自定义时间

(源代码见附件)

实时时钟设计实验报告

实验报告

源代码: #pragma sfr //使用特殊功能寄存器 #pragma EI //开中断 #pragma DI //关中断 #pragma access //使用绝对地址指令 #pragma interrupt INTTM000 Time //定义时间中断函数为Time #pragma interrupt INTKR OnKeyPress //定义按键中断为OnKeyPress #pragma interrupt INTP5 OnKeyOver //定义INT中断为OnKeyOver void Init_Led(); void InitKey_INTKR(); void Init_Lcd(); void Init_Inter(); void LightOneLed(unsigned char ucNum); void LightOff(); int Count_Day(int month); char i=0; //定义变量i,是切换时间的标志 int key=0; //定义key=0 int temp=1; //用于存放当前月的天数 int temp1=1; int second=0; //默认的秒second=0 int minute=0; //默认的分minute=0 int hour=12; //默认的时hour=12 int day=1; //默认的天day=1 int month=5; //默认的月month=5 int year=2014; //默认的年year=2014 int c_hour=1; //默认的闹钟时=1 int c_minute=1; //默认的闹钟分=1 int buffs[2]; //秒的数码显示缓存区 int buffm[2]; //分的数码显示缓存区 int buffh[2]; //时的数码显示缓存区 int buffday[2]; //天的数码显示缓存区 int buffmonth[2]; //月的数码显示缓存区 int buffyear[4]; //年的数码显示缓存区 int buffmd[4]; //月,天的数码显示缓存区 int buffhm[4]; //时,分的数码显示缓存区 int buffms[4]; //分,秒的数码显示缓存区 int buffch[2]; //闹钟时的数码显示缓存区 int buffcm[2]; //闹钟分的数码显示缓存区 unsigned char Que = 0; //INT中断中间变量 int LCD_num[10]={0X070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0700,0x070f,0x070b};// 数字0~~9的显示码 unsigned char Scond; //…………………………延时函数1……………………// void Delay(int k){ i nt i,j; f or(i=0;i

数字时钟设计实验报告

电子课程设计题目:数字时钟

数字时钟设计实验报告 一、设计要求: 设计一个24小时制的数字时钟。 要求:计时、显示精度到秒;有校时功能。采用中小规模集成电路设计。 发挥:增加闹钟功能。 二、设计方案: 由秒时钟信号发生器、计时电路和校时电路构成电路。 秒时钟信号发生器可由振荡器和分频器构成。 计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。 三、电路框图: 图一 数字时钟电路框图 译码器 译码器 译码器 时计数器 (24进制) 分计数器 (60进制) 秒计数器 (60进制) 校 时 电 路 秒信号发生器

四、电路原理图: (一)秒脉冲信号发生器 秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。由振荡器与分频器组合产生秒脉冲信号。 ?振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz 脉冲。 ?分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能 扩展电路所需要的信号,选用三片74LS290进行级联,因为每片为1/10分频器,三片级联好获得1Hz标准秒脉冲。其电路图如下: 图二秒脉冲信号发生器 (二)秒、分、时计时器电路设计 秒、分计数器为60进制计数器,小时计数器为24进制计数器。 ?60进制——秒计数器 秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。当计数到59时清零并重新开始计数。秒的个位部分的设计:利用十进制计数器CD40110设计10进制计数器显示秒的个位。个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位功能。利用74LS161和74LS11设计6进制计数器显示秒的十位,当十位计数器由0增加到5时利用74LS11与门产生一个高电平接到个位、十位的CD40110的清零端,同时产生一个脉冲给分的个位。其电路图如下:

数字电子技术课程设计篮球比赛30s计时器

一、设计目的 1.培养理论联系实际的正确设计思想,训练综合运用已经学过的理论和生产实际知识去分析和解决工程实际问题的能力 2.学习较复杂的电子系统设计的一般方法,了解和掌握模拟、数字电路等知识解决电子信息方面常见实际问题的能力,由学生自行设计、自行制作和自行调试。3.运行基本技术训练,如基本仪器仪表的使用,产业元器件的识别、测量、熟练运用的能力,掌握设计资料、手册、标准和规以及使用仿真软件、实验设备进行调试和数据处理等。 4.培养学生的创新能力。 二、设计要求 1.30秒计时器具有显示30秒的计时功能。 2.系统设置外部操作开关,控制计时器的直接置数、清零、启动、和暂停功能。3.计时器为30秒递减计时时,其计时间隔为1秒。 4.当计时器递减计时到零时,数码显示器不能灭灯,LED变亮报警。 三、总体设计 本实验的核心部分是要设计一个30s计数器,并且对计数结果进行实时显示,同时要实现设计任务中提到的各种控制要求,因此该系统包括秒脉冲发生器、计数器、译码显示电路、辅助时序控制电路(简称控制电路)和报警电路等5个部分构成。其中,计数器和控制电路是系统的主要部分。计数器完成30s计时功能,而控制电路具有直接控制计数器的启动计数、暂停、连续计数、译码显示电路的显示和灭灯功能。为了满足系统的设计要求,在设计控制电路时,应正确处理各个信号之间的时序关系。在操作直接清零开关时,要求计数器清零,数码显示器显示零。当启动开关闭合时,控制电路应封锁时钟信号CP,同时计数器完成置数功能,译码显示电路显示30s字样;当启动开关断开

时,计数器开始计数;当暂停、连续开关拨在暂停位置上时,计数器停止计数,处于保持状态;当暂停、连续开关拨在连续时,计数器继续递减计数。系统设计框图如图下图所示。 图1 四、单元电路设计 1、译码显示电路 用发光二极管(LED )组成字型来来显示数字。这种数码管的每个线段都是一个发光二极管,因此也称LED 数码管或LED 七段显示器。因为计算机输出的是BCD 码,要想在数码管上显示十进制数,就必须先把BCD 码转换成 7 段字型数码管所要求的代码。我们把能够将计算机输出的BCD 码换成 7 段字型代码,并使数码管显示出十进制数的电路称为“七段字型译码器”因此在本次的设计中我们采用了常用的74LS48。 在数字测量仪表和各种数字系统中,都需要将数字量直观地显示出来,一方面供人们直接读取测量和运算的结果;另一方 面用于监视数字系统的工作情况。因此,数字显示电路是许多数字设备不可缺少的部分。数字显示电路通常由译码器、驱动 器和显示器等部分组成,如下图所示。下面对显示器和译码驱动器分别进行介绍。

基于单片机的倒计时器(计数器)课程设计)

湖南文理学院课程设计报告 课程名称:单片机原理课程设计 学院:电信学院 专业班级:自动化07101 学生姓名: 指导老师: 完成时间: 报告成绩:

倒计时器设计

目录 目录 (1) 摘要 (3) ABSTRACT (4) 第一章设计要求与方案确定 (5) 1.1设计意义 (5) 1.2设计要求 (5) 1.3方案确定 (5) 第二章硬件电路 (6) 2.1单片机概述 (6) 2.1.1 单片机基础 (6) 2.1.2单片机与单片机系统 (7) 2.1.3 单片机的产生与发展 (7) 2.2MCS-51系列单片机介绍 (8) 2.2.1 80C51 芯片介绍 (8) 2.2.3 最小系统 (9) 2.2.4 定时与中断的概念 (10) 2.4LED显示电路设计与器件选择 (12) 2.4.1.LED显示器的选择 (13) 2.4.2LED驱动芯片选择 (13) 2.5按键电路设计 (13) 2.6蜂鸣器电路的设计 (14) 第三章倒计时器的设计 (15) 3.1倒计时器系统设计方案及框图 (15) 3.2程序设计 (15) 3.2.1主程序设计 (15) 3.2.2倒计时模块设计 (17) 3.2.3键盘扫描数码管显示程序 (17)

第四章倒计时器设计仿真 (18) 4.1设置倒计时初值 (18) 4.2开始倒计时 (18) 4.3倒计时结束并报警 (18) 总结 (20) 参考文献 (21) 致谢 (22) 附录1 倒计时器设计源程序 (23) 附录2 所用元器件清单 (23)

摘要 近年来随着计算机在社会领域的渗透,单片机的应用正在不断的走向深入,同时带动传统控制检测日新月异更新。在实时控制和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 本系统由单片机系统、矩阵式键盘、蜂鸣器和LED数码管显示系统组成。装置利用AT89C51单片机与74LS245驱动器驱动LED数码管显示。通过按键控制设定倒计时时间,再通过中断控制系统开始倒计时。当倒计时时间到时,由P1.0口驱动蜂鸣器发声报警。为了简化电路,降低成本,采用以软件为主的的接口方法。 该系统实用、功能灵活多样,可以对计时时间进行实时控制,可以广泛的应用于各种场所的控制设备。 【关键词】单片机;LED数码管显示器;倒计时;报警

单片机电子时钟课程设计报告报告

目录 1、引言 (3) 2、总体设计 (4) 3、详细设计 (5) 3.1硬件设计 (5) 3.2软件设计 (10) 4、实验结果分析 (26) 5、心得体会 (27) 6、参考文献 (27)

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 关键词:单片机AT89C51

1.引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

课程设计报告-篮球30秒倒数计时器

课程设计报告-篮球30秒倒数计时器

信电学院 课程设计说明书(2011 /2012学年第二学期) 课程名称:电子技术课程设计 题目:篮球30秒倒数计时器 专业班级:自动化3班 学生姓名:程江峰 学号:100410317 指导教师:马志钢 设计周数:两周 课设成绩: 2012年7月5日

目录 一、课程设计摘要-------------------------------------------- 二、课程设计正文 1、课程设计任务与要求 2、方案设计(系统控制电路框图及说明) 3、元器件详细介绍 4、系统原理图、印制板图及其说明 5、安装、调试及性能测试与分析 6、课程设计总结及心得 三、课程设计总结 四、附录(PCB图)

五、参考文献 一、课程设计摘要 通过电子技术课程设计的综合训练,培养独立思考、分析问题、解决问题的能力,培养工程实践能力、创新能力和综合设计能力。根据所学模拟电子技术、数字系统与逻辑设计的理论,对模拟电子线路、数字电子线路以及模拟与数字综合电子线路进行设计、安装与调试。 定时电路是数字系统中的基本单元电路,它主要由计数器和振荡器组成。定时电路主要利用分立元件,中规模集成器件555定时器。用555定时器实现的定时电路主要应用单稳态触发器原理,实现定时器的功能。在实际工作中,定时器的应用场合很多,例如,篮球比赛规则中,队员持球时间不能超过30秒,就是定时电路的一种具体应用。 篮球竞赛30秒定时器电路主要利用555定时器产生时钟脉冲,触发计数器进行从30至00倒计数,并将计数结果通过译码电路和数码管显示,当计数器减至00时,报警电路进行报警。 二、课程设计正文 1、课程设计任务与要求30秒计时功能,两位数字显示,计时间隔为1秒。完成硬件制作实现30秒减计数,每次减计时结束后,蜂鸣器报警提示,数码管显示00;电路需设置外部开关,可使定时器直接复位,并具有启动计时、暂停/连续计时功

篮球竞赛24秒计时器设计-

学号: 课程设计 题目 学院 专业 班级 姓名 指导教师

年月日

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 篮球24秒记时器的设计与制作 初始条件: (1)具备显示24秒记时功能 (2)计时器为递减工作,间隔为1S (3)递减到0时发声光报警信号 (4)设置外部开关,控制计时器的清0,启动及暂停 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)设计任务及要求 (2)方案比较及认证 (3)系统框图,原理说明 (4)硬件原理,完整电路图,采用器件的功能说明 (5)调试记录及结果分析 (6)对成果的评价及改进方法 (7)总结(收获及体会) (8)参考资料 (9)附录:器件表,芯片资料 时间安排: 6月16日~6月19日:明确课题,收集资料,方案确定 6月19日~6月21日:整体设计,硬件电路调试 6月21日~6月24日;报告撰写,交设计报告,答辩 指导教师签名:2014年 6月日

前言 电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。 在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机、还可以用来做为各种药丸,药片,胶囊在指定时间提醒用药等等,由此可见计时器在现代社会是何其重要的。 篮球作为一项全民健身项目,已有一定的历史。在中国,篮球很盛行,篮球比赛也日趋职业化。篮球比赛中有一项违例时间要用倒计时器,目前多数采用的是24秒制。有需要就会有市场,因此设计一款24秒计时器是非常有必要也非常有前景的。 该计时器要有递减计时及报警功能。因此符合比赛中违例判罚的需要。 在NBA比赛中,规定了球员的持球时间不能超过24秒,否则就犯规了。本课程设计的“篮球竞赛24秒计时器”,可用于篮球比赛中,用于对球员持球时间24秒限制。一旦球员的持球时间超过了24秒,它自动的报警从而判定此球员的犯规。 本设计主要能完成:显示24秒倒计时功能;系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;计时器为24秒递减计时其计时间隔为1秒;计时器递减计时到零时,数码显示器不灭灯,同时发出光电报警信号等。 整个电路的设计借助于proteus仿真软件和数字逻辑电路相关理论知识,并在proteus下设计和进行仿真,得到了预期的结果。

实时时钟实验报告

嵌入式系统开发实验报告 实验四:实时时钟实验 班级:应电112 姓名:张志可 学号: 110415151 指导教师:李静 实验日期: 2013年9月25日

实验四:实时时钟实验 一、实验目的 1. 了解实时时钟的硬件控制原理及设计方法。 2. 掌握 S3C2410X 处理器的 RTC 模块程序设计方法。 二、实验设备 硬件:Embest ARM 教学实验系统,ULINK USB-JTAG 仿真器套件,PC 机。 软件:MDK 集成开发环境,Windows 98/2000/NT/XP。 三、实验原理 1. 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的 RTC,还有大容量的存储器、温度传感器和 A/D 数据采集通道等,已成为集 RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。 RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如 I2C、SPI、MICROWIRE 和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。 2. S3C2410X 实时时钟(RTC)单元 S3C2410X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。 四、实验内容 学习和掌握 Embest ARM 教学实验平台中 RTC 模块的使用,编写应用程序,修改时钟日期及时间的设置,以及使用 EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。

单片机完整电子时钟设计报告.doc

目 一.作品介???????????????????????????????? 2 二.片机系原理及工作原理描述????????????????????? 2 三.程中碰到的及解决方法????????????????????? 4 四.数据及差分析??????????????????????????? 4 五.?????????????????????????????????? 5 六.程序模框?????????????????????????????? 5 七.程序清????????????????????????????????7

单片机的个性化电子钟设计报告 一.作品简介 该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控, 4 位 LED 数码显示,分别显示“小时:分钟”。该作品主要用于24 小时计时显示,能整时报时 ,能作为秒表使用,能定时闹铃 1 分钟。 使用方法 :开机后显示日期,学号,时钟在00:00:00 起开始计时。 (1)长按进入调分状态 :分单元闪烁 ,按加 1,按减 1.再长按进入时调整 状态 ,时单元闪烁 ,加减调整同调分 .按长按退出调整状态。 (2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加 1,再按为时调 整 ,按时加 1,按调闹钟结束.在闹铃时可按停闹,不按闹铃 1 分钟。 (3)按下进入秒表状态:再按秒表又启动,按暂停 ,再按秒表清零 ,按 退出秒表回到时钟状态。 二.单片机系统原理图及工作原理描述 (1)总原理图 如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。

电子技术课程设计 篮球30s计时器的设计

课程设计名称:电子技术课程设计 题目:篮球竟赛30s计时器设计 专业:电气工程与自动化 班级:电气09-2 姓名:张瑞 学号:09005040229

摘要 本课程设计是脉冲数字电路的简单应用,设计了篮球竞赛30秒计时器。此计时器功能齐全,可以直接清零、启动、暂停和连续以及具有光电报警功能,同时应用了七段数码管来显示时间。此计时器有了启动、暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。本设计完成的中途计时功能,实现了在许多的特定场合进行时间追踪的功能,在社会生活中也具有广泛的应用价值。 此计时器的设计采用模块化结构,主要由以下3个组成,即计时模块、控制模块、以及译码显示模块。在设计此计时器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。此电路是以时钟产生,触发,倒计时计数,译码显示为主要功能,在此结构的基础上,构造主体电路和辅助电路两个部分。 关键字计时器 ; 光电报警 ; 模块化

前言 人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。随着工业水平的进步和人民生活水平的提高,在很多领域都需要几个甚至上百个定时电路去控制多项操作,从而实现工业生产的自动化,最终提高劳动生产率促进经济的发展。定时器在实际工作中用到的场合很多,它成为今天工业控制领域、通讯设备、信息处理以及日常生活中最广泛使用的电路之一,在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机、还可以用来做为各种药丸,药片,胶囊在指定时间提醒,用于各种竞赛的计时器、竞赛用定时器、数控电梯、数控机床、交通灯管理系统、各种智能医疗器械等,定时器是家用电器中的常用产品。 随着电子技术的高速发展和计算机技术的普遍应用,电子设计也越来越普遍地应用于整个电子行业中。电子设计是人们进行电子产品设计、开发和制造过程中十分关键的一步,其核心就是电子电路的设计。电子设计自动化(EDA)是在电子产品向更复杂、更高级,向数字化、集成化、微型化和低耗能方向发展过程中逐渐产生并日趋完善的电子设计方法,在这种方法中,设计过程的大部分工作(特别是底层工作)均由计算机自动完成,是电子技术发展历程中产生的一种先进的设计方法,是当今电子设计的主流。 在篮球比赛中,规定了球员的持球时间不能超过30秒,否则就犯规了。本课程设计的“篮球竞赛30秒计时器”,可用于篮球比赛中,用于对球员持球时间30秒限制。一旦球员的持球时间超过了30秒,它自动的报警从而判定此球员的犯规。 定时器的应用范围极为广泛,其中首推由555构成的定时电路。集成器件555芯片是一种模拟电路和数字电路相结合的中规模集成电路,其逻辑功能强,使用灵活,可方便组成多种逻辑功能电路,能够更加简单更加快捷的实现定时功能,满足在日常生产和生活中的要求,所以555定时器电路在各个领域的应用及其广泛,在数字电路中占有重要位置,受到人们的普遍重视。本设计的秒脉冲发生器就是用由555构成的定时电路。

数字时钟设计实验报告47686

word专业整理 电子课程设计 题目:数字时钟

数字时钟设计实验报告 一、设计要求: 设计一个24小时制的数字时钟。 要求:计时、显示精度到秒;有校时功能。采用中小规模集成电路设计。 发挥:增加闹钟功能。 二、设计方案: 由秒时钟信号发生器、计时电路和校时电路构成电路。 秒时钟信号发生器可由振荡器和分频器构成。 计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。 三、电路框图: 图一 数字时钟电路框图 四、电路原理图: (一)秒脉冲信号发生器 秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质 译码器 译码器 译码器 时计数器 (24进制) 分计数器 (60进制) 秒计数器 (60进制) 校 时 电 路 秒信号发生器

量。由振荡器与分频器组合产生秒脉冲信号。 ?振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz 脉冲。 ?分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能 扩展电路所需要的信号,选用三片74LS290进行级联,因为每片为1/10分频器,三片级联好获得1Hz标准秒脉冲。其电路图如下: 图二秒脉冲信号发生器 (二)秒、分、时计时器电路设计 秒、分计数器为60进制计数器,小时计数器为24进制计数器。 ?60进制——秒计数器 秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。当计数到59时清零并重新开始计数。秒的个位部分的设计:利用十进制计数器CD40110设计10进制计数器显示秒的个位。个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位功能。利用74LS161和74LS11设计6进制计数器显示秒的十位,当十位计数器由0增加到5时利用74LS11与门产生一个高电平

24小时制时、分、秒计时器设计报告

时钟仿真实验报告 一、任务及要求 用51单片机设计时、分、秒计时器,具体要求如下。 1、具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时-分-秒”; 2、用Proteus设计仿真电路进行结果仿真; 3、4人组成设计小组完成,小组成员有明确分工,1人负责总体方案设计及报告撰写,2人负责功能模块函数设计,1人负责仿真电路设计及调试。 4、完成程序设计、仿真电路设计、结果仿真,完成报告并上传空间课程栏目中的课程设计报告子栏目中。 二、设计方案: 1、总体方案构思:通过使用定时计数器以及中断溢出,50ms中断溢出一次,溢出20次为1S。所以当定时溢出计数变量temp自加20次时计数变量miao自加1,直到加到第60次时miao(秒)清零,并且计数变量fen自加1,直到fen加到第60次时,fen(分)清零且shi(时)

自加1,直到shi加到第24次时,shi(小时)清零。最后经译码后,通过扫描显示模块程序将得到的时钟结果以动态显示的方式显示在8位一体共阳数码管上。 2、程序功能模块说明:此时钟程序包括时钟中断计时、延时函数、显示函数等模块 3、仿真电路构成:此次时钟程序的仿真电路的设计较简单,硬件部分主要有AT89C52单片机芯片一块、八位一体LED共阳数码管一块、8个普通电阻以及8个逻辑非门。其中8个普通电阻用作P0口上拉电阻。另外,由于数码管是共阳的,而实际程序中的位码是以低电平有效的,所以八个逻辑非门用来取反单片机输出的位码。 4、时钟计时程序设计思想分析:采用定时计数器T0,工作方式1,定时50ms,再对定时溢出中断次数计数,若溢出了20次则时间为1秒! 5、函数模块程序流程图:

24秒计时器课程设计

电子课程设计篮球24秒计时器 班级:自动化092201H班 姓名:陈鹏飞 学号:200922060101

目录 序言 (3) 一、设计任务及要求 (3) 二、总体框图 (3) .......................................................................................................... .......................................................................................................... .......................................................................................................... 三、选择器件 (4) ........................................................................................................... .......................................................................................................... 四、功能模块 (8) 五、总体电路设计 (12) 六、参考文献 (14) 七、心得体会 (14)

序言 篮球比赛中除了有总时间倒计时外,为了加快比赛的节奏,新的规则还要 求进攻方在24秒内有一次投篮动作,否则视为违例。本人设计了一个篮球比赛计时器,可对比赛总时间和各方每次控球时间既是。该计时器采用按键操作,LED 显示,非常实用,此计时器也可作为其他球类比赛的计时器。 篮球24秒计时器 一、设计任务与要求 1. 有显示24秒的计时功能 2. 置外部操作开关,控制计时器的直接清零,起碇和暂停连续功能 3. 计时器喂24秒递减计时器,其间隔为1秒 4. 计时器递减计时到0时,数码显示器不能灭灯 应发出光电报警信 号 二、总体框图 二. 1秒脉冲发生器: 秒脉冲信号发生器需要产生一定精度和幅度的矩形波信号。实现这样矩形波的方法很多,可以由非门和石英振荡器构成,可由单稳态电路构成,可以由施密特触发器构成,也可以由555点哭构成等。 不同的电路队矩形波频率的精度要求不同,由此可以选用不同电路结构的脉冲信号发生器。本实验中由于脉冲信号作为计数器的计时脉冲,其精度直接影响计数器的精度,因此要求脉冲信号有比较高的精度。一般情况下,要做出一个精度比较高的 频率很低的振荡器有一定的难度 工程上解决这一问题的办法就是先做一个频率比较高的矩形波震荡器,然后将其输出信号通过计数器进行多级分项,就可以得到频率比较低 精度比较高的脉冲信号发生器,其精度取决于振荡 秒脉冲发生器 外部操作信号 译码/显示电路 24t 计数器 控制电路 报警电路

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

单片机电子时钟课程设 计实验报告 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

《单片机原理与应用》课程设计 总结报告 题目:单片机电子时钟(带秒表)的设计 设计人员:张保江江润洲 学号: 班级:自动化1211 指导老师:阮海容 目录 1.题目与主要功能要求 (2) 2.整体设计框图及整机概述 (3) 3.各硬件单元电路的设计、参数分析及原理说明 (3) 4.软件流程图和流程说明 (4) 5.总结设计及调试的体会 (10) 附录 1.图一:系统电路原理图 (11) 2.图二:系统电路 PCB (12) 3.表一:元器件清单 (13) 4.时钟程序源码 (14)

题目:单片机电子时钟的设计与实现 课程设计的目的和意义 课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。 课程设计的基本任务 利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。 主要功能要求 最基本要求 1)使用MCS-51单片机设计一个时钟。要求具有6位LED显示、3个按键输入。 2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。 3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后又变成000000。 4)使用3个键分别作为小时、分、秒的调校键。每按一次键,对应的显示值便加1。分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。在调校时均不向上一单位进位 (例如分加到59后变为00,但小时不发生改变)。 5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。 6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。7)掌握硬件和软件联合调试的方法。 8)完成系统硬件电路的设计和制作。 9)完成系统程序的设计。 10)完成整个系统的设计、调试和制作。

时钟设计报告

教师签名: 说明:答辩未通过者总分记为0并重修。 总分 = 程序╳50% + 设计报告╳20% + 答辩╳30% 成都信息工程学院 课程设计 时钟设计报告 姓名:张双 学院:电子工程学院学院 学号:3140301005

摘要 时钟可以说是现代人们生活中必备的生活用品。市场上各种类型、款式的时钟数不胜数,一款良好的时钟可以给人们带来极大的便利。关于时钟的各种应用程序层出不穷,而我的目的是设计一款界面简单、方便易用、功能相对简洁实用的指针式时钟程序。 本次设计的简易时钟通过菜单栏可以实现启动时钟、暂停时钟、时钟清零以及时间设置等功能。一个时钟大致可由时钟背景、时针、分针、秒针四个部分构成。 该时钟的设计主要使用Windows操作系统、Visual C++ 6.0集成开发环境开发、MFC应用程序开发框架。通过本设计,我们进一步掌握Visual C++应用程序,系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++。 关键词:时钟;MFC ;VC++

第一章绪论 随着社会的发展,各种类型的时钟已经进入了千家万户。而操作简单、美观大方的指针式时钟备受家庭喜爱。本次时钟设计主要是了解简单的时钟显示窗口,进一步掌握Visual C++应用程序,系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++ 1.1课程设计目的 时钟几乎是每个人生活中必备的生活用品。时钟虽小确非常重要。一款良好的时钟可以给人们带来极大的便利。当然,现在关于时钟的各种应用程序层出不求,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,以及课程设计的要求,结合自己自身的情况,选择了PC平台、Windows操作系统、Visual C++ 6.0开发平台、MFC框架来实现自己的程序。而且希望能通过自己这款小应用程序的设计,来掌握面向对象的程序设计方法,了解C++面向对象的设计方法和技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。 1.2 技术应用的基本现状 Microsoft公司1998年推出了Visual C++6.0,它是支持Win32平台应用程序(application)、服务(service)和控件(control)开发的可视化编程的集成环境。与VC++5.0的最大不同之处是它的帮助功能更强大,MSDN(Microsoft Developer Networking)为包括VC++6.0在内的所有微软的程序产品提供在线帮助;另外,类的对象的可用成员函数、成员变量及函数的参数类型与个数都能动态显示在屏幕上,用户无须记住那些复杂而又枯燥乏味的函数名及复杂的参数,这无疑使得用VC++编程更加容易。所以VC++6.0可谓是Microsoft公司的王牌产品,编程功能强大而赢得广大程序的偏爱。

30秒计时器设计报告

课程设计报告 题目 30S定时器设计 院部名称 班级 学生姓名 学号 指导教师

目录 前言 一、电路设计原理与方案 (4) 1.1 设计原理 (4) 1.2 设计方案 (4) 二、各单元电路设计 (4) 2.1 脉冲发生电路 (4) 2.2 计数电路 (6) 2.3 译码显示电路 (8) 2.4 控制电路 (10) 三、仿真原理图 (11) 四、总结 (13) 附录、元件清单 (14)

前言 电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。 在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机、还可以用来做时间提醒设备等等,由此可见计时器在现代社会是何其重要的。 本设计主要能完成:显示30秒倒计时功能;系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;在直接清零时,数码管显示器全部显示为“0”;计时器为30秒递减计时其计时间隔为0.1秒;计时器递减计时到零时,数码显示器不灭灯,同时发光二极管LED点亮,停止减计数等。 整个电路的设计借助于Multisim 12.0仿真软件和数字逻辑电路相关理论知识,并在Multisim 12.0下设计和进行仿真,得到了预期的结果。

一、电路设计原理与设计方案 1.1 设计原理 我们可以用555时基电路构成的多谐振荡器来产生频率为10Hz的脉冲,即输出周期为0.1秒的方波脉冲,将该方波脉冲信号送到计数器74LS192的CP减计数脉冲端,再通过译码器74LS48把输入的8421BCD码经过内部作和电路“翻译”成七段(a,b,c,d,e,f,g)输出,显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的直接清零,启动和暂停/连续、译码显示电路的显示与灭灯及光电报警等功能。 1.2 设计方案 该系统应包括秒脉冲发生器、计数器、译码显示电路、辅助时序控制电路(简称控制电路)等几部分构成。其中,计数器和控制电路是系统的主要部分。计数器完成30s计时功能,而控制电路具有直接控制计数器的启动计数、暂停、连续计数、译码显示电路的显示和灭灯功能以及工作时间的调节。为了满足系统的设计要求,在设计控制电路时,应正确处理各个信号之间的时序关系。在操作直接清零开关时,要求计数器清零,数码显示器显示零。当启动开关闭合时,控制电路应封锁时钟信号CP,同时计数器完成置数功能,译码显示电路显示30s字样;当启动开关断开时,计数器开始计数;当按下十位调节开关时,计数器加1;当按下个位调节开关时,计数器同样加1;当暂停、连续开关拨在暂停位置上时,计数器停止计数,处于保持状态;当暂停、连续开关拨在连续时,计数器继续递减计数。 二、各单元电路设计 2.1 脉冲发生电路 555定时器 555定时器主要是通过外接电阻R和电容器C构成充、放电电路,并由两个比较器来检测电容器上的电压,以确定输出电平的高低和放电开关管的通断。这

课程设计--篮球竞赛24秒计时器

课程设计--篮球竞赛24秒计时器

一、课题名称 二、内容摘要 本设计主要是完成篮球竞赛24秒计时器,显示24秒倒计时功能,系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;在直接清零时,数码管显示器全部显示为“0”;计时器为24秒递减计时,其计时间隔为1秒;计时器递减计时到零时,数码显示器不灭灯,同时发出光电报警信号等。 整个电路的设计借助于Multisim 10.0.1仿真软件和数字逻辑电路相关理论知识,并在Multisim 10.0.1下设计和进行仿真,得到了预期的结果。 关键字:计时器;数码显示器;Multisim 随着信息时代的到来,电子技术在社会生活中发挥着越来越重要的作用,运用模电和数电知识设计的电子产品成为社会生活不可缺少的一部分,特别是在各种竞技运动中,定时器成为检验运动员成绩的一个重要工具。在篮球比赛中,规定了球员的持球时间不能超过24秒,否则就犯规了。本课程设计的“篮球竞赛24秒计时器”,可用于篮球比赛中,用于对球员持球时间24秒限制。一旦球员的持球时间超过了24秒,它自动的报警从而判定此球员的犯规。 本设计主要能完成:显示24秒倒计时功能;系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;在直接清零时,数码管显示器灭灯;计时器为24秒递减计时其计时间隔为1秒;计时器递减计时到零时,数码显示器不灭灯,同时发出光电报警信号等。

三、设计内容及要求 1.2.1基本要求 (1)显示24秒计时功能。 (2)控制计时器直接清零、启动、暂停/连续功能。 (3)计时器为24秒递减计时器。 (4)递减计时到零时,显示器不能灭灯,同时发出光电报警信号。 1.2.2 设计任务及目标 (1)根据原理图分析各单元电路的功能; (2)熟悉电路中所用到的各集成块的管脚及其功能; (3)进行电路的装接、调试,直到电路能达到规定的设计要求; (4)写出完整、详细的课程设计报告。 四、方案论证及比较 本设计的核心部分是要设计一、 个24s倒计数器,并且对计数结果进行实时显示,同时要实现设计任务中提 到的各种控制要求,因此该系统包括秒脉冲发生电路,计数器电路,译码显示电路,控制电路和电路报警电路5部分。其中,计数器电路和控制电路时系统的主要部分。计数器电路完成24s倒计时功能,而控制电路具有直接控制计

嵌入式软件开发基础实验报告 实时时钟

上海电力学院 嵌入式软件开发基础实验报告 题目:【ARM】实时时钟实验 专业:电子科学与技术 年级: 姓名: 学号:

一、实验目的 1、了解实时时钟的硬件控制原理及设计方法。 2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。 二、实验设备 1、硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。 2、软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP。 三、实验内容 学习和掌握 Embest EduKit-III 实验平台中RTC 模块的使用,进行以下操作: 1、编写应用程序,修改时钟日期及时间的设置。 2、使用EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。 四、实验原理 1. 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。 RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIRE和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。 2. S3C44B0X 实时时钟(RTC)单元 S3C44B0X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。 S3C44B0X 实时时钟(RTC)单元特性: BCD 数据:秒、分、小时、星期、日期、月份和年份 1、闹钟(报警)功能:产生定时中断或激活系统 2、自动计算闰年 3、无2000 年问题 4、独立的电源输入 5、支持毫秒级时间片中断,为RTOS 提供时间基准 读/写寄存器 访问 RTC 模块的寄存器,首先要设RTCCON 的bit0 为1。CPU 通过读取RTC 模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和 BCDYEAR 的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒(59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间和日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值(参考程序设计)。

相关文档
最新文档