您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机电子时钟课设论文 1
电子时钟课程设计班级:机自081学号:200880724102姓名:罗兰秀完成日期:2011年06月18日摘要随着电子技术的飞速发展,单片机以体积小,性价比高,面向实时应用为特征;以不求规模大,力争小而全为宗旨;以在一块芯片上集成一台计算机为目的,而广泛应用于工业自动化、智能化仪表、电子产品等领域。单片机模块中最常见的是电子时钟,电子时钟是一种用DS1302芯片实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得电子时钟的精度,远远超过老式钟表,同时也扩展了钟表原先的报时功能。如定时自动报警、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,都是以钟表数字化为基础的。因此,研究电子时钟及扩大其应用,有着非常现实的意义。目录1、0··················课程设计的功能描述2、0··················课程设计分析设计3、0··················绘制硬件电路图并进行说明4、0··················绘制软件流程图并进行说明5、0··················程序的源代码清单6、0··················上机调试运行结果分析7、0··················课程设计经验教训总结8、0··················参考文献1.0课程设计功能描述该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、LED显示器等部件设计的一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。具体如下:在启动初,LED显示器可以显示设计学号,接下来显示在设计时设定的初始时间。K是复位开关,K0是移位开关,用于设置时间时的定位,从而可以分别对时、分、秒进行设置和校准,K1对时、分、秒进行增加调制,K2对时、分、秒进行减小调制,并通过LED显示器显示出来,从而完成对时间的设置,启动,暂停等控制。2、0课程设计分析设计单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。电子时钟是利用单片机内部的定时器\计数器来实现的,它的处理过程如下:首先设定单片机内部的一个定时器\计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器\计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来。数码管有静态显示方法和动态显示方法。本科舍采用动态显示方法。在具体处理时,定时器\计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。3、0绘制硬件电路图,并对硬件电路进行说明硬件电路图如下:3、1开关按钮K0是选择键,按第一次选择时,按第二次选择分,按第三次选择选择秒;K1递增开关,每按下一次数值增一;K2为递减开关,每按下一次数值减一。3、2蜂鸣器驱动电路为了使电子时钟能够进行整点报时,需要通过蜂鸣器的报警来提醒,因此在电路图中需要加入蜂鸣器。电路如下图所示:3、3上拉电阻:对电路和芯片起保护作用,防止电流过大造成损害。3、4复位电路复位电路分两种方式,分别是上电自动复位和按键手动复位。该课设应用的是手动复位。电路如下图所示:3、5电源电路单片机正常工作是+5V电压,采用USB供电。4、0绘制软件流程图并对软件流程图进行说明该课程设计采用C语言编程程序,程序设计框图如下:开始定时器、DS1302初始化是否有按键按下是否第一按键按下第二、三键进行加减通过按键次数对时、分、秒调时数码管进入调时界面并把数据写入DS1302数码管动态显示调用按键扫描函数YY定时器定时达到被调用初始化引脚状态RST=1启动DS1302写控制寄存器最低位SCLK发脉冲控制指令右移一位右移8次写发送数据最低位SCLK发脉冲发送数据右移一位右移8次调用返回YYYNN被调用初始化引脚状态RST=1启动DS1302写控制紫菱最低位SCLK发脉冲控制指令右移一位右移8次读数据字节SCLK发脉冲右移8次调用返回YYNN5、0程序源代码清单#includereg52.h#includeds1302.h#defineKeyPortP3//按键端口#defineDataPortP0//数据端口sbitLATCH1=P2^2;//段锁存sbitLATCH2=P2^3;//位锁存sbitP2_0=P2^0;//报警sbitP2_5=P2^5;sbitP2_7=P2^7;unsignedintpanduan,baojing;unsignedintbian1;//调时unsignedintbian2,bian3,bian4,bian5,bian6;//闹钟bitReadTimeFlag;//定义读时间标志unsignedintxianshi,shijian;//显示学好是用unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码unsignedcharTempData[8];//存储显示值的全局变量voidDelayUs2x(unsignedchart);//us级延时函数声明voidDelayMs(unsignedchart);//ms级延时voidDisplay(unsignedcharFirstBit,unsignedcharNum);//数码管显示函数+报警函数unsignedcharKeyScan(void);//键盘扫描voidInit_Timer0(void);//定时器初始化/*------------------------------------------------主函数------------------------------------------------*/voidmain(void){unsignedcharnum;//键盘扫描Init_Timer0();//定时器初始化Ds1302_Init();//DS1302初始化Ds1302_Write_Time();//向DS1302写入时钟数据while(1)//主循环{num=KeyScan();switch(num){case1:bian1++;if(bian1==4)bian1=0;break;//设置时间case2:if(bian1==1)//设置时间加1{time_buf1[4]++;if(time_buf1[4]==24)time_buf1[4]=0;Ds1302_Write_Time();//小时}elseif(bian1==2){time_buf1[5]++;if(time_buf1[5]==60)time_buf1[5]=0;Ds1302_Write_Time();//分}elseif(bian1==3){time_buf1[6]++;if(time_buf1[6]==60)time_buf1[5]=0;Ds1302_Write_Time();//秒}break;case3:if(bian1==1)//设置时间减1{time_buf1[4]--;if(time_buf1[4]==255)time_buf1[4]=23;Ds1302_Write_Time();//小时}elseif(bian1==2){time_buf1[5]--;if(time_buf1[5]==255)time_buf1[5]=59;Ds1302_Write_Time();//分}elseif(bian1==3){time_buf1[6]--;if(time_buf1[6]==255)time_buf1[5]=59;Ds1302_Write_Time();//秒}break;case4:bian2++;if(bian2==2)bian2=0;break;//切换显示、闹铃case5:bian3++;if(bian3==4)bian3=0;break;//设置闹钟时间case6:if(bian3==1)//加1{bian4++;if(bian4==24)bian4=0;//小时}elseif(bian3==2){bian5++;if(bian5==60)bian5=0;//分}elseif(bian3==3){bian6++;if(bian6==60)bian6=0;//秒}break;case7:if(bian3==1)//减1{bian4--;if(bian4==255)bian4=23;//小时}elseif(bian3==2){bian5--;if(bian5==255)bian5=59;//分}elseif(bian3==3){bian6--;if(bian6==255)bian6=59;//秒}break;case8:panduan++;if(panduan==2)panduan=0;if(panduan==1){baojing=1;}elsebaojing=0;default:break;}if(ReadTimeFlag==1){ReadTimeFlag=0;Ds1302_Read_Time();if(shijian==0)//显示制作着学好前六位{TempData[0]=0x5b;//2TempData[1]=0x3f;//0TempData[2]=0x3f;//0TempData[3]=0x7f;//8TempData[4]=0x7f;//8TempData[5]=0x3f;//0}elseif(shijian==1)//显示制作着学好后六位{TempData[0]=0x07;//7TempData[1]=0x5b;//2TempData[2]=0x66;//4TempData[3]=0x66;//1TempData[4]=0x3f;//0TempData[5]=0x5b;//2}elseif(shijian==2)//显示制作年、月、日{TempData[0]=dofly_DuanMa[time_buf1[1]/10];//年TempData[1]=dofly_DuanMa[time_buf1[1]%10];TempData[2]=dofly_DuanMa[time_buf1[2]/10];//月TempData[3]=dofly_DuanMa[time_buf1[2]%10];TempData[4]=dofly_DuanMa[time_buf1[3]/10];//日TempData[5]=dofly_DuanMa[time_buf1[3]%10];}elseif(shijian==3)//显示周秒{TempData[0]=0x40;TempData[1]=dofly_DuanMa[time_buf1[7]%10];//周TempData[2]=0x40;//加入-TempData[3]=0;TempData[4]=dofly_DuanMa[time_buf1[6]/10];//秒TempData[5]=dofly_DuanMa[time_buf1[6]%10];}elseif(shijian==4){if(bian2==0)//设置时间{if(bian1==0)//正常显示{TempData[0]=dofly_DuanMa[time_buf1[4]/10];//时TempData[1]=dofly_Du
本文标题:单片机电子时钟课设论文 1
链接地址:https://www.777doc.com/doc-68330 .html