指针式时钟课程设计报告

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

青岛理工大学

C++面向对象课程设计报告

院(系):计算机工程学院

专业:网络工程

学生姓名:赵建

班级:网络081 学号:

题目:指针式时钟

起讫日期: 2011.7.5—2011.7.14 设计地点:学院机房101

指导老师:吴万春

完成日期:2011年7月14日

一、课程设计目的

时钟几乎是每个人生活中必备的生活用品。时钟虽小确非常重要。一款良好的时钟可以给人们带来极大的便利。当然,现在关于时钟的各种应用程序层出不求,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,以及课程设计的要求,结合自己自身的情况,选择了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号是星期几可以得出现在是星期几。

1

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

2、 系统设计

2.1 模块设计

+CDateTimeDoc()

+year +month +day +hour +minute +second +str

CDateTimeDoc +CDateTimeView()+OnDraw()+Week()+RunTime()+Change()

+GetDateTime()

-flag -_sec1-_sec2

CDateTimeView +OnInitDialog()+OnOK()

-year -day -hour -minute -month -second

CSetting 依赖

主要类图

各模块关系图

画出主程序及其主要模块的流程图:

2.2算法流程图

OnDraw函数流程图

四、系统测试与调试分析

1、系统测试

2调试分析

程序的调试过程会发现很多设计程序过程中的漏洞,也会有很多bug出现,需要仔细的不断调试才能尽量的把程序调试的完美,我的程序调试的过程中出现的问题较多,现列举几个比较有代表性的,希望供其他人参考

1、我最初想到的是设计出一个不依靠读取系统时间就能独立运行的时钟,但是,个人能力

实在有限,设计了一段时间还是没有头绪,只能投机取巧的读取系统时间代替了,这样的话一些个性话的功能就不能够实现了,像把一分钟设置成120秒,每小时30分钟等2、目前的程序虽然能正常运行,但是,对于一些错误是不能反映出来的,像输入闹钟时间,

如果输入的范围不对的话也不能给出提示

3、闹钟的时间输入因为没有秒的限制,如果是当前时间的话,目前的程序会直接报时,应

该可以改成当前时间不报时的

5

五、用户手册

1、windows系统 vc++6.0设计

2、本程序不需要安装使用,直接运行即可弹出时钟对话框

3、

图1 时钟主界面图2 程序功能界面

进入程序后会弹出图1界面显示系统时间,点击设置按钮可以出现图2功能列表

图3 闹钟时间设置界面图4 倒计时时间设置界面

打开功能列表可以选择各个功能,图3为选择闹钟功能弹出的对话框,图4为选择倒计时功能弹出的对话框

图5 表盘及指针颜色设置界面

选择设置表盘或者各指针颜色时都会弹出图5,选择喜欢的颜色点击确定后即可改变颜色六、程序清单

(1): //视图类的构造函数

CShejiView::CShejiView()

{

// TODO: add construction code here

CBitmap 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)

{

7

CShejiDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CRect 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,最右是圆心加8

pDC->SelectObject(oldbrush);

//定义数字时钟的位置,显示当前时间

CRect dianzibiao(centerX-52,centerY*6/15, centerX+52,centerY);

9

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, // nHeight

0, // nWidth

0, // nEscapement

0, // nOrientation

FW_ULTRABOLD, // nWeight

FALSE, // bItalic

FALSE, // bUnderline

0, // cStrikeOut

ANSI_CHARSET, // nCharSet

OUT_DEFAULT_PRECIS, // nOutPrecision

CLIP_DEFAULT_PRECIS, // nClipPrecision

DEFAULT_QUALITY, // nQuality

DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily

b); // lpszFacename

CFont * 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;

//这个函数使你能够获得当前应用程序的实例句柄。AfxGetInstanceHandle 总是//返回代表你的可执行文件(.EXE)的HINSTANCE值,除非它从与MFC的USRDLL //版本连接的DLL内调用的。在这种情况下,它返回的是DLL的HINSTANCE值。

}

//如果要求时钟暂停,则不调用OnTimer函数

if(flag&&flag2)

return;

//调用OnTimer函数

11

SetTimer(1,1000,NULL);//每1000毫秒产生一个消息,在ontimer函数里编辑相应的//响应代码

}

(3): //工作状态设定

