单片机原理及应用课程设计_第1页
单片机原理及应用课程设计_第2页
单片机原理及应用课程设计_第3页
单片机原理及应用课程设计_第4页
单片机原理及应用课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用课程设计报告电子万年历设计专业班级姓名学号指导教师2011年X月X日1课程设计目的11巩固和加深对单片机原理和接口技术知识的理解;12培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;13学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;14掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;15能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。2课程设计要求21制作一个可以显示年月日时间的万年历22可以设置时间日期23以月历的方式显示日期24当前日期反显标出25时间和日期的字体不一致,以便区分3硬件设计31以单片机为计算核心,外加3个按键和一块显示器完成整个电路32AT89C52单片机为核心(51单片机程序存储空间不够用),功能及引脚配置同52单片机。以NOKIA3310L黑白液晶屏为显示模块,该模块具有引脚少,功能简单实用价格便宜等优点。该模块采用串行通信的方式传递数据。33电路设计如下图中R1R5为上拉电阻,为保证P00P04的端口的输出电压足够驱动显示模块。R6R8为下拉电阻起到同样的功能。实际测试仿真是因为未接入上拉电阻而导致显示模块没有输出的情况造成了很大的干扰。3个按钮为操作按钮,用于设置时间日期。4软件设计41万年历的基本流程为定时、计数,然后进行时间的运算,时分秒的运算十分便捷,闰年和大小月的运算稍有繁琐,主要困难的在于星期的计算。所以本程序采用计算和标记每月第一日的星期来简化计算。所有的数据计算结束后,单片机就从P0的部分端口上向显示模块输出信号。421总流程工作初始化开始全局变量的定义全局变量、单片机和显示模块的初始化主函数,主要进行按键检测和时间设置定时器中断,计时的核心部分422主函数部分检测“设置”按键,上升沿有效检测到设置按键,进入时间设置,屏蔽时间更新是对显示器的刷新检测到“设置”按键,完成设置,更新时间,显示刷新,回到开始检测到“下一项”按键设置想修改为下一项检测到“1”按键,当前设置项1时、分直接加1,到24或60归零,不影响日期日期加1同时星期加1,超过该月可能的最大日期后,日期归1,并且星期等于该月起始星期月份加1,超过12归1,计算该月第一日星期,计算该月最大天数,日期归1年份加1,计算今年第一天星期,月份归1,日期归1423中断函数部分定时器中断计数达到4000次中断,秒数1,到达60秒,归零下一步,否则退出中断分1,达到60分下一步,否则刷新时间显示时1,到达24,下一步,否则刷新时间日期1,星期1,星期超过6归0,日期超过到达该月最大天数,下一步,否则刷新时间日期显示月1,计算该月最大天数,标记该月第一天星期,超过12,归1,下一步,否则刷新时间日期显年1,刷下时间日期显示424日期和时间显示流程图计算日期坐标分离数字的个位和十位调用子程序转换数字到点阵编码判断当前输出日期是否是今天,是则反显,不是直接输出调用时间输出子程序(时间输出子程序主要流程与该程序相似)43源程序源代码INCLUDEINCLUDESBITSCP04SBITSCLKP02SBITD_CP00SBITSDINP01SBITRESETP03SBITSET_OK_SETP05SBITSET_NEXT_BITP06SBITSET_CHANGEP07UNSIGNEDCHARSEC,MIN,HOUR,DAY,MON,YEAR,WEEK,FIRSTWEEK,MAX_DAYUNSIGNEDLONGCOUNTBITSETORRUNUNSIGNEDCHARMAXDAYUNSIGNEDCHARMOIFMO2IFMO2IFMO4|MO6|MO9|MO11RETURN30RETURN31VOIDDATOUTUNSIGNEDCHARDAT/输出函数UNSIGNEDCHARIFORI0ISHOW_MAX_DAYBREAKD_C0JI6LSHOW_FIRSTWEEK/763DATOUTJK28L8128IFISHOW_DAYDATOUTK1D_C1DATOUT0XFFD_C0ELSEIFISHOW_DAY7DATOUTK1D_C1DATOUT0X80D_C0ELSEDATOUTKHIGHBITI/10LOWBITI10DAY2CHARHIGHBIT,I,SHOW_DAYDAY2CHARLOWBIT,I,SHOW_DAYIFISHOW_DAYDATOUT0XFFELSEIFISHOW_DAY7DATOUT0X80ELSEDATOUT0X00DATOUT0X00RESHOW1SHOW_MIN,SHOW_HOURRESHOW3SHOW_MON,SHOW_YEARMAINUNSIGNEDCHARSET_MIN,SET_HOUR,SET_DAY,SET_MON,SET_YEAR,SET_WEEK,SET_FIRSTWEEK,CASESELECT,SET_MAX_DAYBITSET_OK_SET2,SET_NEXT_BIT2,SET_CHANGE2SC0/初始化SCLK0RESET0SCLK1SEC0MIN0HOUR9DAY10MON6YEAR11WEEK2FIRSTWEEK3COUNT0TMOD0X02TH06TL00ET01TR01EA1RESET1MAX_DAYMAXDAYMOND_C0DATOUT0X20DATOUT0X08RESHOW2MIN,HOUR,DAY,MON,YEAR,FIRSTWEEK,MAX_DAYWHILE1/键盘扫描操作等,为防止误操作,按键确认上升沿有效IFSET_OK_SET1SET_MINMINSET_HOURHOURSET_DAYDAYSET_WEEKWEEKSET_FIRSTWEEKFIRSTWEEKSET_MAX_DAYMAX_DAYCASESELECT1WHILE1IFSET_OK_SET1IFSET_NEXT_BIT1IFCASESELECT6CASESELECT1IFSET_CHANGE1IFSET_MIN60SET_MIN0BREAKCASE2SET_HOURIFSET_HOUR24SET_HOUR0BREAKCASE3SET_YEARIFSET_YEAR100YEAR0IFSET_YEAR40SET_FIRSTWEEKSET_FIRSTWEEK3667ELSESET_FIRSTWEEKSET_FIRSTWEEK3657SET_DAY1SET_WEEKSET_FIRSTWEEKBREAKCASE4SET_MONIFSET_MON13SET_MON1SET_FIRSTWEEKSET_FIRSTWEEKSET_MAX_DAY7SET_MAX_DAYMAXDAYSET_MONSET_DAY1SET_WEEKSET_FIRSTWEEKBREAKCASE5SET_DAYSET_WEEKIFSET_DAYMAX_DAYSET_DAY1SET_WEEKFIRSTWEEKIFSET_WEEK7SET_WEEK0RESHOW2SET_MIN,SET_HOUR,SET_DAY,SET_MON,SET_YEAR,SET_FIRSTWEEK,SET_MAX_DAYSET_OK_SET2SET_OK_SETSET_NEXT_BIT2SET_NEXT_BITSET_CHANGE2SET_CHANGEEA0/为防止发生意外,产生逻辑上的错误,暂时关闭CPU中断MINSET_MINHOURSET_HOURDAYSET_DAYMONSET_MONYEARSET_YEARWEEKSET_WEEKFIRSTWEEKSET_FIRSTWEEKMAX_DAYMAXDAYMONEA1SET_OK_SET2SET_OK_SETTIMER0INTERRUPT1/定时器中断COUNTIFCOUNT4000COUNT0SECIFSEC60SEC0MINIFMIN60MIN0HOURIFHOUR24DAYWEEKIFWEEK7WEEK0IFDAYMAX_DAYDAY1MONMAX_DAYMAXDAYMONIFMON13MON0YEARIFSETORRUN0RESHOW2MIN,HOUR,DAY,MON,YEAR,FIRSTWEEK,MAX_DAYRETURNIFSETORRUN0RESHOW1MIN,HOUR5调试运行PROTEUS建立电路图,载入HEX文件,运行液晶模块没有任何显示,网上查找资料得知原因是单片机输出口电压供压不足,无法驱动显示模块,需要加装上拉电阻。修改后显示模块有了正常的输出。第一次运行了50分钟,结果计算时间比实际时间慢了12秒左右,经检查发现定时器的自动再装载时间初始值设置错误,导致每250秒多计算1秒,改正后重新测试,时间正常了。11年2月20日154311年5月1日90011年6月16日22156设计心得体会本次实验最大的体会就是用C语言编写单片机程序可以极大的加快工作效率,最开始的时候我本想用汇编直接编写,开始的编写时间计算的时候还好,但是到了显示输出的时候计算量和数据量就直线上升了,人工分配内存空间是遇到了很多困扰,总是会忘记什么时候那些空间可以利用,哪些空间的内存不能占用,还有就是计算数据是总要进行很多次的搬移操作,十分繁琐。后来改用C语言编写后,这些细节操作就不用关注了,直接把握好程序的结构流程就可以了,最多也就是在开始的时候定义一下端口的名称和功能寄存器的控制字,其余的就完全不用关注单片机底层汇编程序如何编写了。原本写汇编我晕过了一个多星期也没有多少进展,该有C语言后3天就完成了整个程序。当然后期的测试花了很多时间,遇到的主要困难就是不知道需要加上拉电阻,导致了现实模块的长时间没有任何显示输出,查找程序去找不出错误,单步追踪汇编程序的运行花费的时间最多,PROTEUS和KEIL的单步这回总都试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论