ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:188.32KB ,
资源ID:2476739      下载积分:12 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2476739.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(万年历课程设计.docx)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

万年历课程设计.docx

1、万年历课程设计万年历课程设计 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(万年历课程设计)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为万年历课程设计的全部内容。- 28 -电子课程设计报告课程名称: 单片机课程设计 设计内容: 万年历电子时钟 实验时间: 2011年12月 专业班级: 09电子(2)班 姓 名: 吴益

2、智 学 号: 0901001215 同 组 人: 张雪莹 李建洪 指导老师: 廖传柱 施众 2011年 12月 29 日目录摘要2第一章 绪论31。1引言及设计思路3第二章 系统设计42.142.2 系统硬件设计42。2.1系统总体框架42.2.2 模块二52.3系统软件设计52。4设计说明书:62。4.1模块划分:62。5使用说明书:62。6元件清单:6第三章总结73.1设计过程73。2心得体会7附录8摘要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置到飞机上的各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各

3、种智能IC卡等,这些都离不开单片机。单片机是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。万年历在日常生活中最常见,应用也最广泛。本次课程设计主要就是设计一款数字钟,以89S51单片机为核心,配备数码管,按键,蜂鸣器。数字钟采用24小时制方式显示时间,年、月、日、秒及毫秒。 文章的核心主要从硬件设计和软件编程两个大的方面。硬件电路设计主要包括中央处理单元电路、时钟电路、人机接口电路、信号处理电路、执行电路等几部分组成。软件用C语言来实现,主要包括主程序、时间设置

4、子程序,按键切换程序,校时程序等软件模块.关键字: 单片机 时间 小时 分钟 秒第一章 绪论1。1引言及设计思路万年历是采用数字电路实现对年、月、日,时、分、秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的.

5、因此,研究数字钟及扩大其应用,有着非常现实的意义。一开始接触到实验箱的时候大家都很陌生,因为是第一次使用,所以实验箱很多模块的功能及使用方法都要我们自己去掌握。在没有实质说明书的情况下,我们先后使用万用表测电压、电阻的方法得到了实验箱主芯片与单片机P口的引脚对应图,为接下来的软件编程和硬件接口连接打下了基础。万年历电子时钟的实现主要硬件模块是单片机,本实验箱使用的的AT89S51单片机,此外还有显示模块四位数码管,还有时间切换和调整模块按钮和闹铃模块蜂鸣器。起初我们想用实验箱上原有的HD7279芯片来驱动数码管显示和键盘控制,但由于对这款芯片的认识不足,虽然从网上找到了很多关于HD7279的资

6、料,但仍不能正确的使用它,于是我们想到通过对TFT彩屏液晶显示器的控制来显示时间,但对于它的显示原理也不能掌握,最后我们想到了用单片机直接控制数码管来显示时间.单片机P0的八个口分别接到数码管的八个段选位。通过按下按钮1,可以实现从年-月日时分-秒毫秒的显示切换,按下按钮2,可实现年份、月份日期,时分的加减,以实现时间的校正。第二章 系统设计2。1设计任务:设计一个万年历,主要以单片机和数码管为硬件基础,载入用C语言编写的程序,设计出功能完善的万年历。该万年历通过按键可切换显示时间与日期、月份、日期、年份;能自动准确的计时;能通过判断年份和月份来显示相应的天数(即能判断闰年,大月和小月)。2.

7、2 系统硬件设计和显示2.2.1系统总体框架2。2.2 模块二万年历的原理图2。3系统软件设计3、1数字电子钟设计用到很多子程序,它们的流程图如下所示。 主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。2.4设计说明书:2。4.1模块划分:1、显示模块利用单片机来控制数码管的显示。通过单片机P0口来控制数码管的八段,P1口来控制4位数码管.本程序采用方式0译码.在主程序中进行。2、切换模块主要靠按键来切换显示时间和日期,采用中断方式来进行。3、计时模块本程序采用定时计数器T0,定时10ms,即50ms进一次中断,100次后达到1秒,秒位加一,达到60秒后分

8、位加一,一次类推周而复始的进行计数。该模块也是采用中断方式进行采用12M的晶振。4、校时模块该模块也是通过按键来对时间和日期进行校时。先通过一个按键来选择要校时的部分,再通过另外两个按键来对该部分进行加减,调整到正确的时间和日期。日期在校时过程中还要对年份和月份进行判断是不是闰年,是大月还是小月。进过判断后来显示相应的日期。上述计时过程中也要进行判断。该模块也采用中断方式。2.5使用说明书:打开电源,1602液晶屏显示时间.按键S1用来控制切换,即按下S1就显示日期,再按一次就显示时间,依次循环。按键S2用来控制校时部分的选择,第一次按下,分位或时位会闪烁,表示以选择该位,同时计数器会停止计数

9、;第二次按下,月位或日位会闪烁;第三次按下,年的高位或年的低位会闪烁;第四次按下时,会退出选择功能,计数器恢复计时,依次循环。按键S3和S4分别用来控制时间或日期的加、减,使用该功能时,按键S2必须先按下选择某一位进行加减,按键S2第四次按下时,也同时退出该功能。2.6元件清单:AT89S51单片机1602显示屏一个、电阻电容若干,5个独立按键,12M晶振一个,记忆电池一块第三章 总结3.1设计过程通过老师给我们讲解了课程设计的内容后,我们便投入了紧张的课设中,万事开头难,面对着完全陌生的实验箱,我们首先要做的就是收集资料,以便弄清实验箱各功能模块及使用方法,第一天就这么过去了,对实验箱的模块