void CShejiView::OnBegin() //开始运行

{

// TODO: Add your command handler code here

flag=0;//0为正常,表示时钟正常运行

flag2=1;//1为不正常,表示此时倒计时不工作

Invalidate();

}

void CShejiView::OnPause() //暂停运行

{

// TODO: Add your command handler code here

flag=1;

flag2=1;

KillTimer(1);//KillTimer:移除定时器函数的声明:移除先前用SetTimer设置的定时器。在定时器使用完毕后移除定时器时使用

Invalidate();

}

void CShejiView::OnSetback() //倒计时功能

{

// TODO: Add your command handler code here

Csetback dia;

if(dia.DoModal()==IDOK)//如果点击"确认“(IDOK)之后,用输入的时间来代替系统本来的时间

{

m_hour=dia.m_hour;

m_minute=dia.m_minute;

m_second=dia.m_second;

flag2=0;

}

flag=1;

Invalidate();//InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效//InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一//次,默认背景色为白色,可以通过设置BRUSH来改变背景色。

}

void CShejiView::OnSettimer() //闹钟功能

{

// TODO: Add your command handler code here

Cmydialog md;

md.m_shour=hour;

md.m_sminute=minute;

UpdateData(false);

if(md.DoModal()==IDOK)//如果Updatedata(TRUE),将控件的值赋值给成员变//量;Updatedata(FALSE),将成员变量的值赋值给控件;

{

UpdateData(true);

hour=md.m_shour;

minute=md.m_sminute;

set=0;

}

}

(4)://对时钟消息进行响应

void CShejiView::OnTimer(UINT nIDEvent) //OnTimer()函数是响应用SetTimer()函数设///定的时钟发送的时钟消息的。

//为类添加WM_TIMER消息响应,会看到类中多了个OnTimer(UINT nIDEvent)。

//然后用SetTimer(1,1000,NULL)就行了。第一个参数是ID,第二个是间隔时间,单位//是毫秒,第3个是响应函数,因为要在OnTimer(UINT nIDEvent)里面做响应操作,所//以此处给个NULL就行了。

{

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

//若为时钟状态则获取系统当前时间

if(flag==0)

{

CTime curtime = CTime::GetCurrentTime();

m_hour = curtime.GetHour();

m_minute = curtime.GetMinute();

m_second = curtime.GetSecond();

}

//若为倒计时状态则判断是否倒计时结束

if(flag2==0)

{

if(m_second||m_minute||m_hour)//如果时、分、秒不同时为零,则进行倒计时

{

if(m_second==0)//如果在时分秒不同时为零的情况下,秒为零,那么秒

13

向//分借60秒,如果此时分也恰好为零,则同时向时借60分,因为被秒借去60秒,所

//以分为59,hour减1

{ m_second=60;

if(m_minute==0)

{

m_minute=59;

m_hour--;

}

else

m_minute--;

}

m_second--;

}

else

{

AfxMessageBox("倒计时时间到");

flag2=1;

KillTimer(1);

}

}

Invalidate();

CView::OnTimer(nIDEvent);

}

(5)://设置表盘颜色

void CShejiView::OnBpcolor()

{

// TODO: Add your command handler code here

CColorDialog ColorDlg; //创建调色板对象

ColorDlg.m_cc.Flags|=CC_FULLOPEN;

if(IDOK == ColorDlg.DoModal()) //将调色板实例化

{

bpcolor= ColorDlg.GetColor(); //获取选中的颜色

}

}

void CShejiView::OnHourcolor()//设置时针颜色

{

// TODO: Add your command handler code here

CColorDialog ColorDlg; //创建调色板对象

ColorDlg.m_cc.Flags|=CC_FULLOPEN;

if(IDOK == ColorDlg.DoModal()) //将调色板实例化

{

hourcolor= ColorDlg.GetColor(); //获取选中的颜色

}

}

void CShejiView::OnMinutecolor() //设置分针颜色

{

// TODO: Add your command handler code here

CColorDialog ColorDlg; //创建调色板对象

ColorDlg.m_cc.Flags|=CC_FULLOPEN;

if(IDOK == ColorDlg.DoModal()) //将调色板实例化

{

minutecolor= ColorDlg.GetColor(); //获取选中的颜色

}

}

