整点报时数字钟

合集下载

时钟完整版(带整点报时)

时钟完整版(带整点报时)

#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);//得到日。

整点报时数字钟学习资料

整点报时数字钟学习资料

整点报时数字钟数字钟一、设计任务本任务为:数字钟。

设计任务具体内容如下: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 系统软件设计设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

具有整点报时功能的可校时数字钟

具有整点报时功能的可校时数字钟

第一章数字钟的工作原理第一节介绍20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品跟新换代的节奏也越来越快。

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,节省了电能。

因此在许多电子设备中被广泛使用。

数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。

通过设计加深对刚刚学习了的数字电子技术的认识。

本次设计以数字电子为主,分别对一秒信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合来完成时、分、秒的显示并且具有整点报时和走时校时的功能。

并通过本场设计加深对数字电子技术的理解以及更熟练是有计数器、触发起和各种逻辑门电路的能力。

电路主要使用集成计数器,例如74LS160、CD4518、译码集成电路,例如CD4511、LED数码管及各种门电路和基本的触发器等,电路使用5号电池供电,很合适在日常生活中使用。

第二节设计方案论证方案一:采用小规模集成电路实现采用集成逻辑电路设计具有能实现,时分秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。

方案二:EDA技术实现采用EDA作为主控制外围电路进行电压,时钟控制键盘和LED控制,此方案逻辑电路复杂,且灵活性较低,不利于各种功能的扩展,在对电路进行检测比较困难。

方案三:单片机编程实现在按键较少的情况下,采用独立式4个按键,经软件设计指定的I/O 口,送出逻辑电平,控制数码管显示,根据数字电子钟的设计要求与原理以及特性,本系统采用单片机AT89C52串口输出的形式来设计电路,使功能及效果更完美。

广播电台整点报时

广播电台整点报时

广播电台整点报时第一篇:广播电台整点报时周一至周五整点报时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点。

工作张弛有度,生活追求品质,第二篇:广播电台广播电台双簧:嘀嘀嘀嘀,哆!刚才最后一响是北京时间...看不清楚。

长沙市哈利油广播电台,短波二百五,中波不管三七二十一,调口味立体声现在已经开始播音啦。

eda整点报时时钟设计

eda整点报时时钟设计

EDA技术应用课程设计报告题目名称:多功能数字钟专业班级:姓名:学号:小组成员:指导教师:设计时间: 15-12-01~15-12-25 一、设计目的1.使得更加了解EDA的应用2.熟悉VHDL的编程。

3.对于编程语句的编辑与纠错有较大的提升4.提升对于设计方面的能力二、设计要求1.数字钟具有“时”、“分”、“秒”显示功能,其中时功能为24小时制。

2.数字钟具有校时和校分功能。

3.数字钟具有整点报时功能。

三、设计方案通过分别作出秒模块、分钟模块、小时模块、整点报时模块,导入动态扫描模块,再由其输出到数码管输出。