10、有了大致的了解.星期二,我们开始对主芯片的串口进行测试,找到了它与单片机引脚对应图。对于万年历,我们首先想到的是用单片机,89sc51芯片,液晶屏和按键来实现,查阅了很多关于芯片的资料后仍对其显示原理搞不清楚,于是我们只好放弃使用该芯片,最后我们想到了直接用单片机控制液晶屏,采用动态扫描的方式来实现时间显示,用按键切换来实现.但这样的话,编程就相对来说复杂了很多。星期三,上午开始了编程,8个段选和4个位选就占了12个I/O口,定时和中断占2个口,四个按键也占了4个口,这样一来串行口就显得很紧张.但这不是最主要的,编程是块难啃的骨头,连续编了三天的程序,周五晚上进行仿真调试通过,7月18号的周一

11、来实验室进行硬件调试,硬件调试也经历了数码管显示错位,乱码,按键不灵的问题,通过线路的重新连接,消抖的程序的修改,一一把这些问题解决了。经过经过一上午辛苦的调试,终于成功的把万年历设计出来了!3.2 心得体会回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识.通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手

12、能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说单片机的动态扫描原理,不懂分得二极管的正负极,不知道数码管是共阴极还是共阳极,对单片机汇编语言掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。 本次课程设计,真可谓是感慨万千,从一开始的一无所知,到后来的轻车熟路,其中所经历的波折真是无以言表。坚持不懈是我最大的收获,在课设过程中我曾一度有想放弃的念头,但理智战胜了冲动,我还是坚持下来了,坚持就是胜利!同时也再一次让我体会了

13、团队协作的重要性,我们分工协作,各显神通,一起讨论,一起攻关,请别的组同学帮忙,向老师请教遇到不懂的问题,互相提问,互帮互助。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在陈铧森同学的帮助下解决了难题,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!也感谢学校为我们课程设计提供了这么好的设备,这么好的环境。附录#include reg52。h#include 0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302Output

14、Byte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputB

15、yte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS130

16、2_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEMTIME Time) /获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = ((ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);TimeMinute = ((ReadValue0x70)4)*10 + (ReadValue

17、&0x0F);ReadValue = Read1302(DS1302_HOUR);TimeHour = ((ReadValue0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);TimeDay = ((ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week = ((ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH)

18、;TimeMonth = (ReadValue0x70)4)10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = ((ReadValue&0x70)4)10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString if(hide_year2) /这里的if,else语句都是判断位闪烁,DateString0 = 2; TimeDateString1 = 0; Time-DateStrin

19、g2 = TimeYear/10 + 0; Time-DateString3 = Time-Year%10 + 0; else Time-DateString0 = ; TimeDateString1 = ; TimeDateString2 = ; Time-DateString3 = ;Time-DateString4 = /;if(hide_month2) Time-DateString5 = TimeMonth/10 + 0; TimeDateString6 = Time-Month%10 + 0; else Time-DateString5 = ; TimeDateString6 =

20、; Time-DateString7 = /;if(hide_dayDateString8 = Time-Day/10 + 0; TimeDateString9 = Time-Day%10 + 0; else TimeDateString8 = ; TimeDateString9 = ; if(hide_weekWeek%10 + 0; /星期的数据另外放到 week_value数组里,跟年,月,日的分开存放,因为等一下要在最后显示 else week_value0 = ; week_value1 = 0;Time-DateString10 = 0; /字符串末尾加 0 ,判断结束字符void

21、 TimeToStr(SYSTEMTIME Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString; if(hide_hourTimeString0 = TimeHour/10 + 0; TimeTimeString1 = TimeHour%10 + 0; else Time-TimeString0 = ; Time-TimeString1 = ;TimeTimeString2 = :; if(hide_min2) Time-TimeString3 = Time-Minute/10 + 0; TimeTimeString4 = TimeMinute10 + 0; els

22、e Time-TimeString3 = ; Time-TimeString4 = ; Time-TimeString5 = :; if(hide_sec2) Time-TimeString6 = TimeSecond/10 + 0; TimeTimeString7 = Time-Second10 + 0; else TimeTimeString6 = ; TimeTimeString7 = ; Time-DateString8 = 0;void Initial_DS1302(void) /时钟芯片初始化 unsigned char Second=Read1302(DS1302_SECOND)

23、;if(Second0x80) /判断时钟芯片是否关闭 Write1302(0x8e,0x00); /写入允许Write1302(0x8c,0x07); /以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07); /xingqiWrite1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); /禁止写入/*ds18b20子程序*/*ds18b

24、20延迟子函数(晶振12MHz )*/ void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);/*ds18b20读一

25、个字节*/ unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; /数据右移一位 DQ = 1; / 给脉冲信号 if(DQ) dat=0x80; /按位或,取最高位 delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; /取最低位 delay_18B

26、20(5); DQ = 1; /上升沿将数据送入 dat=1; /*读取ds18b20当前温度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOn

27、eChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp_value=b4;/取温度值的地位的高四位,右移四位后与温度的高四位相加得到温度值 void temp_to_str() /温度数据转换成液晶字符显示 TempBuffer0=temp_value/10+0; /十位 TempBuffer1=temp_value10+0; /个位 TempBuffer2=0xdf; /温度符号 TempBuffer3=C; TempBuffer4=0;void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);/*延时子程序*/void mdelay(uint delay)uint i; for(;delay0;delay-) for(i=0;i32;i+) /1ms延时。 ; void outkey() /跳出调整模式,返回默认显示 uchar Second; if(out=0)/if(out=0|wireless_1=1) / m

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服