void CShejiView::OnSecondcolor() //设置秒针颜色

{

// TODO: Add your command handler code here

CColorDialog ColorDlg; //创建调色板对象

ColorDlg.m_cc.Flags|=CC_FULLOPEN;

15

if(IDOK == ColorDlg.DoModal()) //将调色板实例化

{

secondcolor= ColorDlg.GetColor(); //获取选中的颜色

}

}

七、体会与自我评价

本次课程设计选择的是指针式时钟,主要是出于自己的兴趣爱好。由于自己才疏学浅,开始的表盘绘制就很是头疼,但是通过查询资料、请教别人以及自己的认真思考,终于明白了表盘及刻度绘制的原理。刻度计算起来并不是特别难,主要是一些几何上的知识以及三角函数方面的内容,但由于对MFC并不是很了解,因此在这个地方停留了很长时间。不过有一些同学对MFC已经有了不错的掌握,所以在他们的指导和帮助下对MFC有了一些了解。程序设计过程中最大的困难就是对于MFC中的函数了解不够,不能融会贯通的拿来运用,通过Google搜索引擎的查询给自己提供了很大的帮助。通过此次课程设计使我深刻了解到了日常知识积累的重要性。书到用时方恨少,在以后的学习中一定要吸取经验,学好基础知识并努力开阔视野。同时通过此次课程设计,对于设计可视化窗口的程序有了更好的了解,也激发了自己对可视化窗口程序设计的兴趣。而且通过这次课程设计,使自己对课本上的东西有了更好的掌握,对课程内容的了解更加深刻,受益匪浅。

而且通过本次课程设计更加意识到提高编程能力关键是要多多实践,读书是为写代码打基础,但只读书不敲代码是不可能提高实际的编程能力的。只有多读源码、多写代码、多思考才能对知识有更加深刻的了解。

在编程期间,遇到了很多困难,老师提供了很多的指导和帮助。对老师表示由衷的感谢。

八、参考文献:

[1]侯俊杰,《深入浅出 MFC (第 2 版)》.湖北:华中科技大学出版社, 2001.7

[2]潘爱民,《Visual C++技术内幕 (第 5 版)》.北京:清华大学出版社,2000.3

[3]杨永国,《Visual C++ 6.0 实用教程》.北京:清华大学出版社, 2004.1

[4]百度百科关于MFC的词条:https://www.360docs.net/doc/193946106.html,/view/10918.htm

[5]程序员百科关于Cview类的词条:https://www.360docs.net/doc/193946106.html,/index.php?doc-view-188

九、课程设计评价

17

数字时钟设计实验报告

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

数字时钟设计实验报告 一、设计要求: 设计一个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的清零端,同时产生一个脉冲给分的个位。其电路图如下:

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

目录 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化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

数字电子钟课程设计实验报告

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计任务书2016/2017 学年第一学期 学生姓名:张涛学号: 李子鹏学号: 课程设计题目:数字电子钟的设计 起迄日期:2017年1月4日~2017年7月10日 课程设计地点:科学楼 指导教师:姚爱琴 2017年月日 课程设计任务书

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计开题报告2016/2017 学年第一学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号:

指导教师:姚爱琴 2017 年 1 月 6 日 中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计说明书2016/2017 学年第二学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号: 指导教师:姚爱琴 2017 年月日

目录 1 引言 (6) 2 数字电子钟设计方案 (6) 2.1 数字计时器的设计思想 (6) 2.2数字电路设计及元器件参数选择 (6) 2.2.2 时、分、秒计数器 (7) 2.2.3 计数显示电路 (8) 2.2.5 整点报时电路 (10) 2.2.6 总体电路 (10) 2.3 安装与调试 (11) 2.3.1 数字电子钟PCB图 (11) 3 设计单元原理说明 (11) 3.1 555定时器原理 (12) 3.2 计数器原理 (12) 3.3 译码和数码显示电路原理 (12) 3.4 校时电路原理 (12) 4 心得与体会 (12) 1 引言 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 2数字电子钟设计方案 2.1 数字计时器的设计思想 要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。 值得注意的是:任何记时装置都有误差,因此应考虑校准时间电路。校时电路一般

单片机完整电子时钟设计报告.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数码管显示模块组成。