四、模块设计1.秒程序模块①有3输入3输出②reset为异步清零当没有信号时清零秒模块的计数③setmin为校分当有信号时想分模块进一位④daout_a与daout_b为输出的信号分别为秒的高位与低位⑤enmin 负责向下一个模块进位⑥clk为时钟信号2.分钟程序模块②3输入3输出②reset为异步清零当没有信号时清零分模块的计数③sethour为校分当有信号时向时模块进一位④daout_ma 分daout_mb 为输出的信号分别为分的高位与低位⑦enhour 负责向下一个模块进位⑧clk为时钟信号3.小时程序模块有2输入2输出②reset为异步清零当没有信号时清零时模块的计数③clk为时钟信号⑤daout_ha daout_hb 为输出的信号分别为时的高位与低位4.动态扫描模块①有八个输入端,两个输出端②reset为异步清零当没有信号时清零时模块的计数③daout为高位5.七段译码管模块①有1输入8输出②S为用来接收秒分时模块输出的信号③A~H 为转化后的信号用来接数码管6.整点报时模块①有5输入2输出②Clkspk为时钟信号③Miao_h Miao_lfen_hfen_h为从秒模块时模块接收的信号④Speak 接蜂鸣器,⑤Lamp 接LED作为报时时的闪烁灯五、模块程序1.秒模块设计(60计时制)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shijian isport(reset,clk,setmin:in std_logic;daout_a:out std_logic_vector(7 downto 4);————输出高位daout_adaout_b:out std_logic_vector(3 downto 0); ————输出低位daou_benmin:out std_logic);————enmin是向分位进位信号end shijian;architecture behav of shijian issignal count:std_logic_vector(3 downto 0);signal counter:std_logic_vector(3 downto 0);signal carry_out1:std_logic;————59秒时的进位信号signal carry_out2:std_logic;beginp1:process(reset,clk)beginif reset='0'then——59秒时的进位信号count<="0000";counter<="0000";——若reset为0时,则高、低位异步清零elsif(clk'event and clk='1')then——否则clk为上升沿时if(counter<5)thenif(count=9)thencount<="0000"counter<=counter+1;elsecount<=count+1;end if;carry_out1<='0';——若高位counter<5,低位count=9,则低位清零,高位进一,否则低位进一,59秒时的进位信号carry_out1为0。

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

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

.《数字电子技术》课程设计报告设计题目: 数字钟班级学号:1407080701221 1407080701216 1407080701218学生:志强企海清指导教师:周玲时间:2016.6.15-2016.6.16《数字电子技术》课程设计一、设计题目:数字钟的设计一、设计任务与要求:1.时钟显示功能,能够以十进制显示“时”、“分”、“秒”。

其中时为24进制,分秒为60进制。

2. 其他功能扩展:(1)设计一个电路实现时分秒校准功能。

(2)闹钟功能,可按设定的时间闹时。

(3)设计一个电路实现整点报时功能等。

在59分51秒、53秒、55秒、57秒输出750Hz 音频信号,在59分59秒时输出1000Hz信号,音频持续1s,在1000Hz荧屏结束时刻为整点。

二、设计方案:数字电子钟由石英晶体振荡器、分频器、计数器、译码器显示器和校时电路组成。

振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。

计数器的输出分别经译码器送显示器显示。

计时出现误差时,可以用校时电路校时、校分。

三、芯片选定及各单元功能电路说明:实验器材及主要器件(1)CC4511 6片(2)74LS90 5片(3)74LS92 2片(4)74LS191 1片(5)74LS00 5片(6)74LS04 3片(7)74LS74 1片(8)74LS2O 2片(9)555集成芯片1片(10)共阴七段显示器6片(11)电阻、电容、导线等若干①振荡器石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。

它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定。

这用压电谐振的频率即为晶体振荡器的固有频率。

数电课程设计数字钟的设计

数电课程设计数字钟的设计

数电课程设计数字钟的设计数电课程设计。

数字钟的设计。

1仿真电路显示时,分,秒。

2采用二十四小时制或者十二小时制。

3具有校时功能。

可以对小时和分单独校时,对分校时的时候,停止分向小时进位。

校时时钟源可以手动输入或借用电路中的时钟。

4具有正点报时功能,正点前10秒开始,蜂鸣器一秒响一秒停地响五次。

5为了保证计时准确,稳定,由晶体振荡器提供标准时间的基准信号。

本科生课程设计题目课程专业班级学号姓名指导教师完成时间数电课程设计。

数字钟的设计。

1仿真电路显示时,分,秒。

2采用二十四小时制或者十二小时制。

3具有校时功能。

可以对小时和分单独校时,对分校时的时候,停止分向小时进位。

校时时钟源可以手动输入或借用电路中的时钟。

4具有正点报时功能,正点前10秒开始,蜂鸣器一秒响一秒停地响五次。

5为了保证计时准确,稳定,由晶体振荡器提供标准时间的基准信号。

目录1设计的目的及任务 (3)1.1课程设计的目的...............................................(3)1.2课程设计的任务与要求 (3)2电路设计总方案及原理框图 (3)2.1数字电子钟基本原理...........................................(3)2.2原理框图.. (4)3.单元电路设计及元件选择 (4)3.1六十进制计数器..................................................(4)3.2二十四进制计数器................................................(5)3.3显示屏..........................................................(6)3 .4校时电路.. (6)3.5报时电路 (7)4电路仿真 (8)4.1Multii................................................... ......(8)4.2数字钟总电路图..................................................(8)4.3仿真电路测试结果 (9)5电路实验结果.............................................(10)6收获与体会. (10)参考文献 (11)数电课程设计。

数字钟 手机互动百科

数字钟 手机互动百科

数字钟手机互动百科各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢都是24小时计时法,组成结构是24时:00分。

还有12小时计时法12上午x:00分,其中x小于等于12,不小于0。

还有一些特殊的时间,如:午夜12点,可记作:24:00 或0:00 凌晨为0:00-1:00 下午12:00-1:00 (十二小时计时法)。

单片数字钟与多功能数字钟的区分单片数字钟近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用越来越普及了,并且由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,使单片机在电子和一些自动化行业中应用也越来越广泛了。

数字钟的组成模块主要由一个AT89C51单片机模块、用于放大信号来驱动数码管显示的SN74LS244N、用于显示时间的数码管显示模块、还有用于复位的按键部分,还有电源等部分组成。

多功能数字钟(一)基本功能:1.计时要12翻1,分,秒60进制。

数字钟2.准确计时,以数字形式显示时分秒的时间。

3.校正时间。

(二)扩展功能:1.定时控制。

2.仿广播电台报时功能。

3.自动整点报时。

4.触摸整点报时。

(三)音乐功能:到点会自动报时,有音乐享受。

用途基本用途可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。

这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,并便于功能的扩展,很精确。

由于电子钟一直是跳动的,所以最好选择方形的。

增值功能从相应管脚引出接线,加装机械或电子继电器,可以精确定时,即有定时功能。

可以触动收音机或闹音喇叭。

提供增值功能。

各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢。

电子技术数字时钟报告电路原理图

电子技术数字时钟报告电路原理图

电子技术课程设计报告设计题目:数字电子时钟班级:学生姓名:学号:指导老师:完成时间:一.设计题目:数字电子时钟二.设计目的:1.熟悉集成电路的引脚安排和各芯片的逻辑功能及使用方法;2.了解数字电子钟的组成及工作原理 ;3.熟悉数字电子钟的设计与制作;三、设计任务及要求用常用的数字芯片设计一个数字电子钟,具体要求如下:1、以24小时为一个计时周期;2、具有“时”、“分”、“秒”数字显示;3、数码管显示电路;4、具有校时功能;5、整点前10秒,数字钟会自动报时,以示提醒;6、用PROTEUS画出电路原理图并仿真验证;四、设计步骤:电路图可分解为:1.脉冲产生电路;2.计时电路;3.显示电路;4校时电路;5整点报时电路;1.脉冲电路是由一个555定时器构成的一秒脉冲,即频率为1HZ;电路图如下:2.计时电路即是计数电路,通过计数器集成芯片如:74LS192 、74LS161、74LS163等完成对秒脉冲的计数,考虑到计数的进制,本设计采用的是74LS192;秒钟个位计到9进10时,秒钟个位回0,秒钟十位进1,秒钟计到59,进60时,秒钟回00,分钟进1;分钟个位计到9进10时,分钟个位回0,分钟十位进1,分钟计到59,进60时,分钟回00,时钟进1;时钟个位记到9进10时,时钟个位回0,时钟十位进1,当时钟计数到23进24时,时钟回00.电路图如下:3.显示电路是完成各个计数器的计数结果的显示,由显示译码器和数码管组成,译码器选用的是4511七段显示译码器,LED数码管选用的是共阴极七段数码管,数码管要加限流电阻,本设计采用的是400欧姆的电阻;电路图如下:4.校时电路通过RS触发器及与非门和与门对时和分进行校准,电路图如下:5.整点报时电路即在时间出现整点的前几秒,数值时钟会自动提醒,本设计采用连续蜂鸣声;根据要求,电路应在整点前10秒开始整点报时,也就是每个小时的59分50秒开始报时,元器件有两个三输入一输出的与门,一个两输入一输出的与门,发生器件选择蜂鸣器;具体电路图如下:六.设计用到的元器件有:与非门74LS00,与门74LS08,74LS11,7段共阴极数码管,计数器芯片74LS192,555定时器,4511译码器,电阻,电容,二极管在电路开始工作时,对计数电路进行清零时会使用到,单刀双掷开关;设计电路图如报告夹纸;七.仿真测试:1.电路计时仿真电路开始计数时:计数从1秒到10秒的进位,从59秒到一分钟的进位,从1分到10分的进位,从59分到一小时的进位,从1小时到10小时的进位,从23小时到24小时的进位,然后重新开始由此循环,便完成了24小时循环计时功能,仿真结果如下:1. 7.2.8.3. 9.4. 10.5. 11.6. 12.13.2.电路报时仿真由电路图可知,U18:A和U18:B的6个输入引脚都为高电平时,蜂鸣器才会通电并发声,当计数器计数到59分50秒是,要求开始报时,而59分59秒时,还在报时,也就是说只需要检测分钟数和秒计数的十位,5的BCD码是4和1,9的BCD码是8和1,一共需要6个测端口,也就是上述的6个输入端口,开始报时时,报时电路状态如图:3.校时电路仿真正常计时校时U15:D和u15:C是一个选通电路,12角接的是秒的进位信号,9角接的是秒的脉冲信号,当SW1接到下引脚时,U15:D接通,u15:C关闭,进位信号通过,计数器的分技术正常计时;当SW1接到上引脚时,U15:D关闭,u15:C接通,校时的秒脉冲通过,便实现了分钟校时,时钟的校时与分钟校时大致相同;八.心得体会以及故障解决设计过程中遇到了一个问题,就是在校时电路开始工作时,校时的选择电路会给分钟和时钟的个位一个进位信号,也就是仿真开始时电路的分钟和时钟个位会有一个1;为了解决这个问题,我采用的是在电路开始工作时,同时给分钟和时钟的个位一个高电平的清零信号来解决,由于时钟的个位和十位的清零端是连在一起的,再加上分钟的个位,在校时小时的时候且当小时跳完24小时时,会给分钟的个位一个清零信号,这时在电路中加一个单向导通的二极管变解决了,具体加在那儿,请参考电路图;在设计过称中,我们也许遇到的问题不止一个两个,而我们要做的是通过努力去解决它;首先我们要具备丰富的基础知识,这是要在学习和实际生活中积累而成的;其次,我们还有身边的朋友同学老师可以请教,俗话说:三人行,必有我师;最后,我们还有网络,当今是个信息时代,网络承载信息的传递,而且信息量非常大,所以我们也可以适当的利用网络资源;通过这次对数字钟的设计与制作,让我了解了设计电路的步骤,也让我了解了关于数字钟的原理与设计理念,要设计一个电路总要先用仿真,仿真成功之后才实际接线;但是仿真是在一个比较好的状态下工作,而电路在实际工作中需要考虑到一些驱动和限流电阻等等,因为,再实际接线中有着各种各样的条件制约和干扰;而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功;所以,在设计时应考虑两者的差异,从中找出最适合的设计方法;这次学习让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解,才能在实际生活和工作中应用起来;。

线性代数实验 数字钟设计

线性代数实验 数字钟设计

实验十一数字钟设计一、实验目的1、掌握用中规模集成电路十进制,六进制,二十四进制计数器的设计方法。

2、设计一个能显示时、分、秒并可清零、调时及整点报时的数字钟。

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

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

目前,数字钟的功能越来越强,并且有多种专门的大规模集成电路可供选择。

本实验从学习的角度考虑,主要介绍以中小规模集成电路设计数字钟的方法。

数字钟是计时电路、译码显示电路、脉冲发生电路和控制电路灯几部分组成,其中控制电路按照设计要求可以由校时电路、报时电路组成,具体的组成原理框图如下图11.1所示:图11.1 数字钟组成原理图下面对数字钟的工作原理按图11.1中所示组成部分进行说明。

(1)脉冲发生电路脉冲发生电路为计时电路提供计数脉冲,因为设计的是数字钟,所以需要提供1Hz的脉冲信号,一般可以采用石英晶体振荡器和分频器构成。

如果精度要求不高,也可考虑采用集成逻辑门或555定时器来组成。

(2)计时电路计时电路由秒计数器、分计数器及时计数器电路构成,其中秒计数器、分计数器为60进制计数器,时计数器而为24进制计数器,一般采用10进制计数器如74LS160、74HC290等来实现。

(a)60进制计数器电路如下图11.2所示,由两片74160、一个4输入与非门和D触发器构成,图中,CP是计数脉冲输入端,CLRN是清零信号,低电平有效,Q7~Q4和Q3~Q0分别为计数值的十位和个位输出端,CO为进位输出信号。

74160是一位十进制同步加法计数器,MR、LOAD为其异步清零和同步置数端,RCO为其进位输出端。

当计数器计数到59 时,与非门输出低电平,两片74160的LOAD同时有效,下一个计数脉冲到来后,则“5”和“9”同时置零,则可实现60 进制计数。

具有整点报时功能的数字钟 电子设计

具有整点报时功能的数字钟 电子设计

目录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。

数电课设《数字钟》

数电课设《数字钟》

数字钟的设计内容摘要数字电子钟是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械时钟相比,它一般具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表、电子闹钟,大到车站﹑码头﹑机场等公共场所的大型数字显电子钟。

本课程设计是要通过简单的逻辑芯片实现数字电子钟。

要点在于用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的清零法采用异步清零方式,及异步清零端有效时,计数立即清零,而系统存在延时性可能出现显示错误。

基于单片机C语言电子时钟完整版(闹钟,整点报时)

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。

电脑时钟设计(整点报时)

电脑时钟设计(整点报时)

目录一、实训目的意义及任务要求 (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仿真

第一章课题的来源及意义第一节介绍20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品跟新换代的节奏也越来越快。

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点,因此在许多电子设备中被广泛使用。

电子钟是人们日常生活中常用的计时工具,而数字式电子钟又具有体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中广泛应用,因此本次设计就用数字集成电路和一些简单的逻辑门电路来设计一个数字式电子钟,使其完成计时及报时校时功能。

本次设计以数字电子为主,分别对一秒信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合来完成时、分、秒的显示并且具有整点报时和走时校时的功能。

并通过本次设计加深对数字电子技术的理解以及更熟练是有计数器、触发起和各种逻辑门电路的能力。

电路主要使用集成计数器,例如74LS161、CD4518;译码集成电路,例如CD4511、LED数码管及各种门电路和基本的触发器等,电路使用5号电池供电,很合适在日常生活中使用。

第二节目前研究现状在做这次设计前,首先了解了一些现在数字钟的研究状况,通过查找,我总结了下面一些方法,通过对比,我选择了适合自己的方法,来实现我的设计。

一、采用小规模集成电路实现采用集成逻辑电路设计具有能实现,时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。

二、EDA技术实现采用EDA作为主控制外围电路进行电压,时钟控制键盘和LED控制,此方案逻辑电路复杂,且灵活性较低,不利于各种功能的扩展,在对电路进行检测比较困难。

整点报时数字钟

整点报时数字钟

数字钟一、设计任务本任务为:数字钟。

设计任务具体内容如下:基本设计任务依据命题题意,本设计采用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 系统软件设计设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

LED数字钟整点报时电路图

LED数字钟整点报时电路图

LED数字钟整点报时电路图本设计是一个显示时间的系统,所以三个计数器分别为60、60、12进制。

用拨码开关不同的组合分别控制调时、调分、正常计时三种不同的状态。

在调时、调分的过程中计数器间的CP脉冲被屏蔽掉,由单步脉冲代替CP输入;相反正常计时的时候,单步脉冲被屏蔽掉。

报时电路中,用减法计数器就可以实现报时的功能。

数字电子钟的设计一、绪论(一)引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。

尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。

注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。

手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。

所以,要制作一个定时系统。

随时提醒这些容易忘记时间的人。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

(二)论文的研究内容和结构安排本系统采用石英晶体振荡器、分频器、计数器、显示器和校时电路组成。

由LED 数码管来显示译码器所输出的信号。

采用了74LS系列中小规模集成芯片。

使用了RS触发器的校时电路。

总体方案设计由主体电路和扩展电路两大部分组成。

其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)//延时子程序voiddelay2(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,0x7f,0x6f}; unsigned char code tab[]={0xfd,0xf b,0xf7,0xef,0xdf,0xbf};unsigned char code ts[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50};unsignedcharwei[]={0,1,2,3,4,5};unsigned charsec,min,hou,rsec,rmin,rhou,tcont;unsigned char a0,a1,a2;unsignedcharsmh;voiddelay(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--);}voidplay(unsignedchar temp) //1420播放子程序{ﻩP1=0;P3_0=1;P3_1=1;P1=temp;P3_1=0;ﻩdelay2();ﻩP1=0;P3_1=1;}voiddisplay(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();ﻩ}}voidring(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)ﻩﻩﻩ{ case0:ﻩﻩrsec--;ﻩﻩbreak;ﻩﻩcase 1:ﻩﻩrmin--;ﻩﻩbreak;ﻩﻩﻩcase2:ﻩﻩﻩ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) //闹钟播放子程序{ unsignedchar 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) //整点报时子程序{ unsignedchardian;ﻩif(sec==0)ﻩ{ if(min==0){dian=hou/10;ﻩif(dian==0){play(0x60);play(0x68);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}ﻩif(dian==1)ﻩ{dian=hou%10;ﻩif(dian==0){play(0x60);play(0x68);play(0x50);play(0x58);}ﻩif(dian!=0){play(0x60);play(0x68);play(0x50);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}ﻩﻩ}ﻩif(dian==2)ﻩ{dian=hou%10;ﻩﻩﻩif(dian==0){play(0x60);play(0x68);play(0x10);play(0x50);play(0x58);}ﻩﻩif(dian!=0){play(0x60);play(0x68);play(0x10);play(0x50);dian=hou%10;dian=ts[dian];play(dian);play(0x58);}ﻩﻩ}ﻩ}}}voidmain(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)ﻩ{ﻩcase0:ﻩﻩsec++;ﻩﻩbreak;ﻩﻩﻩﻩﻩcase 1:ﻩﻩmin++;ﻩﻩbreak;ﻩﻩcase2:ﻩﻩﻩ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;ﻩﻩﻩﻩcase1:ﻩﻩﻩmin--;ﻩﻩbreak;ﻩﻩcase2:ﻩﻩﻩ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 1using 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个33pF 5 个电阻470K 5 个100K 5个10K 10 个5.1K 5 个4.7K 10个1K 5 个470 3个大板子一块驻基体一个--附表一元器件清单11。

相关文档
最新文档