欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    电子万年历课程设计报告.doc

    • 资源ID:4872132       资源大小:286KB        全文页数:22页
    • 资源格式: DOC        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    电子万年历课程设计报告.doc

    1、课程:创新与综合课程设计 电子与电气工程系实践教学环节说明书 题目名称 电子万年历 院(系) 电子与电气工程学院 专 业 电子信息工程 班 级 119411 学 号 1109635010 学生姓名 11 指导教师 q1 起止日期 13周周一14周周五 电子万年历一. 设计目的 设计一个具有报时功能、停电正常运行(来电无需校时) 、带有年月日、时分秒及星期显示的电子日历。二. 方案设计硬件控制电路主要用了AT89S52芯片处理器、LCD1602显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中

    2、对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式sv1 +(y1/4(y1/100+(y1/400+ d计

    3、算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。三. 系统的设计框图 本系统以单片机为核心, 结合时钟芯片 ,键盘等外围器件, 实现电子万年历的一系列功能, 并通过液晶屏和按键控制完成人机交互的功能。系统总体设计框图如图(1)所示四. 系统硬件设计1.单片机主控制模块AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P

    4、1、P2、P3),每一条I/O线都能独立地作输出或输入。如图(2)所示。(1)内部结构按功能分为8部分:CUP,程序存储器,数据存储器,时钟电路,串行口,并行I/O口,中断系统,定时/计数器。(2)引脚定义及功能1).电源及时钟引脚Vcc:接+5V 电源Vss:接地XTAL1和XTAL2:时钟引脚,外接晶体引线端。当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。2).控制引脚RST/Vpq:RST是复位信号输入端,Vpd是备用电源输入端。当RST输入端保持2个机器周期以上高电平时,单片机完成复位初始化操作。当主电源Vcc发生故障而突然下降到

    5、一定低电压或断电时,第2功能Vpd将为片内RAM提供电源以保护片内RAM中的信息不丢失。ALE/PROG:地址锁存允许信号输入端。在存取外存储器时,用于锁存低8位地址信号。当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。此引脚的第2功能PROG是对片内带有4K字节EPROM的8751固外程序时,作为编程脉冲输入端。PSEN:程序存储器允许输出端。当片外程序存储器的读选通信号,低电平有效。CPU从外部程序存储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号。EA/Vpp:程序存储器地址允许输入端。当EA为高电平时,CPU执行片内程序存

    6、储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令;当EA为低电平时,CPU只执行片外程序存储器指令。3).I/O口引脚P0.0P0.7:P0口8位双向I/O口;P1.0P1.7:P1口8位准双向I/O口;P2.0P2.7:P2口8位准双向I/O口;P3.0P3.7:P3口8位准双向I/O口。(3)片外总线结构分为三部分:数据总线 Data Bus(DB),地址总线 Address Bus (AB),控制总线 Control Bus(CB).2.时钟电路模块(1) DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时

    7、时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。(2) 引脚功能及结构 图3所示出DS1302 的引脚排列,其中Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302 由Vcc1 或Vcc2 两者中的较大者供

    8、电。当Vcc2 大于Vcc10.2V 时,Vcc2 给DS1302供电。当Vcc2 小于Vcc1 时,DS1302 由Vcc1 供电。X1 和X2 是振荡源,外接32.768kHz 晶振。RST 是复位/片选线,通过把RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。当RST 为高电平时,所有的数据传送被初始化,允许对DS1302 进行操作。如果在传送过程中RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在Vcc2.5V 之前,RS

    9、T 必须保持低电平。只有在SCLK 为低电平时,才能将RST 置为高电平。I/O 为串行数据输入输出端(双向),后面有详细说明。SCLK 始终是输入端。图3 ds1302(3) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0 开始。同样,在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据,读出数据时从低位0 位到高位7。3. 显示部分1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示

    10、一个字符。显示电路采用LCD1602液晶显示,如图所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。图4 1602显示电路4.复位电路设计 复位电路由电阻和极性电容组成,如图所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。此复位电路为上电复位,较为简单。若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况

    11、,通过手动复位就可以实现重新启动的操作。手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮和一个电阻。图复位电路图 时钟振荡电路图 .时钟振荡电路时钟振荡电路图所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度

    12、。6.按键调整系统电路设计 按键电路由四个轻触开关组成,如图所示。按键用来调整时间,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过一个与门只要这四个按键有一个按下就会在P3.2检测到一低电平就触发外部中断0进入按键调节程序中,通过与个各键相连的端口P3.4_P3.7可以判断是哪个键按下,从而作相应的操作。图按键电路与单片机的链接五系统软件总体设计 本系统选用适时性强与透明度高的 语言作为编程语言,系统软件的开发全部采用Keil uVision4 进行。软件控制程序主要有主控程序、电子万年历的时间控制程序组成。主控程序中对整个程序进行控制,进行了初始化程序及计数

    13、器、还有键盘功能程序、以及显示程序和时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。 公历与星期的换算方

    14、法在现行公历中,历年的长度365天(平年)或者366天(闰年)都不是七的整数倍,所以日期与星期之间没有明显的对应关系。一般情况下,不看日历牌就无法知道某月某日是星期几。不过,它们之间还是有一定规律可循的,只要经过简单计算,或者查找表格,就可以知道与任何日期相对应的星期数。主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和日期,若没有按下,则执行下面的时间、日期的显示,最后依次循环这些相同的操作,相应流程图如图所示:图主程序流程图六 系统测试与分析按键的检测是通过中断的办法来实现,利用按键进行间调整。 K1按下则开始设置时间及日期,同时在第一行最右

    15、端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕,K4是确定键,设置好按下即可保存。 通过此电子万年历设计,本系统能完成以下功能:(1)显示公历日期功能(年、月、日、时、分、秒以及星期),(2)可通过按键切换年、月、日及时、分、秒的显示状态,(3)可随时调校年、月、日或时、分、秒,星期,(4)可每次增减一进行时间调节,(5)停电可以正常运行。七结语本系统利用 AT89S52单片机进行可编程控制,结合键盘、液晶屏等,通过 DS1302的使用,可

    16、以降低编写程序的复杂程度。Keil uVision4 编译软件实现单片机控制液晶显示模块的电子万年历设计,可以达到比较好的设计效果。系统硬件电路采用成熟的电路设计, 元件选用成本较低的器件,电路稳定, 抗干扰力强,性价比较高。软件开发用语言, 采用模块式结构, 系统功能易于扩展。参考资料:1 余锡存,曹国华.单片机原理及接口技术M.西安电子科技大学出版社2004.2 张志良, 主编 :单片机原理及控制技术(第2版)M北京:机械工业出版社,2005.3 余永权, MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版,1993.4 余西存, 曹国华.单片机原理及接口技术M.西安:西安电

    17、子科技大学出版,2000. 5 周国运,鲁庆宾.单片机原理及应用(C语言版)M.中国水利水电出版社,2009.6 周 颖,俞 吉.基于 AT89S52单片机的电子万年历系统设计J.现代电子技术,2012.35(13):178-182.附录电子万年历原理图附录元件清单:LCD1602显示屏At89s52单片机RTCCon874ls164Ds1302电阻 电容发光二极管三极管若干杜邦线若干附录3实验源程序:#include #include #include #define uint unsigned int #define uchar unsigned charsbit IO= P10;/DS1

    18、302数据线 sbit SCLK = P11;/DS130时钟线sbit RST = P12 /DS1302复位线sbit RS = P20;/LCD数据/命令选择端 sbit RW = P21;/LCD读/写控制sbit EN = P22;/LCD使能端 sbit K1=P34;/选择 sbit K2=P35;/加sbit K3=P36;/减 sbit K4=P37;/确定 uchar tCount=0;uchar MonthsDays=0,31,0,31,30,31,30,31,31,30,31,30,31;uchar *WEEK=SUN,MON,TUS,WEN,THU,FRI,SAT;u

    19、char LCD_DSY_BUFFER1=DATE 00-00-00 ; /显示格式uchar LCD_DSY_BUFFER2=TIME 00:00:00 ;uchar DateTime7; /所读取的日期时间char Adjust_Index=-1; /当前调节的时间对象:,分,是,日,月,年(1,2,3,4,6)uchar Change_Flag= -MHDM-Y; /(分,时,日,月,年)(不调节秒与周)/*-延时程序-*/void DelayMS(uint ms) uchar i;while(ms-)for(i=0;i120;i+);/-向DS1302写入一字节-/void Write

    20、_A_Byte_TO_DS1302(uchar x)uchar i;for(i=0;i=1; / 右移/-从DS1302读取一字节-/uchar Get_A_Byte_FROM_DS1302()uchar i,b=0x00;for(i=0;i8;i+) b |= _crol_(uchar)IO,i);SCLK=1;SCLK=0; /每一个高脉冲读取一位数据return b/16*10+b%16; /返回BCD码/-从DS1302指定位置读数据-/uchar Read_Data(uchar addr) uchar dat;RST = 0;SCLK=0;RST=1; /RST高电平时读/写 Wri

    21、te_A_Byte_TO_DS1302(addr); /先写入地址dat = Get_A_Byte_FROM_DS1302(); SCLK=1;RST=0;return dat;/-向DS1302某地址写入数据-/void Write_DS1302(uchar addr,uchar dat)SCLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);Write_A_Byte_TO_DS1302(dat);SCLK=0;RST=0; /高脉冲写入数据/-设置时间-/void SET_DS1302()uchar i;/写控制字,取消写保护Write_DS1302(0x8E,

    22、0x00);/分时日月年依次写入for(i=1;i7;i+) /分的起始地址10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2Write_DS1302(0x80+2*i,(DateTimei/104)|(DateTimei%10); Write_DS1302(0x8E,0x80); /加保护/-读取当前日期时间-/void GetTime()uchar i;for(i=0;i7;i+)DateTimei=Read_Data(0X81+2*i);/-读LCD状态-/uchar Read_LCD_State()uchar state;RS=0;RW=1;EN=1; /输

    23、出:D0D7=状态字DelayMS(1);state=P0; /从P0口读LCD状态EN = 0;DelayMS(1);return state; /-忙等待-/void LCD_Busy_Wait() while(Read_LCD_State()&0x80)=0x80);DelayMS(5);/-向LCD写数据-/void Write_LCD_Data(uchar dat) LCD_Busy_Wait();RS=1;EN=0;RW=0; /写数据,EN为高脉冲,P0=dat;EN=1;DelayMS(1);EN=0;/-写LCD指令-/void Write_LCD_Command(uchar

    24、 cmd) LCD_Busy_Wait();RS=0;EN=0;RW=0; /写指令,EN高脉冲,输出:D0D7=数据P0=cmd;EN=1;DelayMS(1);EN=0;/-LCD初始化-/void Init_LCD() Write_LCD_Command(0x38); /设置16*2显示,5*7点阵,8位数据接口DelayMS(1);Write_LCD_Command(0x01); /显示清零,数据指针清零DelayMS(1);Write_LCD_Command(0x06); /写一个字符后地址指针自动加1DelayMS(1);Write_LCD_Command(0x0c); /设置开显

    25、示,不显示光标DelayMS(1);/-/设置液晶显示位置/-void Set_LCD_POS(uchar p)Write_LCD_Command(p|0x80);/相当于在0x80基础上加入位置量/-在LCD上显示字符串-/void Display_LCD_String(uchar p,uchar *s)uchar i;Set_LCD_POS(p);for(i=0;i16;i+)Write_LCD_Data(si); /在固定位置显示时间日期DelayMS(1);/-日期与时间值转换为数字字符-/void Format_DateTime(uchar d,uchar *a)a0=d/10+0;

    26、a1=d%10+0;/判断是否为闰年uchar isLeapYear(uint y)return (y%4=0&y%100!=0)|(y%400=0);/求自2000.1.1开始的任何一天是星期几/函数没有通过,求出总天数后再求星期几/因为求总天数可能会超出uint的范围void RefreshWeekDay()uint i,d,w=5; /已知1999.12.31是周五for(i=2000;i2000+DateTime6;i+)d=isLeapYear(i)?366:365;w=(w+d)%7;d=0;for(i=1;iDateTime4;i+)d+=MonthsDaysi;d+=DateTime3;/保存星期,06表示星期日,星期一,二,.,六,为了与DS1302的星期格式匹配,返回值需要加1DateTime5=(w+d)%7+1;/*年月日时分+/-*/void DateTime_Adjust(char x)switch(Adjust_Index)case 6: /年00-99if(x=1&DateTime60) DateTime6-;


    注意事项

    本文(电子万年历课程设计报告.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开