单片机课程设计--简易电子钟.doc

单片机课程设计报告设计课题:简易电子时钟的设计 专业班级:07通信1班 学生姓名:黎捐 学号:0710618134 指导教师:曾繁政 设计时间:2010.11.5—2010.12.20

一、设计任务与要求 (1)设计任务: 利用单片机设计并制作简易的电子时钟,电路组成框图如图所示。 (2)(2) 设计要求:1)制作完成简易的电子时钟,时间可调整。 2)有闹钟功能。 二、方案设计与论证 简易电子时钟电路系统由主体电路和扩展功能电路两主题组成,总体功能原理是以STC89C52单片机为主要的控制核心,通过外接4个独立式键盘作为控制信号源,八个七段数码管作为显示器件,蜂鸣器作为定时器件,单片机实时的去执行相应的功能。在数码管上显示出来,此时通过不同的按键来观看和调节各种数据。CPU 控制原理图如图1所示。 图1. CPU 控制原理图 三、硬件系统的设计 3.1 STC89C52控制模块 STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O )端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。 MCS-52单片机内部结构 8052单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM): 8052内部有128个8位用户数据存储单元和128 个专用寄存器单元,它们是统一编 时间显示显示 主控器(51单片机) 时间 调整 声音报 时 (选做)

数字电子时钟课程设计

数字电子技术基础课程设计报告 班级:姓名: 学号: 一、设计目的 1掌握专业基础知识的综合能力。 2完成设计电路的原理设计、故障排除。 3逐步建立电子系统的研发、设计能力,为毕业设计打好基础。 4让学生掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、安装、测试方法。 5进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力。 6培养书写综合实验报告的能力。 二、设计仪器 1 LM555CH 2 74LS161N 74LS160N 74LS290 3 74LS00 74LS08 4 电源电阻电容二极管接地等 三数字电子钟的基本功能及用途 现在数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性

能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,,因此在许多电子设备中被广泛使用。 电子钟是人们日常生活中常用的计时工具,而数字式电子钟又有其体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成时间及星期的显示功能。 多功能数字钟采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。具有时间显示、走时准确、显示直观、精度、稳定等优点。电路装置十分小巧,安装使用也方便。同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。 四设计原理及方框图 数字钟实际上是一个对标准频率进行计数的计数电路,标准的1HZ时间信号必须做到准确稳定。由图可见:本数字钟电路主要由震荡器、、时分秒计数器、译码显示器构成。它们的工作原理是:由震荡器产生的高频脉冲信号作为数字钟的时间基准,送入秒计数

单片机电子时钟的设计报告

目录 1 引言 (1) 2 设计任务与要求 (2) 2.1. 设计题目 (2) 2.2. 设计要求 (2) 3 系统的功能分析与设计方案 (3) 3.1. 系统的主要功能 (3) 3.2. 系统的设计方案 (3) 3.3. 数码管显示工作原理 (4) 3.4. 电路硬件设计 (5) 3.4.1. 设计原理框图 (5) 3.4.2. 电源部分 (5) 3.4.3. 复位电路 (6) 3.4.4. 指示灯电路 (6) 3.4.5. 按键电路 (7) 3.4.6. 时钟电路 (7) 3.4.7. 驱动电路 (8) 3.4.8. 数码管连接电路 (8) 3.4.9. 主控模块AT89S52 (9) 3.4.10. 材料清单 (10) 3.4.11. 电路原理图、PCB图及实物图 (11) 3.5. 软件设计 (13) 3.5.1. 软件设计流程 (13) 3.5.2. 完整源程序 (15) 4 系统安装与调试 (21) 4.1. 硬件电路的安装 (21) 4.2. 软件调试 (21) 5 课程设计总结 (22) 参考文献 (23) 致谢 (24)

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

定时闹钟设计课程设计报告

定时闹钟设计 摘要: 本设计目的是利用单片机设计制作一个简易的定时闹铃时钟,可以放在宿舍或教室使用,在夜晚或黑暗的场合也可以使用。可以设置现在的时间以及闹铃的时间并且显示出来,若时间到则发出一阵声响。 本次设计的定时闹钟在硬件方面就采用了AT89C52芯片,用6位LED数码管进行显示。LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时—分分—秒秒。通过五个功能按键可以实现对时间的修改、定时和闹铃终止,闹钟设置的时间到时蜂鸣器可以发出声响。在软件方面用C51编程。整个定时闹钟系统能完成时间的显示,调时和设置闹钟、停止响铃等功能,并经过系统仿真后得到了正确的结果。 关键词:定时闹钟;蜂鸣器;AT89C52;74HC245;

