整点报时数字钟[精选.]
整点报时数字钟
![整点报时数字钟](https://img.taocdn.com/s3/m/411a900a844769eae009edd5.png)
数字电路课程设计报告书课题名称 电子秒表电路设计姓 名 学 号院、系、部 物理与电信工程学院 专 业 电子信息工程指导教师2012年 6 月 1日※※※※※※※※※ ※※ ※※ ※※ ※※※※※※※※※2010级学生数字电路 课程设计自动电子钟的设计1 设计目的(1)熟练电路仿真软件Multisim 10.0的使用。
(2)巩固所学的理论知识与实践技能。
(3)提高电路布局、布线和检查以及排除故障的能力。
(4)初步学习工程设计的基本技能。
(5)培养学生查阅技术资料的能力以及综合运用所学理论知识和实践知识独立完成课题的工作能力。
2 设计思路(1)设计秒信号产生电路。
(2)设计计时显示电路。
(3)设计校时电路。
(4)设计清零电路。
(5)设计整点报时电路。
3 设计过程3.1方案论证如图 3.1所示,秒信号产生电路可用振荡器和分频器共同产生,由于在Multisim10.0软件中,“时间”要比实际的时间慢得多,所以在仿真电路里,为了更加清楚地看到实验现象,就用电压时钟脉冲产生器代替秒信号发生器。
3.2电路设计(1)秒脉冲信号发生器的设计秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。
由振荡器与分频器组合产生秒脉冲信号。
振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz脉冲。
分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,二是提扩展电路所需要的信号,选用三片74LS90进行级联,因为每片为1/10分频器,三联好获得1Hz标准秒脉冲。
其电路图如下:图3.2 秒信号发生电路(2)秒、分、时计时器电路设计秒、分计数器为60进制计数器,小时计数器为24进制计数器。
实现这两种模数的计数器采用中规模集成计数器74LS90构成。
60进制计数器:由74LS90构成的60进制计数器,将一片74LS90设计成10进制加法计数器,另一片设置6进制加法计数器。
两片74LS90按反馈清零法串接而成。
数字钟概述
![数字钟概述](https://img.taocdn.com/s3/m/4fc2c5292af90242a895e5d4.png)
数字钟概述一、数字钟的简介数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。
数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。
这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,并便于功能的扩展。
数字钟已成为人们日常生活中不可缺少的生活必需品,广泛地应用于人家庭以及车站、码头、剧场、办公室等家庭和公共场所,给人们的生活,学习,工作,娱乐带来极大的方便[1]。
数字钟一般由振荡器,分频器,译码器,显示器等部分组成,这些都是数字电路中最基本的,应用最广的电路。
当前市场上已有现成数字钟集成电路芯片出售,价格较便宜。
由于数字集成电路技术的发展,采用了先进稳定的石英振荡器技术,使数字钟具有走时准确,性能稳定,携带方便等特点,是目前人们生活和工作不可或缺的报时用品[2]。
二、数字钟的发展前景现在是一个知识爆炸的新时代。
新产品、新技术层出不穷,电子技术的发展更是日新月异。
可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。
因此我们需要一个定时系统来提醒这些忙碌的人。
数字化的钟表给人们带来了极大的方便。
近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。
但是却很少知道它的内部结构以及工作原理。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
时钟完整版(带整点报时)
![时钟完整版(带整点报时)](https://img.taocdn.com/s3/m/0f3b225b3b3567ec102d8a7c.png)
#include<Windows.h>#include<string.h>#include<mmsystem.h>#include<wingdi.h>#include"resource.h"#include<math.h>#include<commdlg.h>#pragma comment(lib,"WinLib.lib")#pragma comment(lib,"WINMM.LIB")//导入声音用void SetDlgMenuID(UINT nMainDlgID,UINT nCalendarDlgID,UINT nMenuID); void SetButtonID(UINT nCalendarID,UINT nExitID,UINT nBiaoPan1,UINT nBiaoPan2,UINT nBiaoPan3);INT_PTR ShowMainDlg();/**********************************************************API函数参考:GetLocalTime: 获得当前时间(公历:年、月、日、周)MoveToEx: 移动划线的起点LineTo: 绘制到某一点SetTextColor: 设置要绘制的文字颜色TextOut: 绘制文字SetBkMode: 设置背景显示模式wsprintf: 整数转换为字符串,宽字符,用Unicode码GetClientRect: 获取窗口大小GetDC: 获取内存设备SetTimer: 设置定时器FillRect: 填充矩形CreateSolidBrush: 创建刷子RGB: 设置RGB颜色CreateFont:创建一种有特殊性的字体结构体类型参考:SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周**********************************************************/HINSTANCE g_hInst;//保存操作系统传递进来的"应用程序实例句柄"//Windows程序入口函数int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){g_hInst = hInstance;SetDlgMenuID(IDD_DLG_CLOCK,IDD_DLG_CALENDAR,IDR_MENU);SetButtonID(ID_CALENDAR,ID_EXIT,ID_BIAO1,ID_BIAO2,ID_BIAO3);ShowMainDlg(IDD_DLG_CLOCK);}typedef struct _stDateTime{int nYear;int nMonth;int nDay;}stDateTime;//定义表格,存储年-2099年的农历信息:每年的大小月、闰月信息、春节所在的公历日期unsigned int LunarCalendarTable[199] ={0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D, 0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37, 0x095B4B,0x749BC1,0x049754,/*1911-1920*/0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742, 0x2497B7,0x04974A,0x664B3E,/*1921-1930*/0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B, 0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6, 0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F, 0x0E9552,0x06AA48,0x6AD53C,/*1951-1960*/0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549, 0x75AABE,0x056A51,0x096D46,/*1961-1970*/0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452, 0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D, 0x0AB651,0x093746,0x5497BB,/*1981-1990*/0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647, 0x5936BC,0x092E50,0x0C9645,/*1991-2000*/0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52, 0x092D47,0x5C95BA,0x0A954E,/*2001-2010*/0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC, 0x052B50,0x0A9345,0x474AB9,/*2011-2020*/0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646, 0x5E933A,0x0D534D,0x05AA43,/*2021-2030*/0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F, 0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA, 0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244, 0x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E, 0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38, 0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743, 0x452738,0x0D264A,0x8E933E,/*2081-2090*/0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C, 0x0D1541,0x2D92B5 /*2091-2099*/};char* TianGanDizhi[60]={"甲子", "乙丑","丙寅","丁卯","戊辰","已巳","庚午","辛未","壬申","癸酉","甲戌","乙亥","丙子","丁丑","戊寅","已卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥","戊子","已丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","已亥","庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","已酉","庚戌","辛亥","壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","已未","庚申","辛酉","壬戌","癸亥"char *ChDayTable[] ={"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};char *ChMonthTable[] = {"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};//定义表格,存储每月日离元旦的天数(不考虑瑞年)unsigned int MonthAdd[12] ={0,31,59,90,120,151,181,212,243,273,304,334};//定义用户要显示的年、月、日unsigned int nCurrentYear=0; //button控制年unsigned int nCurrentMonth=0;//月unsigned int nCurrentDay=0; //日UINT LiteSongs = 0; //判断是否听歌UINT Total=0; //我自定义的变量,当月的总天数UINT PreTotal=0; //自定义的当月的前一月的总天数UINT BUTTON6=0;UINT BUTTON4=0;int k=0;int m=0;//TCHAR Hours[255];SYSTEMTIME BellTime;UINT Inthour=0;//判断某年是否为公历瑞年int IsLeapYear(WORD iYear) //学生需要修改此函数,已经修改{if(((iYear%4==0)&&!(iYear%100==0))||(iYear%400==0))return 1;elsereturn 0;}//公历日期转农历日期的函数void SunToLunar(const stDateTime* pSunDay,stDateTime* pLunarDay) {int i=0;int SunDiff=0;int SpringDiff=0;int nSpringYear=pSunDay->nYear;int nSpringMonth=1;int nSpringDay=0;//计算当前公历日离当年元旦的天数SunDiff = MonthAdd[pSunDay->nMonth-1] + pSunDay->nDay - 1;if(IsLeapYear(pSunDay->nYear) && (pSunDay->nMonth > 2) )//若是瑞年且大于月,天数再加SunDiff++;//计算春节所在公历日离元旦的天数:通过查表,计算当年的春节所在的公历日期,if(((LunarCalendarTable[pSunDay->nYear - 1901] & 0x60)>>5)==1)//若春节在公历月SpringDiff=(LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1;else//若春节在公历月SpringDiff=(LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1+31;//SunDiff和SpringDiff的差就是当前公历日离春节的天数if(SunDiff>=SpringDiff)//公历日在春节后{int x = SunDiff - SpringDiff;int bLunar = (LunarCalendarTable[nSpringYear - 1901] & 0xF00000)>>20;//闰月月份i=0;nSpringMonth=1;for(;;){int a = (LunarCalendarTable[pSunDay->nYear-1901] & (0x80000>>i));//计算大小月if(a==0)a=29;elsea=30;if(x<a)break;x =x - a;i++;nSpringMonth++;}nSpringDay =x+1;//如果有闰月if(nSpringMonth>bLunar && bLunar>0)nSpringMonth--;}else//公历日在春节前{int x = SpringDiff-SunDiff;int nShift=0;int bLunar = (LunarCalendarTable[nSpringYear - 1901] & 0xF00000)>>20;//闰月月份i=0;nSpringYear--;//需要上一年的农历信息nSpringMonth=12;//从最后一个月开始计算if (bLunar == 0)//如果没有润月nShift = 0x100;elsenShift = 0x80;for(;;){int a = (LunarCalendarTable[nSpringYear-1901] & (nShift<<i));//计算大小月if(a==0)a=29;elsea=30;if(x<a){x = a-x;break;}x =x - a;i++;nSpringMonth--;}nSpringDay =x+1;if(nSpringMonth<bLunar && bLunar>0)nSpringMonth++;}pLunarDay->nYear = nSpringYear;pLunarDay->nMonth= nSpringMonth;pLunarDay->nDay = nSpringDay;}//根据公历日期获得星期int GetDayOfWeek(const stDateTime* pSunDay){//根据泰勒公式//nWeek = [nYear1÷] - 2*nYear1 + nYear2 + [nYear2÷] + [26(nMonth+1)÷] + nDay - 1int nWeek=0;int nYear1=pSunDay->nYear/100;//年的前两位数字int nYear2=pSunDay->nYear%100;//年的后两位数字int nDay=pSunDay->nDay; //公立日int nMonth=pSunDay->nMonth;//公立月数,所求的月份如果是月或月,//则应视为上一年的月或月,//也就是公式中nMonth的取值范围是从到而不是从到if(nMonth==1 || nMonth==2){nMonth=12+nMonth;nYear1=(pSunDay->nYear-1)/100;//年的前两位数字nYear2=(pSunDay->nYear-1)%100;//年的后两位数字}nWeek = nYear1/4 - 2*nYear1 + nYear2 + nYear2/4 + (26*(nMonth+1))/10 + nDay - 1;if(nWeek < 0)nWeek = ((nWeek)%7+7);// 有问题吗?nWeek可能小于零,循环加elsenWeek = (nWeek)%7;return nWeek;}//根据公立年得到农历干支年char* GetGanZhi(int nYear){int i=(nYear-1984)%60;return TianGanDizhi[i];}//日历绘制函数,学生自己实现该函数void DrawCalendar(HDC hDC,int nWidth,int nHeight){//获得日历的背景色stDateTime SunDay,LunarDay; //存储当时年月日SYSTEMTIME DateTime; //系统时间RECT rc;HBRUSH hBrush;HFONT hFont;TCHAR RILI[255]; //日历的标题TCHAR GraTime[255]; //表格日期UINT xOrg=50; //x起始坐标UINT yOrg=50; //y起始坐标UINT xRight=nWidth-45; //X的右端不包括UINT yBottom = nHeight-30; //Y的底部UINT i=0,biaoGe=0; //日历表格用TCHAR *WeekDay[] = {"日","一","二","三","四","五","六"};TCHAR *ShuXiang[]= {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};UINT Week=0;//列数UINT Hang=0;//行数TCHAR Str[255];//农历和公历年月字符UINT week=0;UINT hangkuan=0,liekuan=0;UINT First=0;UINT xLeft=0;UINT yRigth=0;UINT ShengXiao=0;UINT BeiJing=0;HBITMAP hBkmap;//得到图片HDC hdc;//绘制日历的矩形背景(改变皮肤)hdc = CreateCompatibleDC(hDC);switch (nCurrentMonth%12){case 0:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/yiyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 1:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/eryue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 2:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/sanyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;break;case 3:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/siyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 4:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/wuyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 5:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/liuyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;break;case 6:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/qi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 7:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/ba.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 8:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/jiu.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 9:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 10:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shiyi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 11:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shier.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;}SelectObject(hdc,hBkmap);BitBlt(hDC,0,0,nWidth,nHeight,hdc,0,0,SRCCOPY);SetRect (&rc,xOrg+65,yOrg,xRight-65,yOrg+25);hBrush=CreateSolidBrush(RGB(230,0,150));FillRect(hDC,&rc,hBrush);SetRect (&rc,xOrg,yOrg,xOrg+65,yOrg+25);hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);SetRect (&rc,xRight-65,yOrg,xRight,yOrg+25);hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);//绘制星期背景色MoveToEx(hDC,xOrg,yOrg,NULL);LineTo(hDC,xRight,yOrg);MoveToEx(hDC,xOrg,yOrg,NULL);LineTo(hDC,xOrg,yBottom);MoveToEx(hDC,xRight,yOrg,NULL);LineTo(hDC,xRight,yBottom);MoveToEx(hDC,xOrg,yBottom,NULL);LineTo(hDC,xRight,yBottom);//星期标题框MoveToEx(hDC,xOrg,yOrg+25,NULL);LineTo(hDC,xRight,yOrg+25);//行biaoGe = yBottom-yOrg-25;//只是日历的高度biaoGe = biaoGe/6;//高度分为六块hangkuan=biaoGe;for(i=0;i<5;i++)//画五行{MoveToEx(hDC,xOrg,yOrg+25+biaoGe*(i+1),NULL);LineTo(hDC,xRight,yOrg+25+biaoGe*(i+1));}//列biaoGe = xRight-xOrg;//只是日历的宽度biaoGe = biaoGe/7;//要七列liekuan=biaoGe;for(i=0;i<6;i++)//画七列{MoveToEx(hDC,xOrg+biaoGe*(i+1),yOrg,NULL);LineTo(hDC,xOrg+biaoGe*(i+1),yBottom);}//绘制‘星期’标题框内的文字SetTextColor(hDC,RGB(255,0,0));TextOut(hDC,xOrg+20,yOrg+6,WeekDay[0],strlen(WeekDay[0]));//星期日的//绘制“属相”的文字SetTextColor(hDC,RGB(0,100,255));switch((nCurrentYear-4)%12)//jisuan{case 0:TextOut(hDC,xOrg-35,yOrg,ShuXiang[0],strlen(ShuXiang[0]));break;case 1:TextOut(hDC,xOrg-35,yOrg,ShuXiang[1],strlen(ShuXiang[1]));break;case 2:TextOut(hDC,xOrg-35,yOrg,ShuXiang[2],strlen(ShuXiang[2]));break;case 3:TextOut(hDC,xOrg-35,yOrg,ShuXiang[3],strlen(ShuXiang[3]));break;case 4:TextOut(hDC,xOrg-35,yOrg,ShuXiang[4],strlen(ShuXiang[4]));break;case 5:TextOut(hDC,xOrg-35,yOrg,ShuXiang[5],strlen(ShuXiang[5]));break;case 6:TextOut(hDC,xOrg-35,yOrg,ShuXiang[6],strlen(ShuXiang[6]));break;case 7:TextOut(hDC,xOrg-35,yOrg,ShuXiang[7],strlen(ShuXiang[7]));break;case 8:TextOut(hDC,xOrg-35,yOrg,ShuXiang[8],strlen(ShuXiang[8]));break;case 9:TextOut(hDC,xOrg-35,yOrg,ShuXiang[9],strlen(ShuXiang[9]));break;case 10:TextOut(hDC,xOrg-35,yOrg,ShuXiang[10],strlen(ShuXiang[10]));break;case 11:TextOut(hDC,xOrg-35,yOrg,ShuXiang[11],strlen(ShuXiang[11]));break;}SetTextColor(hDC,RGB(0,0,0));for(i=1;i<6;i++)//星期一到六{TextOut(hDC,xOrg+20+biaoGe*i,yOrg+6,WeekDay[i],strlen(WeekDay[i ]));}SetTextColor(hDC,RGB(255,0,0));TextOut(hDC,xOrg+20+biaoGe*6,yOrg+6,WeekDay[6],strlen(WeekDay[6 ]));//以下代码是公历显示if(nCurrentYear==0)//如果当前日期还没有被设定{GetLocalTime(&DateTime);nCurrentYear = DateTime.wYear;nCurrentMonth= DateTime.wMonth;nCurrentDay =DateTime.wDay;}SunDay.nYear = nCurrentYear;SunDay.nMonth = nCurrentMonth;SunDay.nDay = nCurrentDay;SunToLunar(&SunDay,&LunarDay);//得到农历TextOut(hDC,80,28,ChMonthTable[LunarDay.nMonth],strlen(ChMonthTable[LunarDay.nMonth]));//农历显示TextOut(hDC,110,28,"月",strlen("月"));SunDay.nDay = 1;wsprintf(GraTime,"%.4d年%.2d月%.2d日",nCurrentYear,nCurrentMonth,nCurrentDay);//现在时间TextOut(hDC,50,10,GraTime,strlen(GraTime));//标题的时间//十二生肖图片hdc = CreateCompatibleDC(hDC);switch((nCurrentYear-4)%12){case 0:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/0.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 1:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 2:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/2.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 3:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/3.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 4:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/4.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 5:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/5.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 6:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/6.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 7:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/7.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 8:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/8.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 9:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/9.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 10:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/10.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 11:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/11.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;}SelectObject(hdc,hBkmap);BitBlt(hDC,7,20,150,150,hdc,0,0,SRCCOPY);//该月的总天数if(SunDay.nMonth==12){//PreTotal=30;Total=31;elseTotal=MonthAdd[SunDay.nMonth]-MonthAdd[SunDay.nMonth-1];if(IsLeapYear(SunDay.nYear)&&SunDay.nMonth==2){Total++;}//前一月的总天数if(SunDay.nMonth==1)PreTotal=31;else if(SunDay.nMonth==3){PreTotal=28;if(IsLeapYear(SunDay.nYear))PreTotal++;}else if(SunDay.nMonth==12)PreTotal=30;elsePreTotal=MonthAdd[SunDay.nMonth-1]-MonthAdd[SunDay.nMonth-2];First=GetDayOfWeek(&SunDay); //该月的第一天是星期几for(i=1;i<=Total;i++){SunDay.nYear = nCurrentYear;SunDay.nMonth = nCurrentMonth;SunDay.nDay=i; //从一号开始week=GetDayOfWeek(&SunDay);//得到该月第i号是星期几 SunToLunar(&SunDay,&LunarDay);//得到农历Week=week%7; //从第Week列开始Hang=((First+i-1)-(First+i-1)%7)/7; //从第Hang行开始xLeft=xOrg+15+(Week)*liekuan;yRigth=yOrg+40+(Hang)*hangkuan;if(DateTime.wYear==SunDay.nYear&&DateTime.wMonth==SunDay.nMonth &&DateTime.wDay==i)//显示今天{SetRect (&rc,xOrg+(Week)*liekuan,yOrg+25+(Hang)*hangkuan,xOrg+(Week)*liekuan+liekuan,yOrg+25+(Hang)*hangkuan+hangkuan) ;hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);}if(nCurrentYear==SunDay.nYear&&nCurrentMonth==SunDay.nMonth&&nC urrentDay==i)//动态显示每一天{SetRect (&rc,xOrg+(Week)*liekuan,yOrg+25+(Hang)*hangkuan,xOrg+(Week)*liekuan+liekuan,yOrg+25+(Hang)*hangkuan+hangkuan) ;hBrush=CreateSolidBrush(RGB(255,255,0));FillRect(hDC,&rc,hBrush);}SetTextColor(hDC,RGB(0,0,255));//节日颜色if(SunDay.nMonth==1&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"元旦",strlen("元旦"));//显示公历}else if(SunDay.nMonth==2&&SunDay.nDay==14){TextOut(hDC,xLeft,yRigth,"情人节",strlen("情人节"));}else if(SunDay.nMonth==5&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"劳动节",strlen("劳动节"));else if(SunDay.nMonth==5&&SunDay.nDay==4){TextOut(hDC,xLeft,yRigth,"青年节",strlen("青年节"));}else if(SunDay.nMonth==9&&SunDay.nDay==10){TextOut(hDC,xLeft,yRigth,"教师节",strlen("教师节"));}else if(SunDay.nMonth==10&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"国庆节",strlen("国庆节"));}else if(SunDay.nMonth==11&&SunDay.nDay==11){TextOut(hDC,xLeft,yRigth,"光棍节",strlen("光棍节"));}else if(SunDay.nMonth==11&&SunDay.nDay==24){TextOut(hDC,xLeft,yRigth,"感恩节",strlen("感恩节"));}else if(SunDay.nMonth==12&&SunDay.nDay==25){TextOut(hDC,xLeft,yRigth,"圣诞节",strlen("圣诞节"));}else{wsprintf(Str,"%i",i);SetTextColor(hDC,RGB(0,0,255));TextOut(hDC,xLeft,yRigth,Str,strlen(Str));//显示公历}//显示农历SetTextColor(hDC,RGB(0,0,255));//节日颜色if(LunarDay.nMonth==1&&LunarDay.nDay==1){TextOut(hDC,xLeft,yRigth+15,"春节",strlen("春节"));//农历显示else if(LunarDay.nMonth==1&&LunarDay.nDay==15){TextOut(hDC,xLeft,yRigth+15,"元宵节",strlen("元宵节"));//农历显示}else if(LunarDay.nMonth==5&&LunarDay.nDay==5){TextOut(hDC,xLeft,yRigth+15,"端午节",strlen("端午节"));//农历显示}else if(LunarDay.nMonth==9&&LunarDay.nDay==15){TextOut(hDC,xLeft,yRigth+15,"中秋节",strlen("中秋节"));//农历显示}else if(LunarDay.nMonth==9&&LunarDay.nDay==9){TextOut(hDC,xLeft,yRigth+15,"重阳节",strlen("重阳节"));//农历显示}else{SetTextColor(hDC,RGB(255,255,0));if(LunarDay.nDay==1)//月初改为月名{TextOut(hDC,xLeft,yRigth+15,ChMonthTable[LunarDay.nMonth],strlen(ChMonthTable[LunarDay.nMonth]));TextOut(hDC,xLeft+20,yRigth+15,"月",strlen("月"));}elseTextOut(hDC,xLeft,yRigth+15,ChDayTable[LunarDay.nDay],strlen(ChDayTable[LunarDay.nDay]));//农历显示}}//forhFont=CreateFont(44,20,0,100,FW_NORMAL,TRUE,0,0,ANSI_CHARSET,OU T_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_MODERN, "华文新魏"); //字体输出格式SelectObject(hDC,hFont);SetTextColor(hDC,RGB(50,50,255));wsprintf(RILI,"My>>万年历>> ");TextOut(hDC,200,10,RILI,10);}//事件函数:点击日历界面上各个按钮后被调用,学员自己实现该函数//注意:该函数调用完后,系统自动调用DrawCalendar函数// 因此,可以理解为,该函数和DrawCalendar函数是联动的void CalendarButtonEvent(UINT nID,HWND hDlg) //学生需要修改此函数{TCHAR Hours[255];int temp1;switch (nID){case IDC_BTN_YEARUP://点击了"年↑"按钮nCurrentYear++;break;case IDC_BTN_YEARDOWN:nCurrentYear--;break;case IDC_BTN_MONTHUP:{nCurrentMonth++;if(nCurrentMonth>12){nCurrentYear+=1;nCurrentMonth=1;}}break;case IDC_BTN_MONTHDOWN:{if(nCurrentMonth==1){nCurrentYear--;nCurrentMonth=12;}elsenCurrentMonth--;}break;case IDC_BTN_TODAY://GetDlgItemText(hDlg,IDC_BELL,Hours,sizeof(Hours));//nCurrentYear = atoi(Hours);nCurrentYear=0;break;case IDC_BUTTON_Day1://动态显示显示每一天{nCurrentDay++;if(nCurrentDay>Total){nCurrentDay=1;nCurrentMonth++;if(nCurrentMonth>12){nCurrentYear+=1;nCurrentMonth=1;}}}break;case IDC_BUTTON_Day2://动态显示显示每一天{nCurrentDay--;if(nCurrentDay<=0)nCurrentDay=PreTotal;nCurrentMonth--;if(nCurrentMonth==0){nCurrentYear--;nCurrentMonth=12;}}}break;case IDC_PLAYSONG:k++;{switch ( k%3){case 0:mciSendString("stop ../image/sound/b.mp3","",0,NULL); mciSendString("play ../image/sound/a.mp3","",0,NULL);break;case 1:mciSendString("stop ../image/sound/a.mp3","",0,NULL); mciSendString("play ../image/sound/y.mp3","",0,NULL);break;case 2:mciSendString("stop ../image/sound/y.mp3","",0,NULL); mciSendString("play ../image/sound/b.mp3","",0,NULL);break;}}break;case IDC_BUTTON6:m++;{switch ( m%3){case 0:mciSendString("pause ../image/sound/a.mp3","",0,NULL);break;case 1:mciSendString("pause ../image/sound/y.mp3","",0,NULL);break;case 2:mciSendString("pause ../image/sound/b.mp3","",0,NULL);break;}}break;case IDC_BUTTON_BELL:GetDlgItemText(hDlg,IDC_EDIT_YEAR,Hours,sizeof(Hours));temp1 = atoi(Hours);nCurrentYear = temp1;nCurrentMonth = 1;break;}}//该函数每.5秒被调用一次,时钟界面上的文字绘制,学生自己实现该函数void DrawClockText(HDC hDC){ //TCHAR year[255];//获得本地年月日时间stDateTime DateTime;stDateTime DateTime1,DateTime2; //得到公历农历日期 TCHAR HTime[255]; //存储时分秒TCHAR YTime[255]; //存储年TCHAR MTime[255]; //存储月TCHAR DTime[255];TCHAR TGAN[255]; //获得天干地支SYSTEMTIME LocTime; //定义当地时间RECT rec;HBRUSH hBrush;HFONT hfon;GetClientRect(hDC,&rec) ; //得到背影区域SetRect (&rec,33,52,94,65) ; //设置这块区域hBrush = CreateSolidBrush( RGB(0,0,222)); //建立画刷颜色FillRect(hDC,&rec,hBrush);SetBkMode(hDC,TRANSPARENT); //设置背景涂画,以备下次调用//获取星期和时间(时分秒)SetTextColor(hDC,RGB(111,208,252)); //字体颜色GetLocalTime(&LocTime);wsprintf(HTime,"%.2d:%.2d:%.2d",LocTime.wHour,LocTime.wMinute,L ocTime.wSecond);SetTextColor(hDC,RGB(235,255,0));SetBkMode(hDC,3);TextOut(hDC,35,50,HTime,8) ;//获得星期GetLocalTime(&LocTime);if(LocTime.wHour==Inthour)mciSendString("play ../image/sound/12.mp3","",0,NULL);//整点报时if(LocTime.wSecond==0&&LocTime.wMinute==0){switch(LocTime.wHour){case 6:mciSendString("play ../image/sound/06.mp3","",0,NULL);break;case 7:mciSendString("play ../image/sound/07.mp3","",0,NULL);break;case 8:mciSendString("play ../image/sound/08.mp3","",0,NULL);break;case 9:mciSendString("play ../image/sound/09.mp3","",0,NULL);break;case 10:mciSendString("play ../image/sound/10.mp3","",0,NULL);break;case 11:mciSendString("play ../image/sound/11.mp3","",0,NULL);break;case 12:mciSendString("play ../image/sound/12.mp3","",0,NULL);break;case 13:mciSendString("play ../image/sound/13.mp3","",0,NULL);break;case 14:mciSendString("play ../image/sound/14.mp3","",0,NULL);break;case 15:mciSendString("play ../image/sound/15.mp3","",0,NULL);break;case 16:mciSendString("play ../image/sound/16.mp3","",0,NULL);break;}}DateTime.nYear = LocTime.wYear ;DateTime.nMonth = LocTime.wMonth ;DateTime.nDay = LocTime.wDay ;SetTextColor(hDC,RGB(255,255,0));//字体颜色switch(GetDayOfWeek(&DateTime)){case 1:TextOut(hDC,41,69,"星期一",6) ;break;case 2:TextOut(hDC,41,69,"星期二",6) ;break;case 3:TextOut(hDC,41,69,"星期三",6) ;break;case 4:TextOut(hDC,41,69,"星期四",6) ;break;case 5:TextOut(hDC,41,69,"星期五",6) ;break;case 6:TextOut(hDC,41,69,"星期六",6) ;break;case 7:TextOut(hDC,41,69,"星期日",6) ;break;default:break;}//得到天干GetLocalTime(&LocTime);wsprintf(TGAN,GetGanZhi(LocTime.wYear));SetTextColor(hDC,RGB(250,100,100)); //字体颜色TextOut(hDC,48,89,TGAN,4);//获得农历的年月日GetLocalTime(&LocTime);DateTime1.nYear = LocTime.wYear ;DateTime1.nMonth = LocTime.wMonth ;DateTime1.nDay = LocTime.wDay ;SetTextColor(hDC,RGB(255,255,0));SunToLunar(&DateTime1,&DateTime2);//调用农历函数TextOut(hDC,70,35,ChDayTable[DateTime2.nDay],4);if(DateTime2.nMonth<11){TextOut(hDC,31,35,ChMonthTable[DateTime2.nMonth],2);TextOut(hDC,52,35,"月",2);}else{TextOut(hDC,31,35,ChMonthTable[DateTime2.nMonth],4);TextOut(hDC,52,35,"月",2);}//获得年GetLocalTime(&LocTime);hfon=CreateFont(13,0,380,67,FW_NORMAL,FALSE,0,0,ANSI_CHARSET,OU T_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, ("Arial")); //字体输出格式SelectObject(hDC,hfon);wsprintf(YTime,"%.4d",LocTime.wYear);SetTextColor(hDC,RGB(255,255,0)); //字体颜色TextOut(hDC,25,25,YTime,4);//得到月hfon=CreateFont(13,0,3400,67,FW_NORMAL,FALSE,0,0,ANSI_CHARSET,O UT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, ("Arial")); //字体输出格式SelectObject(hDC,hfon);wsprintf(MTime,"%.2d",LocTime.wMonth);SetTextColor(hDC,RGB(255,255,0)); //字体颜色TextOut(hDC,68,8,MTime,2);//得到日。
具有整点报时功能的可校时数字钟
![具有整点报时功能的可校时数字钟](https://img.taocdn.com/s3/m/3d0cd93431126edb6f1a100f.png)
第一章数字钟的工作原理第一节介绍20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品跟新换代的节奏也越来越快。
数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,节省了电能。
因此在许多电子设备中被广泛使用。
数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。
通过设计加深对刚刚学习了的数字电子技术的认识。
本次设计以数字电子为主,分别对一秒信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合来完成时、分、秒的显示并且具有整点报时和走时校时的功能。
并通过本场设计加深对数字电子技术的理解以及更熟练是有计数器、触发起和各种逻辑门电路的能力。
电路主要使用集成计数器,例如74LS160、CD4518、译码集成电路,例如CD4511、LED数码管及各种门电路和基本的触发器等,电路使用5号电池供电,很合适在日常生活中使用。
第二节设计方案论证方案一:采用小规模集成电路实现采用集成逻辑电路设计具有能实现,时分秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。
方案二:EDA技术实现采用EDA作为主控制外围电路进行电压,时钟控制键盘和LED控制,此方案逻辑电路复杂,且灵活性较低,不利于各种功能的扩展,在对电路进行检测比较困难。
方案三:单片机编程实现在按键较少的情况下,采用独立式4个按键,经软件设计指定的I/O 口,送出逻辑电平,控制数码管显示,根据数字电子钟的设计要求与原理以及特性,本系统采用单片机AT89C52串口输出的形式来设计电路,使功能及效果更完美。
数字电子钟--数电(带闹钟调节时间和整点报时)
![数字电子钟--数电(带闹钟调节时间和整点报时)](https://img.taocdn.com/s3/m/8eb51034bdd126fff705cc1755270722192e5901.png)
物理与电子工程学院课程设计题目:数字电子钟专业电子信息工程班级12级电信三班学号********学生姓名李长炳指导教师张小英张艳完成日期:2013 年7月数字电子钟前言:数字钟是一个将“时”、“分”、“秒’’显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和报时闹铃等功能。
一、基本原理时显示器分显示器秒显示器时译码器分译码器秒译码器时计数器分计数器秒计数器振荡器分频器主体电路1.1 振荡电路晶体振荡器的作用是产生时间标准信号。
我采用由门电路或555定时器构成的多谐振荡器作为时间标准信号源。
本系统中的振荡电路选用555定时器构成的多谐振荡器,见图1。
多谐振荡器的振荡频率可由式估算。
图11.2 时、分、秒显示电路模块设计①秒的产生采用74LS160产生60进制的加法计数器,输出端Q0,Q1,Q2,Q3分别接到七段数码管的相应的各端,由上图的555产生的秒脉冲链接秒的两个160的cp,第一片的进位来控制第二片的EP,ET来构成秒。
如下图所示图2注意:两个CP都是连接到555的输出。
②分的产生采用74LS160产生60进制的加法计数器,输出端Q0,Q1,Q2,Q3分别接到七段数码管的相应的各端,由上图的秒产生的进位连接秒的两个160的cp,第一片的进位来控制第二片的EP,ET来构成秒。
如下图所示图3注意:两个CP都是连接的秒的进位的输出。
③小时的产生采用74LS160产生24进制的加法计数器,输出端Q0,Q1,Q2,Q3分别接到七段数码管的相应的各端,由上图的分产生的进位连接秒的两个160的cp,第一片的进位来控制第二片的EP,ET来构成秒。
如下图所示图4注意:两个CP都是连接的秒的进位的输出。
1.3闹钟我设置的闹钟是00:03响的。
会响一分钟,采用与非门和或门组成的电路。
可以得出以下的电路图当达到00:03时就开始响,当不是00:03是就停止了,喇叭一端节地。
手机整点报时怎么设置方法
![手机整点报时怎么设置方法](https://img.taocdn.com/s3/m/50aaba6b443610661ed9ad51f01dc281e53a569c.png)
手机整点报时怎么设置方法手机作为我们日常生活中不可或缺的工具,除了通讯、娱乐功能之外,还可以作为我们的报时工具。
在某些特定的场合,我们可能需要手机进行整点报时,那么手机整点报时怎么设置呢?接下来,我将为大家详细介绍手机整点报时的设置方法。
首先,我们需要打开手机的时钟应用。
大部分手机都会预装时钟应用,如果您的手机没有预装时钟应用,可以前往应用商店进行下载安装。
接着,我们进入时钟应用后,找到“闹钟”功能。
在“闹钟”功能中,我们可以设置手机的整点报时功能。
在“闹钟”功能中,我们可以选择“新建闹钟”来设置新的报时闹钟。
在新建闹钟界面中,我们可以设置报时的时间。
在时间设定中,我们选择整点的时间,比如每天的8点、9点、10点等等。
这样手机在设定的时间到达时,会自动进行报时提醒。
另外,在设置报时的时间之后,我们可以选择报时的铃声。
手机通常会预装一些铃声,我们可以在铃声列表中选择自己喜欢的铃声作为整点报时的提醒音。
除了选择铃声之外,有些手机还支持自定义铃声。
如果您有特殊的整点报时铃声,可以将其设置为报时铃声,这样会更加个性化和有趣。
在设置完报时时间和报时铃声之后,我们还可以选择是否开启震动提醒。
有些时候,我们可能处于会议、演讲等需要安静的场合,这时开启震动提醒会更加贴心。
另外,在一些特殊情况下,我们可能需要暂时关闭整点报时功能。
在这种情况下,我们可以选择“暂停闹钟”来暂时关闭整点报时功能,等到需要再次开启即可。
总的来说,手机整点报时的设置方法非常简单。
通过时钟应用中的闹钟功能,我们可以轻松地设置整点报时的时间和铃声,让手机成为我们生活中的贴心小助手。
希望以上内容对大家有所帮助,谢谢阅读!。
十二小时数字电子钟介绍
![十二小时数字电子钟介绍](https://img.taocdn.com/s3/m/5b6abce65fbfc77da269b1a0.png)
十二小时数字电子钟
目录
第 1 章 总电路初步设计...............................................................1
1.1 设计内容以及要求...................................................................................................................................... 1 1.2 系统框图.......................................................................................................................................................4 1.3 设计方案.................................................................................................................................................... 5 1.4 设计过程.................................................................................................................................................... 5
十二小时数字电子钟
摘要 这个设计主要以数字电路的基础理论、低频电子线路为指导,采用中、小规模的 集成器件 LM555、CD4060、74LS161 和 LS248 设计而成。该电路采用模块设计、分模块 安装、调试等方法设计而成,所选用的器件主要是中小规模的集成芯片,本产品由于 采用多片 74LS 系列的集成芯片组成,生产成本低等原因,使这个产品设计既容易实现, 又不会浪费太多成本。 产品由石英晶体振荡器产生频率可以调节的时钟脉冲信号,经十五分频得到秒信 号脉冲作为数字钟计数器的时钟信号,当到达整点前一秒时,电路通过一个蜂鸣器准 时报时。这个电路还可以通过手动,即过拨动开关来选择是否进行时间较准。 关键词:电子钟、分频,计数、驱动
具有整点报时功能的数字钟 电子设计
![具有整点报时功能的数字钟 电子设计](https://img.taocdn.com/s3/m/b8270eda6f1aff00bed51e33.png)
目录1 绪论 (1)2 设计主体 (1)2.1 振荡器 (1)2.1.1 555定时器的电路结构及工作原理 (2)2.1.2 用555定时器构成多谐振荡器 (4)2.2 分频器 (5)2.3 校正电路 (6)2.3.1 校“秒”电路 (7)2.3.2 校“分”电路 (7)2.3.3 校“时”电路 (8)2.4 整点报时电路 (8)2.5 计数器、译码器和显示器 (9)3 心得体会 (10)参考文献 (12)具有整点报时功能的数字钟1 绪论数字钟是集模拟技术与数字技术为一体的一种综合应用。
数字钟与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用,数字电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序逻辑电路。
此次设计数字电子钟是为了了解数字电子钟的原理,从而学会制作数字电子钟,而且通过数字电子钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实现方法,且由于数字电子钟电路包括组合逻辑电路和时序逻辑电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。
2 设计主体数字钟是用计数器、译码器和显示器等集成电路实现“时”、“分”、“秒”按照数字方式显示的计数装置,主要由振荡器、分频器、校正电路、计数器、译码器和显示器六部分组成,如框图2-1所示。
图2-1 数字钟框图2.1 振荡器振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路,也可以选择555定时器。
我在这里选择的是555定时器。
555定时器是一种应用极为广泛的中规模集成电路,因集成电路内部含有3个5KΩ电阻而得名。
该电路使用灵活、方便,只需接少量的阻容元件就可以构成施密特触发器、单稳态触发器和多谐振荡器,且价格便宜。
555定时器广泛应用于信号的产生、变换、控制与检测。
目前生产的555定时器有双极型和CMOS两种类型,主要厂商生产的产品有NE555、FX555、LM555和C7555等,它们的结构和工作原理大同小异,引出线也基本相同,有的还有双电路封装,称为556。
数电课设《数字钟》
![数电课设《数字钟》](https://img.taocdn.com/s3/m/de61d1de3186bceb19e8bba8.png)
数字钟的设计内容摘要数字电子钟是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械时钟相比,它一般具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表、电子闹钟,大到车站﹑码头﹑机场等公共场所的大型数字显电子钟。
本课程设计是要通过简单的逻辑芯片实现数字电子钟。
要点在于用555芯片连接输出为一秒的多谐振荡器用于时钟的秒脉冲,用74LS160(10进制计数器)、74LS00(与非门芯片)等连接成60和24进制的计数器,再通过数码管显示,构成简单数字时钟。
关键词数字时钟、计数器、555芯片、分频器一、设计要求1)要求准确显示“时”、“分”、“秒”,24小时制00:00:00~23:59:592)具有整点报时功能:在每小时59分51秒、53秒、55秒、57秒发出500HZ 的低音,59秒时发出1000HZ的高音。
3)具有校时功能:以1HZ频率对“时”、“分”进行校正,且互不影响。
二、总体方案1)功能实现利用555定时器组成的多谐振荡器经分频电路产生的1kHz作为电路的时基信号。
“时、分、秒”分别为二十四进制和两个六十进制计数法。
并用数码管显示时间,74LS160组成的计数器通过译码电路(7448)驱动数码管显示数据。
“分、秒”均为六十进制计数法,即显示“00~59”;“分、秒”的个位为十进制计数法,十位为六进制计数法;“分秒”模块功能的实现:用两片74LS160组成六十进制计数器。
“小时”模块则为二十四进制计数器,显示为“00~23”;个位仍为十进制计数法,而十位则为三进制计数法,但当十进位计到“2”,而个位计到“4”时个位十位清零,组成二十四进制计数法;“时”功能的实现:用两片74LS160组成24进制计数器。
2)总体方案结构图3)方案比较计数功能的实现主要有置数法和清零法两种方案。
置数法相对于清零法要稳定一些,74LS160的清零法采用异步清零方式,及异步清零端有效时,计数立即清零,而系统存在延时性可能出现显示错误。
多功能语音报时数字钟的设计 (4)
![多功能语音报时数字钟的设计 (4)](https://img.taocdn.com/s3/m/4b304993cf84b9d529ea7a04.png)
多功能语音报时数字钟的设计摘要:自进入21世纪以来,电子产业飞速发展,各种新兴的电子产品布满了电子专柜,电子产品几乎走进了家家户户,走进了社会的各个行业,有力的推动了社会生产力的发展和电子信息化、电子智能化的提高。
数字钟也在发生着各种各样的变化,由体积较大、功能少、运行不精确的机械钟变为在液晶显示屏上显示数字的数字钟,再到多种功能于一钟的语音报时数字钟等等。
本设计是实现一款可正常显示当前时间,测量当前温度,带有语音报时的多功能数字钟。
本设计是采用AT89C51单片机控制的多功能语音报时数钟,可以显示年、月、日、时、分、秒、星期、温度。
具有年、月、日、时、分校准功能,自动提取温度并显示功能,语音报时功能,调整时间按下相应键会发出嘟嘟提示声功能。
采用DS1302时钟芯片进行时钟控制,DS18B20传感器实现温度采集功能,LCD12864作为液晶显示模块,ISD1420语音芯片实现语音播报时间功能。
钟表的多功能化给我们生活带来了很大的改善,比如定时报警、备忘提醒、电气设备的自动断电、自动开启关闭等功能。
数字时钟对世界有着重要的影响,对工业、电子业、商业有着重要的推进作用,使用简单方便,成本低,显示直观,在广阔的市场具有非常很好的前景市场。
数字时钟之所以这么受广大的欢迎,它使用简单直观,数字时钟在显示方面能清楚的在LED显示屏上显示出年、月、日、周日、时、分、秒,还有调准时间的准确度的功能,并且能够显示当日的温度情况。
但目前市场上的数字时钟还比较机械性和传统性,在实际运用过程中不够灵活。
而随着社会的不断发展,人们对数字时钟的控制要求越来越高,数字时钟应用到很多方面,在报警和闹铃的方面都应用到数字时钟准确的计时功能,还有定时器,微波炉,自动通电器,数字时钟可以成为自己生活中的小助手,可以轻松掌控时间,又能了解天气及温度的变化。
语音报时多功能数字时钟改善了人们的生活质量,为人们的生活、工作带来极大的便利。
关键词:数字钟单片机温度液晶显示语音报时一、绪论时间对于我们每个人都很重要,包括老人和小孩,通过眼睛看时间,当然可以看到当前时间,但是对于视力不好老人和不认识钟表的小孩来说,语音报时数字钟就给他们带来了很大的帮助,只需要按下相应键就可以自动播报获得时间。
电脑时钟设计(整点报时)
![电脑时钟设计(整点报时)](https://img.taocdn.com/s3/m/a39d2fdc50e2524de5187e8f.png)
目录一、实训目的意义及任务要求 (2)1.1实训目的意义 (2)1.2任务要求 (2)二、实训方案 (3)2.1系统分析 (3)2.2设计思想 (3)三、系统硬件设计 (4)3.1最小单片机系统 (4)3.2复位电路 (4)3.3按键电路的设计 (5)3.4 显示电路 (5)3.5晶振电路 (7)3.6 蜂鸣器接口电路 (7)3.7 RS-232接口电路 (8)四、系统软件设计 (8)4.1 控制程序的结构及模块划分 (8)4.2实时时间子程序 (9)4.3秒表子程序 (10)4.4闹钟子程序 (10)4.5数码管显示子程序 (10)五、调式及性能分析 (11)5.1程序调试 (11)5.2性能分析 (11)六、心得体会 (12)参考文献 (12)附录一原理图 (13)附录二程序清单 (14)电脑时钟设计(整点报时功能)一、实训目的意义及任务要求1.1实训目的意义《单片机》是一门技术性的,具有很强应用性的课程。
实训教学是的一个它极其重要的环节。
单片机课程设计的目的就是为了让我们在理论学习的基础上,完成一系列的小设计。
这样可以巩固我们所学的理论知识,让我们能够很好的将实践与理论结合起来。
加强对单片机的软硬知识的了解,获得初步的经验,为以后的学习和工作打下基础。
1.2任务要求要求设计的电脑时钟完成以下功能:1.1基本功能(1)、实时显示当前时间(4位数码管显示,2位显示小时,2位显示分钟,第2位小数点0.5秒亮,0.5秒灭)。
(2)、半点及整点时间用蜂鸣器模仿自鸣钟报时,半点短鸣,整点长鸣对应的次数。
22点~6点不鸣。
(3)能修改当前时钟。
(4)具有秒表功能,显示秒和百分秒。
1.2 扩展功能(1)单片机与PC机的通讯(可选)(2)可设定初值的倒计时功能(可选)③闹钟及年月日显示功能(可选)2二、实训方案2.1系统分析数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。
标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。
具有整点报时功能的可校时数字钟EWB仿真
![具有整点报时功能的可校时数字钟EWB仿真](https://img.taocdn.com/s3/m/d5a15a22ccbff121dd36830b.png)
第一章课题的来源及意义第一节介绍20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品跟新换代的节奏也越来越快。
数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,因此在许多电子设备中被广泛使用。
电子钟是人们日常生活中常用的计时工具,而数字式电子钟又具有体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成计时及报时校时功能。
本次设计以数字电子为主,分别对一秒信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合来完成时、分、秒的显示并且具有整点报时和走时校时的功能。
并通过本次设计加深对数字电子技术的理解以及更熟练是有计数器、触发起和各种逻辑门电路的能力。
电路主要使用集成计数器,例如74LS161、CD4518;译码集成电路,例如CD4511、LED数码管及各种门电路和基本的触发器等,电路使用5号电池供电,很合适在日常生活中使用。
第二节目前研究现状在做这次设计前,首先了解了一些现在数字钟的研究状况,通过查找,我总结了下面一些方法,通过对比,我选择了适合自己的方法,来实现我的设计。
一、采用小规模集成电路实现采用集成逻辑电路设计具有能实现,时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。
二、EDA技术实现采用EDA作为主控制外围电路进行电压,时钟控制键盘和LED控制,此方案逻辑电路复杂,且灵活性较低,不利于各种功能的扩展,在对电路进行检测比较困难。
整点报时数字钟设计
![整点报时数字钟设计](https://img.taocdn.com/s3/m/85416092294ac850ad02de80d4d8d15abe2300e8.png)
整点报时数字钟设计随着时代的发展,流行于市场的钟表已从传统的机械钟表转变为数字式电子钟表。
数字式电子钟表大大提高了时间精度,并为人们带来了更加便利的使用体验。
然而,采用这种钟表需要特别注意的是,时刻要注意时间的走动,尤其是在许多场合下,如工作或学习中,需要有一款能够准确地报道时间的数字式电子钟表。
而本作品的整点报时数字钟设计,就是一款可以准确刻度时间,且更具音乐感和生活情致的电子钟表。
1. 设计思路我们最终设计产物的整点报时具有两大特点:一是时效性,即报时精准度高,可确保时间的同步;二是生活化,即通过更具音乐感和生活情致的方式,为用户带来更智能化的使用体验。
要达到这样的目标,我们在对市面现有数字式电子钟表的研究之后,结合了一些音乐元素和自然元素,包括音乐节奏、风铃的声响、鸟叫等元素,使得报时不再是单调的数字,而是融合了生活情致和音乐美的元素,更具有鲜活感、动感和律动感。
2. 设计结构整点报时数字钟表的机体主要以硬质方钢制作,设计上建议以角线为基座,以便于摆放和关注,同时便于整点报时的语音扩散。
时钟的底部会有音质强的喇叭,可保证报时时的语音声音清晰响亮。
整点报时的设计主要以人声报时为主,同时融合了自然元素。
例如,整点报时声音可以先是清脆悦耳的风铃声,然后缓慢地转入自然野外鸟鸣声,等到整点报时的时间来到,即可听到人声报时,并配合报时时刻的自然元素,如鸟鸣、风声、水声等等。
每当整点报时的时候,钟表的屏幕上会跳出一些短小的、浅色的动态图案,例如水滴、花朵、云朵等,以强化整点报时的视觉和整体氛围效果。
3. 设计功能整点报时数字钟表的功能非常多样化,除了传统的报时、时间设置、日期查询、闹钟等外,还可以设计一些更加细致的功能,比如定时播放,即在某个时候播放某个曲子,因此该数字钟还可有着音乐播放功能,用户可通过在工作上忙碌的时候,拥有一些音乐舒缓心情以及缓解疲劳的效果。
在音乐播放这个功能上,可以考虑先后加入美妙的钢琴曲、海浪声、电子音乐等,以及其它适合于不同情境使用的音乐元素,同时充分考虑到使用者的身体健康,可加入智能化的定时音乐享受,设定按需听音乐时间和音量大小等条件,以确保整点报时数字钟表的用户体验度和生活化程度。
整点报时数字钟
![整点报时数字钟](https://img.taocdn.com/s3/m/9177a45db52acfc788ebc908.png)
数字钟一、设计任务本任务为:数字钟。
设计任务具体内容如下:基本设计任务依据命题题意,本设计采用89C51进行24小时计时并显示。
要求其显示时间范围是00:00:00~23:59:59,具备有时分秒校准功能。
数字钟上面要带有闹钟,闹钟与时钟之间能随时切换,闹钟具备时分秒设置功能。
控制设计任务由于本设计采用手动校准时钟与手动设置闹钟方案,所以要求用较少的按键来达到切换闹钟与时钟、时钟时分秒校准、闹钟时分秒设置等功能。
软件设计任务数字钟的所有计时都要由软件控制实现。
用软件对几个按键所得信号进行相应改变,以控制时钟与闹钟的显示。
通过软件对闹钟与时钟进行比较,当时钟所显示时间与闹钟一样时,要启动报时模块。
三、总体设计经过对各个方案分析比较,最终确定总方案如图3-1所示。
该系统所有模块都由主单片机控制。
其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。
电机驱动采用L298驱动芯片控制。
用光电传感器对边线的探测来控制距离。
通过单片机的机器周期计算时间计数周期,以达到计时目的。
图3-1 系统方案图系统硬件电路设计3.1.1 显示及控制模块图3-4 语音报时模块系统软件设计3.2.1 软件计时的分析与计算单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。
由于51单片机是12分频,因此机器周期=晶振频率/12。
在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。
定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。
3.2.2 系统软件设计设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。
手机整点报时怎么设置方法
![手机整点报时怎么设置方法](https://img.taocdn.com/s3/m/bdcfc1975122aaea998fcc22bcd126fff7055d9b.png)
手机整点报时怎么设置方法在日常生活中,我们经常需要用到手机报时功能,尤其是在需要掌握时间的场合,比如做饭、上班、上课等等。
因此,设置手机整点报时功能对于很多人来说是非常有必要的。
接下来,我将为大家介绍手机整点报时的设置方法。
首先,我们需要打开手机的时钟应用。
在大多数手机上,时钟应用通常是默认安装的,一般可以在主屏幕上找到。
如果找不到,也可以通过在应用商店搜索“时钟”来下载安装。
接着,我们进入时钟应用后,找到设置功能。
在不同的手机品牌和系统版本中,设置功能的位置可能会有所不同,但通常都可以在时钟应用的界面上找到。
找到设置后,我们点击进入设置界面。
在设置界面中,我们可以找到报时功能的设置选项。
一般来说,报时功能会有开关控制,我们需要将报时功能打开。
在一些手机上,还可以设置报时的时间间隔,比如每小时报时、每半小时报时等等。
根据个人需求,我们可以选择合适的时间间隔。
除了时间间隔,有些手机还可以设置报时的方式。
一般来说,报时可以选择为语音报时或者振动报时。
语音报时就是在整点的时候,手机会发出语音报时的提示,而振动报时则是通过手机的振动来进行提示。
根据个人喜好,我们可以选择合适的报时方式。
在设置完报时功能后,我们可以返回时钟应用的主界面。
此时,我们可以等待到整点的时候,手机就会根据我们设置的方式进行报时了。
比如,如果我们设置了每小时报时,并选择了语音报时,那么在每个整点的时候,手机就会发出语音报时的提示。
需要注意的是,有些手机的报时功能可能会受到系统设置的影响。
比如,如果我们将手机调成了静音模式,那么报时功能可能会失效。
因此,在设置报时功能的同时,我们也需要留意手机的系统设置,确保报时功能能够正常使用。
总的来说,设置手机整点报时功能并不复杂,只需要通过简单的操作就可以轻松实现。
希望通过本文的介绍,大家能够顺利设置好手机的整点报时功能,让手机成为我们生活中的贴心小助手。
LED数字钟整点报时电路图
![LED数字钟整点报时电路图](https://img.taocdn.com/s3/m/c8ee298fd0d233d4b14e6987.png)
LED数字钟整点报时电路图本设计是一个显示时间的系统,所以三个计数器分别为60、60、12进制。
用拨码开关不同的组合分别控制调时、调分、正常计时三种不同的状态。
在调时、调分的过程中计数器间的CP脉冲被屏蔽掉,由单步脉冲代替CP输入;相反正常计时的时候,单步脉冲被屏蔽掉。
报时电路中,用减法计数器就可以实现报时的功能。
数字电子钟的设计一、绪论(一)引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。
尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。
注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。
手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。
所以,要制作一个定时系统。
随时提醒这些容易忘记时间的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
(二)论文的研究内容和结构安排本系统采用石英晶体振荡器、分频器、计数器、显示器和校时电路组成。
由LED 数码管来显示译码器所输出的信号。
采用了74LS系列中小规模集成芯片。
使用了RS触发器的校时电路。
总体方案设计由主体电路和扩展电路两大部分组成。
其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能。
【最新推荐】电台的整点报时-精选word文档 (5页)
![【最新推荐】电台的整点报时-精选word文档 (5页)](https://img.taocdn.com/s3/m/56a5f70a67ec102de3bd893c.png)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==电台的整点报时篇一:广播电台整点报时周一至周五整点报时06:00 一日之计在于晨,一天中的美好时光从早上开始。
07:00 早上七点,新的一天找到新的动力。
07:00 匆忙的早晨一袋牛奶、一只鸡蛋加上几片面包它就能为您提供一上午的能量。
现在是早上7点。
08:00 在工作和学习开始之前,喝杯水,它能促进代谢,帮助醒脑。
现在是早上8点。
09:00 繁忙而紧张的工作需要理清头绪,今天你做到了吗?现在是北京时间9点整10:00 工作中带着微笑,让微笑感染周围的人。
现在是北京时间上午10点整。
11:00 忙了一上午,抽个空,远眺下远方的绿色让眼睛得到适当的休息,现在是上午十一点。
12:00 又是一个交通小高峰,回家路上注意安全!现在是北京时间中午12点整。
13:00 午休小憩一会儿,下午的工作将事半功倍。
现在是北京时间下午1点整。
14:00 喝杯浓茶,振作精神,下午两点,有音乐的陪伴让工作更顺畅。
15:00 事都有着多面性,换个方向,或许你能发现更多答案。
现在是下午三点。
16:00 在忙碌中找寻休憩,在平淡中找寻快乐。
多一些快乐,少一丝束缚。
现在是下午四点 17:00 关爱他人,从小事开始。
现在是北京时间下午5点整。
18:00 下班高峰期,注意行车安全。
现在是北京时间旁晚6点。
19:00 关注时事动态,了解新闻大事,新闻联播更精彩。
20:00 在城市的夜空下,欣赏喧嚣的夜晚,现在是晚上八点。
21:00 让时间承载记忆,让岁月留下印记。
现在是北京时间晚上9点整。
22:00 喝一杯牛奶,融化一天的疲倦。
现在是北京时间晚上10点整。
23:00 寂静的深夜,依旧有好声音陪伴。
现在是北京时间晚上11点整。
24:00 静谧的午夜,道一声:“晚安"。
现在是晚上12点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字钟一、设计任务本任务为:数字钟。
设计任务具体内容如下:1.1 基本设计任务依据命题题意,本设计采用89C51进行24小时计时并显示。
要求其显示时间范围是00:00:00~23:59:59,具备有时分秒校准功能。
数字钟上面要带有闹钟,闹钟与时钟之间能随时切换,闹钟具备时分秒设置功能。
1.2 控制设计任务由于本设计采用手动校准时钟与手动设置闹钟方案,所以要求用较少的按键来达到切换闹钟与时钟、时钟时分秒校准、闹钟时分秒设置等功能。
1.3 软件设计任务数字钟的所有计时都要由软件控制实现。
用软件对几个按键所得信号进行相应改变,以控制时钟与闹钟的显示。
通过软件对闹钟与时钟进行比较,当时钟所显示时间与闹钟一样时,要启动报时模块。
三、总体设计经过对各个方案分析比较,最终确定总方案如图3-1所示。
该系统所有模块都由主单片机控制。
其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。
电机驱动采用L298驱动芯片控制。
用光电传感器对边线的探测来控制距离。
通过单片机的机器周期计算时间计数周期,以达到计时目的。
图3-1 系统方案图3.1 系统硬件电路设计3.1.1 显示及控制模块图3-4 语音报时模块3.2 系统软件设计3.2.1 软件计时的分析与计算单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。
由于51单片机是12分频,因此机器周期=晶振频率/12。
在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。
定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。
3.2.2 系统软件设计设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。
本设计有调用T0中断,并有以下子程序:void delay(void) //延时子程序void delay2(void) //1420专用延时子程序void play(unsigned char temp) //1420播放子程序void display(void) //显示子程序void rdisplay(void) //闹钟显示子程序void ring(void) //闹钟控制子程序void examring(void) //闹钟播放子程序void zhengdian(void) //整点报时子程序Ⅳ、测试结果及结果分析4.1 测试仪器及工具测试仪器及工具:电源一个。
4.2 测试步骤①、接上电源。
②、设定闹钟为00:01:00,并试听闹钟是否准确。
③、试听每次整点报时是否准确。
④、试验各按键功能是否正常。
4.3 测试结果如下闹钟与整点报时功能均正确无误,各按键功能均正常。
4.4 测试结果分析通过对测试数据的分析,可以看出,数字钟能实现时钟计时,并带有闹钟与整点报时功能,即数字钟已经实现了题目所给出的所有要求。
参考文献:1、胡汉才.单片机原理及其接口技术.北京:清华大学出版社,20052、阎石.数字电子技术基础.北京:高等教育出版社,20013、童诗白华成英.模拟电子技术基础.北京:高等教育出版社,20014、郁有文等.传感器原理及工程应用.西安:西安电子科技大学出版社,2008 附件一:参考程序如下:#include<at89x51.h>unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f};unsigned char code tab[]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf};unsigned char code ts[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40 ,0x48,0x50};unsigned char wei[]={0,1,2,3,4,5};unsigned char sec,min,hou,rsec,rmin,rhou,tcont; unsigned char a0,a1,a2;unsigned char smh;void delay(void) //延时子程序{ unsigned char i,j;for (i=10;i>0;i--)for(j=248;j>0;j--);}void delay2(void) //1420专用延时子程序{ unsigned char i,j,k;for (i=200;i>0;i--)for(j=248;j>0;j--)for(k=20;k>0;k--);}void play(unsigned char temp) //1420播放子程序{ P1=0;P3_0=1;P3_1=1;P1=temp;P3_1=0;delay2();P1=0;P3_1=1;}void display(void) //显示子程序{ for(a2=0;a2<6;a2++){ wei[0]=hou/10;wei[1]=hou%10;wei[2]=min/10;wei[3]=min%10;wei[4]=sec/10;wei[5]=sec%10;P2=tab[a2];P0=table[wei[a2]];delay();}}void rdisplay(void) //闹钟显示子程序{ for(a2=0;a2<6;a2++){ wei[0]=rhou/10;wei[1]=rhou%10;wei[2]=rmin/10;wei[3]=rmin%10;wei[4]=rsec/10;wei[5]=rsec%10;P2=tab[a2];P0=table[wei[a2]];delay();}}void ring(void) //闹钟控制子程序{ while(P3_5==0)rdisplay();smh=0;a0=0;while(a0==0){ rdisplay();if(P3_3==0){ delay();if(P3_3==0){ switch(smh){ case 0:rsec++;break;case 1:rmin++;break;case 2:rhou++;break;}if(rsec==60){ rsec=0;rmin++;}if(rmin==60){ rmin=0;rhou++;}if(rhou==24)rhou=0;}while(P3_3==0)rdisplay();}if(P3_2==0){ delay();if(P3_2==0){ switch(smh){ case 0:rsec--;break;case 1:rmin--;break;case 2:rhou--;break;}if(rsec==-1){ rsec=59;rmin--;}if(rmin==-1){ rmin=59;rhou--;}if(rhou==-1)rhou=23;}while(P3_2==0)rdisplay();}if(P3_4==0){ delay();if(P3_4==0)smh++;if(smh==3)smh=0;while(P3_4==0)rdisplay();}if(P3_5==0){ delay();if(P3_5==0)a0=1;while(P3_5==0)rdisplay();break;}}smh=0;}void examring(void) //闹钟播放子程序{ unsigned char i,j,k;if(sec==rsec){ if(min==rmin){ if(hou==rhou){P1=0;P3_0=1;P3_1=1;P1=0x70;P3_1=0;for (i=150;i>0;i--)display();P1=0;P3_1=1;P1=0;P3_0=1;P3_1=1;P1=0x70;P3_1=0;for (i=150;i>0;i--)display();P1=0;P3_1=1;P1=0;P3_0=1;P3_1=1;P1=0x70;P3_1=0;for (i=150;i>0;i--)display();P1=0;P3_1=1;P1=0;P3_0=1;P3_1=1;P1=0x70;P3_1=0;for (i=150;i>0;i--)display();P1=0;P3_1=1;}}}}void zhengdian(void) //整点报时子程序{ unsigned char dian;if(sec==0){ if(min==0){ dian=hou/10;if(dian==0){play(0x60);play(0x68);dian=hou%10;dian=ts[di an];play(dian);play(0x58);}if(dian==1){dian=hou%10;if(dian==0){play(0x60);play(0x68);play(0x50);pla y(0x58);}if(dian!=0){play(0x60);play(0x68);play(0x50);dia n=hou%10;dian=ts[dian];play(dian);play(0x58);}}if(dian==2){dian=hou%10;if(dian==0){play(0x60);play(0x68);play(0x10);pla y(0x50);play(0x58);}if(dian!=0){play(0x60);play(0x68);play(0x10);pla y(0x50);dian=hou%10;dian=ts[dian];play(dian);play(0 x58);}}}}}void main(void) //主程序{ unsigned char i;TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;tcont=0;sec=0;min=0;hou=0;rsec=0;rmin=0;rhou=0;smh=0;for (i=50;i>0;i--)display();while(1){ display();examring();zhengdian();if(P3_3==0){ delay();if(P3_3==0){ switch(smh){ case 0:sec++;break;case 1:min++;break;case 2:hou++;break;}if(sec==60){ sec=0;min++;}if(min==60){ min=0;hou++;}if(hou==24)hou=0;}while(P3_3==0)display();}if(P3_2==0){ delay();if(P3_2==0){ switch(smh){ case 0:sec--;break;case 1:min--;break;case 2:hou--;break;}if(sec==-1){ sec=59;min--;}if(min==-1){ min=59;hou--;}if(hou==-1)hou=23;}while(P3_2==0)display();}if(P3_4==0){ delay();if(P3_4==0)smh++;if(smh==3)smh=0;while(P3_4==0)display();}if(P3_5==0){ delay();if(P3_5==0)ring();}}}void t0(void) interrupt 1 using 0 //调用中断{ TH0=(65536-10000)/256;TL0=(65536-10000)%256;tcont++;if(tcont==100){ tcont=0;sec++;if(sec==60){ sec=0;min++;if(min==60){ min=0;hou++;if(hou==24)hou=0;}}}}附件二:总原理图如下:附件三:元器件清单元器件清单报表元件名称数量单片机AT89C51 一块语音芯片ISD1420 一块喇叭一个12M 晶振一个单排排针若干电容220 uF 5个47 uF 3 个10 uF 3 个47 nF 5 个33 pF 5 个电阻470K 5 个100K 5 个10K 10 个5.1K 5 个4.7K 10 个1K 5 个470 3 个大板子一块驻基体一个附表一元器件清单最新文件仅供参考已改成word文本。