目录

第1章绪论 设计目的 本次课程设计的主题是定时闹钟,其基础部分是一个数字钟。电路系统由秒信号发生器、“时、分、秒”计数器、显示器组成。其中秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,这里用51单片机的定时器来实现。利用定时器获得每一秒的时刻,然后在程序中,我们就可以给秒进行逐秒赋值,满60秒则进位为1分,满60分则进位为1小时,满24小时则时间重置实现一天24小时的循环。译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过一个六位八段数码管显示出来。 这里利用51单片机的相关知识,来实现电子闹钟的相关功能。实验使用了 AT89C52、74HC245等芯片,通过单片机的P0、P3管脚来驱动数码管显示出相应的时刻。本文将讲述AT89C52、74HC245等芯片的基本功能原理,并重点介绍该电子闹钟的设计。 设计要求和任务 使用6位七段LED显示器来显示现在的时间;显示格式为“时时分分秒秒”;具有4个按键来做功能设置,可以设置现在的时间及显示闹铃设置时间;时间到则发出一阵声响,可通过按键复位;对单片机系统设计的过程进行总结,认真书写课程设计报告并按时上交。 利用51单片机结合七段LED显示器设计一个简易的定时闹铃时钟,可以放在宿舍或教室使用,由于用七段LED显示器显示数据,在夜晚或黑暗的场合也可以使用。可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响。 论文主要内容 论文分别叙述从硬件和软件上实现该设计的过程。第2章为总体设计方案。第3章主要介绍设计实现需要解决的硬件问题。依次介绍所使用的各种硬件的使用方法,并附上仿真电路图和文字说明。第4章从软件的角度说明实现该设计需要解决的问题。

数字钟课程设计

数字逻辑电路课程设计 课题:数字钟 姓名:刘亮 班级:通信2班 学号:21 成绩: 指导教师:查根龙 开课时间: 2014-2015学年第2学期

摘要 (1) ABSTRACT (2) 第1章设计背景 (3) 1.1设计任务 (3) 1.2设计要求 (3) 1.3 设计目的 (3) 第2章课程设计方案 (4) 2.1 数字钟的基本组成和工作原理 (4) 2.2 振荡电路 (5) 2.3 分频电路 (6) 2.4时分秒计数电路 (7) 2.5 校时校分功能 (10) 2.6整点报时电路 (10) 2.7上下午显示电路 (11) 第三章课程总结 (12) 第四章参考文献 (13) 第五章附件 (14) 5.1 电路原理图 (14) 5.2 元器件清单 (14)

摘要 电子钟在现代社会已经使用的非常广泛,伴随着数字电路技术的发展,数字钟的出现,更加方便了大家的生活,同时也大大地促进了社会的进步。数字电路具有电路简单、可靠性高、成本低等优点,本设计就以数字电路为核心设计智能电子钟。 数字钟就是由电子电路构成的计时器。是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和、报时、上下午显示等附加功能。主电路系统由秒信号发生器、时、分、秒计数器,译码器及显示器,校时电路,上下午显示,整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。秒信号产生器将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24和12小时的累计。计数器用的是74160。译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过六位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的 关键词:计时器;计数;译码;报时;校时校分

指针式时钟课程设计报告

青岛理工大学 C++面向对象课程设计报告 院(系):计算机工程学院 专业:网络工程 学生姓名:赵建 班级:网络081 学号: 题目:指针式时钟 起讫日期: 2011.7.5—2011.7.14 设计地点:学院机房101 指导老师:吴万春 完成日期:2011年7月14日

一、课程设计目的 时钟几乎是每个人生活中必备的生活用品。时钟虽小确非常重要。一款良好的时钟可以给人们带来极大的便利。当然,现在关于时钟的各种应用程序层出不求,我的目的是设计一款界面简单、方便易用、功能相对丰富的指针式时钟程序。为了达到上述目标,以及课程设计的要求,结合自己自身的情况,选择了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号是星期几可以得出现在是星期几。 1

数字时钟设计实验报告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与门产生一个高电平

数字逻辑实验报告(数字时钟设计)

数字逻辑实验报告

实验三、综合实验电路 一、实验目的: 通过一个综合性实验项目的设计与实现,进一步加深理论教学与实验软硬件平台的实践训练,为设计性实验做好充分准备。 二、实验原理: 根据要求的简单设计性的电路设计实验,应用基本器件与MSI按照电路设计步骤搭建出初级电路;设计型、综合型的较复杂实验电路 三、实验设备与器件: 主机与实验箱 四、实验内容: (1)实验任务:根据所学习的器件,按照电路开发步骤搭建一个时钟, 要求实现的基本功能有计时功能、校对时间功能、整点报时、秒表等功能。 (2)实验任务分析:完成该数字时钟,采用同步时序电路,对于计时 的的功能,由于时间的秒分时的进位分别是60、60、24,所以可以应用74LS163计数器分别设计2个模60计数器以及一个模24计数器,那么需要有7个秒输出,7个分输出,6个小时的输出;对于校对时间的功能,由74LS163的特性可知,当该器件处于工作状态时,每来一个CLK脉冲,计数值加1,所以可以手动控制给CLK脉冲,来进行时间的校对;对于整点报时功能,可以采用一个比较电路,当时间的分秒数值全部为零时,那么此时可以接通报时装置,可以在电路中设置报时的的时间;对于秒表功能,有两种方案,可以单独重新设计一个秒表装置,采用模100计数器以及两个模60计数器,可以进行优化,使用原先的两个模60计数器,这样可以简化电路,是电路简洁。 (3)实验设计流程:

(4)输入输出表: (5)各个功能模块的实现: A、计时功能模块的实现(电路图及说明)秒表部分及说明

说明:该部分是实现功能正常计时中的秒部分的计时工作。如图所示,图中采用两个74LS163来做一个模60计时器,计数的起止范围是0~59,(第一个74LS163采用模10计数,起止为0~9,第二个74LS163的计数起止范围是0~5),两个器件采用级联方式,用预置位方法实现跳转;该部分有7个秒输出,接到BCD译码显示器。 注解:第一个163器件: LDN端统一接到清零端ABCD端接地 ENP端接到VCC高电平ENT接高电平VCC 第二个163器件: LDN端统一接到清零端ABCD端接地 ENP端接到VCC高电平ENT接高电平第一个163的预置位段 分钟部分以及说明:

时钟设计报告

教师签名: 说明:答辩未通过者总分记为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公司的王牌产品,编程功能强大而赢得广大程序的偏爱。

简易时钟课程设计报告

目录 一、系统总体方案选择与说明 (1) 二、设计框图与工作原理 (2) 2.1设计框图 (2) 2.2工作原理 (2) 三、各单元硬件设计说明及计算方法3 5四、软件设计与说明 ............................................................................................................ 4.1程序设计流程图 (5) 4.2程序设计步骤 (6) 4.2.1延时程序 (6) 4.2.2主程序的设计 (7) 4.2.3中断服务程序的设计 (7) 4.2.4显示控制子程序的设计 (7) 4.2.5按键控制程序的设计 (7) 五、调试结果及说明 (8) 5.1软件调试 (8) 5.2硬件调试 (9) 六、各元件的使用说明 (10) 6.1AT89C51 芯片 (10) 6.2数码管 (10) 6.3按键 (10) 七、总结 (11) 12八、参考文献 ...................................................................................................................... 九、附录 (13) 13附录 A ............................................................................................................................... 附录 B (14)

单片机电子时钟设计报告

单片机电子时钟设计报告 随着我国科学技术的飞速发展,单片机的应用越来越广泛。单片机是由随机存储器、只读存储器和中央处理器组成的单片机。它是一个集成定时计数和各种接口的微控制器。它体积小、成本低、功能强,广泛应用于智能工业和工业自动化。为了进一步了解51单片机的定时器,设计一个电子时钟,本文对AT89C51单片机的时钟计数进行了研究。数字时钟是一种使用数字电路技术来计时小时、分钟和秒钟的时钟。与机械钟相比,它具有更高的精度和直观性,更长的使用寿命,并得到了广泛的应用。设计数字时钟有很多方法。例如,中小规模的集成电路可以用来形成电子钟。特殊的电子钟芯片也可以用来形成需要显示电路和外围电路的电子钟。单片机也可以用来实现电子钟等。3,实际任务和内容 设计内容: 1,利用其定时器/计数器计时和计数原理,结合显示电路、发光二极管数码管和外部中断电路来设计定时器 2,系统可实现六位发光二极管显示,显示时间以小时:分:秒为单位3.当系统时间正好是1: 00时,指示灯闪烁(2hz)5秒钟设计目标: 1。掌握单片机定时器和中断的应用方法2.掌握按键和数码管的扩展方法 4、团队合作 项目组组长:张成 项目组成员:余江东、张翔

项目组,共三人,以张成为组长,分工合作,各负其责。具体分工如下:(1)负责数字钟硬件设计和调试;主要由张翔完成(2)基于proteus 的电路仿真;主要在江东完成(3)负责数字钟程序编写;主要由张成完成(4)报告编写;主要由张成、余江东、张翔完成。在我们小组拿到作业后,我们首先讨论了实习的内容和任务。一起讨论用什么方法来实现任务手册的要求和细节。为了不浪费时间,每个人都开始分工合作,专注于自己的任务,同时互相帮助。在这个过程中,我们互相合作,默契配合。我们一起讨论并解决了遇到的问题。两个有着不同想法和观点的人一起分享了讨论,最终采用了获得的最理想和最完美的方案。最后的调试是和我们一起进行的。我们在调试过程中遇到了许多问题。我们一起分析和搜索数据。百度试图解决这些问题。在这个过程中,我们训练了自己的团队合作和沟通技巧。这次供应链管理实习在我们三人的完美合作下圆满完成。每个人都很好地完成了自己的任务,充分证明了团结就是力量。同时,它也使我们认识到团队合作的重要性质。我们是一个完美的团队。 5、总体设计方案概述 系统总体结构图A T89C51单片机显示电路时钟电路机复位电路系统分为单片机控制模块、时钟电路模块、复位电路模块和发光二极管显示模块(1)时钟电路设计 单片机采用外部12MHZ晶振形成振荡电路作为时钟源,时钟电路原理如下当系统通电并启动时,

电子时钟设计报告

电子时钟设计报告Last revision on 21 December 2020

电子时钟设计报告 1 设计任务与要求 设计任务 用STM32设计一个数字电子钟,采用LCD12864来显示并修改,时间或闹铃。 设计要求 1)显示功能:可显示时间等基本功能。 2)具有闹铃功能。 3)按键改变时间。 4)按键改变闹铃。 5)温度的显示。 2 方案设计与论证 整个系统用stm32单片机作为中央控制器,由单片机执行采集内部RTC 值,时钟信号通过单片机I/O口传给TFT彩屏,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出。系统设有按键模块用于对时间进行调整及扩展多个小键盘。

显示电路 方案一:TFT彩屏。显示质量高,没有电磁辐射,可视面积大,应用范围广,画面效果好,数字式接口,“身材”匀称小巧,功耗小。 方案二:数码管动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O 口,降低了能耗。 从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案一,既TFT彩屏显示。 电源电路 本数字电子钟设计所需电源电压为直流、电压值大小5V的电压源直接用mini USB通过电脑USB接口供电。 按键电路 本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。 单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。

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

目录 第一部分设计任务和要求 1.1单片机课程设计内 容 (2) 1.2单片机课程设计要求………………………………………………… 2 1.3系统运行流程………………………………………………………… 2 第二部分设计方案 2.1 总体设计方案说明 (2) 2.2 系统方框图 (3) 2.3 系统流程图 (3) 第三部分主要器材及基本简介 3.1 主要器材 (4) 3.2 主要器材简介 (4) 第四部分系统硬件设计 4.1 最小系统 (6) 4.2 LCD显示电路 (6) 4.3 键盘输入电路 (7) 4.4 蜂鸣器和LED灯电路 (7)

第五部分仿真电路图与仿真结果 (8) 第六部分课程设计总结 (8) 第七部分参考文献 (9) 附录A 实物图 附录B 系统源程序 第一部分设计任务和要求 1.1 单片机课程设计内容 利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。 1.2 单片机课程设计要求 1.能实现年、月、日、星期、时、分、秒的显示; 2.能实现调时功能; 3.能实现12/24小时制切换; 4.能实现8:00—22:00整点报时功能。 1.3 系统运行流程 程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。若没到则循环执行。计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。调时闪烁中断服务程序

用于被调单元的闪烁显示。调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。实现了对时间的设置和修改、LCD显示数值等主要功能。相关的调整是靠对功能键的判断来实现的。第二部分设计方案 2.1 总体设计方案说明 1.程序设计及调试 根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。 2.硬件焊接及调试 根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。3.后期处理 对设计过程进行总结,完成设计报告。 2.2 单片机系统方框图

数字时钟课程设计

1 绪论 1.1 课题背景及目的 在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着数字集成电路性能价格比的不断提高,新一代产品的应用也越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能。小则可以用于家电控制,甚至可以用于儿童电子玩具。它功能强大,体积小,质量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。 随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。根据这种实际情况,设计了一个单片机多功能定时系统,它可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行时钟校准和定点打铃。它可以执行不同的时间表(考试时间和日常作息时间)的打铃,可以任意设置时间。这种具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。 1.2数字时钟的应用 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片出售,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示日期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展

设计报告可调电子时钟

《单片机实训》设计报告 题目:可调电子时钟的设计 学院: 专业: 班级: 姓名: 学号: 指导老师:

一、实验内容 利用CPU的定时器和实验仪上提供的数码显示电路,设计一个可调电子时钟。显示格式如下:XX XX XX ,由左向右分别为:时、分、秒。同时还可以通过键盘(开关)对电子时钟的时间进行加减,达到可调。 二、实验内目的 1、掌握定时器的使用和编程方法; 2、掌握中断处理程序的编程方法; 3、掌握数码显示电路的驱动程序编程方法; 4、掌握键盘电路的程序编程方法; 5、掌握模块子程序的编程方法; 6、掌握硬件的线路的设计及连线方法。 三、实验说明 设计定时器每50ms中断一次,在中断服务程序中,对中断次数进行计数,50ms 计数20次,就是1秒,然后再对秒计数得到分的值,对分计数得到小时的值,分别将各值送到相应的段地址端口和位地址端口,通过数码管显示结果,达到电子时钟的效果。在电子时钟的基础上,程序增加了键盘程序,对电子时钟进行可调(对秒/分/时进行加/减,此功能的增加使电子时钟功能更强、更实用。 四、硬件电路设计原理图 图1 总电路图 R3 图2 键盘控制电路

图3 显示部分电路图 五、软件设计 (一) 程序设计框图

(二) LED数码管字型表

(三)实验程序设计 步骤1、用定时器编写延迟子程序; 2、编写BCD码转换子程序; 3、编写学号显示子程序; 4、编写从0~9秒用数码管显示子程序; 5、据时分秒的要求,编写定时器0中断服务子程序; 6、结合以上子程序,与主程序相组合成电子时钟程序; 7、编写键盘控制加子程序; 8、编写键盘控制减子程序; 9、组合以上子程序,与主程序相组合成可调电子时钟程序; ORG 0000H ;程序入口 AJMP START ;指向主程序 ORG 000BH ;定时器中断入口 AJMP INT1 ;指向中断服务程序 ; INT1: MOV TH0,#9EH MOV TL0,#58H DJNZ R7,EXITINT ;20次未到继续记数 MOV R7,#20 INC 20H MOV R2,20H CJNE R2,#60,EXITINT ;60秒未到继续记数 MOV 20H,#0 INC 21H MOV R2,21H CJNE R2,#60,EXITINT ;60分未到继续记数 MOV 21H,#0 INC 22H MOV R2,22H CJNE R2,#24,EXITINT ;24小时未到继续记数 MOV 22H,#0 EXITINT:RETI START: MOV 20H,#0 MOV 21H,#0 MOV 22H,#0 MOV R7,#20 MOV TMOD,#11H ;设定时器0和1均为方式1 MOV TH0,#9EH ;置定时器0初值为250 ms MOV TL0,#58H MOV TH1,#3CH ;置50ms计数循环初值(定时器1) MOV TL1,#0B0H SETB EA ;CPU开中断

相关文档
最新文档