电子万年历课程设计报告_第1页
电子万年历课程设计报告_第2页
电子万年历课程设计报告_第3页
电子万年历课程设计报告_第4页
电子万年历课程设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、大连民族学院机电信息工程学院大连民族学院机电信息工程学院 自动化系自动化系 单片机系统课程设计报告单片机系统课程设计报告 题题 目:目:电子万年历电子万年历 专专 业:业:自动化自动化 班班 级:级:114 学生姓名:学生姓名:曹学亮曹学亮 张怀宇张怀宇 马建龙马建龙 指导教师:指导教师:赵凤强赵凤强 张艳张艳 设计完成日期:设计完成日期: 2013 年年 10 月月 15 日日 课程设计任务书 题目: 电子万年历 课程设计时间: 2013.9.242013.10.19 一、设计任务 给定 1602 液晶显示器和单片机最小系统,学习使用单片机最小系统,设计 在 1602 上显示年月日、时间和星

2、期并能更改,完成相关的软件。 二、设计内容及要求 系统设计的方案; 检测电路和过程通道的设计; 系统软件设计与实现; 需要的详细材料和工具清单; 设计的性能指标; 撰写设计报告; 资料归档。 三、设计重点 检测电路和过程通道设计; 系统软件设计、调试。 四、课程设计进度要求 13.9.2513.9.28 系统方案设计; 13.9.2913.10.5 检测电路和过程通道设计; 13.10.613.10.7 完成系统硬件设计与实现; 13.10.813.10.13 检测电路和过程通道设计; 13.10.1313.10.15 撰写设计报告; 13.10.19 验收答辩。 五、参阅书目 1 祁伟,杨亭

3、,单片机 c51 程序设计教程与实验m。北京:北京航空航天大 学出版社,2006.1 2 徐科军,传感器与检测技术m。北京:电子工业出版社,2010.11 3 方彦军,孙健,智能仪器技术及其应用m。北京:化学工业出版社,2004.4 4 徐爱钧,智能化测量控制仪表原理与设计m。北京:北京航空航天大学出 版社,2004.9 目目 录录 1 任务分析和性能指标任务分析和性能指标.1 1.1 任务分析.1 1.2 性能指标.1 2 总体设计方案总体设计方案.1 2.1 硬件方案.1 2.2 软件方案.1 3 系统硬件设计系统硬件设计.2 3.1 检测电路.2 3.2 控制电路.2 4 系统软件设计系

4、统软件设计.2 4.1 主程序设计.2 4.2 数据采集程序设计.2 4.3 监控程序设计.2 5 调试及性能分析调试及性能分析.2 5.1 调试分析.2 5.1.1 软件调试.2 5.1.2 硬件调试.2 5.1.3 系统功能调试.3 5.2 性能分析.3 总总 结结.3 参考文献参考文献.4 附录附录 1 元器件清单元器件清单.5 附录附录 2 调试系统照片调试系统照片.6 1 任务分析和性能指标任务分析和性能指标 1.1 任务分析 电子万年历是日常生活中常见的小型电子产品,其形式多种多样,小到带 有日期的电子腕表,大到公共场所悬挂的大型电子日历,此外,眼下我们还常 能在宾馆、饭店等场所见

5、到一种带有年、月、日、时、分、秒、星期甚至节气 等信息的电子日历牌。 电子日历的主要功能是给人们提供时间和日期信息,无论其形式如何,从 外部都可分为显示和校准两部分。为使电子日历协调工作,整个系统从功能上 可分为实时时钟、显示和键盘三个模块,分别完成时间和日期的计算以及人机 交互的管理等。 1.2 性能指标 实时时钟(rtc:real time clock)是系统的核心,其运行精度直接影 响产品质量。 实时时钟的实现有两种方案可选,一是利用单片机系统时钟和中 断完成时间和日期的计算;二是利用专用时钟芯片。前者不用附加芯片,系统 简单,但是累计误差较大,只有 短时计时才可使用。长时间计时一般都采

6、用后 者。后者采用 32.768khz 晶体振荡器振作 为脉冲源,内部的 15 位计数器刚好 产生标准秒脉冲。该类芯片除时钟计时外,还有年 月日和星期的计算功能,并 且还可计算闰年。芯片初始化后可脱离 cpu 自动运行,有 些芯片内部带有电 池,出厂时芯片即开始运行。专用时钟芯片的种类很多,与 cpu 的 通信方式 有并行, 也有串行。 常见的芯片有 dallas 公司生产的 ds1302 和 ds12c887, 前者为串行,需要外加后备电池;后者为并行,芯片内置锂电池 和晶体振荡器,无外加 电源的情况下可运行 10 年。此外,还有许多时钟芯片, 如 epson、holtek、深圳兴威帆 等公

7、司都推出自己的时钟芯片.因为我们具备 单片机相关知识的基础,所以我们利用单片机系统时钟和中断完成时间和日期 的计算。 2 总体方案设计总体方案设计 2.1 硬件方案 显示部分显示部分 数据显示常采用液晶,液晶显示有耗电低、外形美观的优点,并且,点阵 液晶可显示较复杂的字符或图案。 键盘部分键盘部分 时钟系统的键盘设置三个键:确认键、加 1 键、减 1 键。 实时时钟部分实时时钟部分 利用单片机系统时钟和中断完成时间和日期的计算。 2.2 软件方案 c 语言编属于高级语言,具有可移植性,能够结构化编程。使用标准 c 语言的程序,几乎都可以不作改变移植到不同的微机平台上,对于嵌入式等的 微控制芯片

8、,属于标准 c 语言的部分也很少需要修改,而且程序很容易读懂。 c 语言编写程序结构清晰,移植性好,容易维护和修改。 汇编语言针对不同的操作系统平台,不同的微控制器,指令都是完全不同 的,即使指令相似,也不具有可移植性。但是汇编语言是针对专门的控制器的, 所以运行速度可以精确到一个指令周期。汇编语言的程序读懂需要借助微控制 器的指令手册以及各个寄存器的说明,所以很难读懂。 汇编语言编写代码实时性强,能够直接控制硬件的工作状态,但是不具有可移 植性,维护和修改困难。 经过我们三人的讨论我们决定使用 c 语言来编写程序 ,因为 c 语言程序容 易学,也很容易读懂,编写程序结构清晰,易于我们组员之间

9、的讨论和学习。 而且相对于汇编我们更加擅长 c 语言。 3 硬件设计硬件设计与实现与实现 由于单片机系统时钟和中断能完成年、月、日、时、分、秒等时间信息, 对于一天内的时间记录,有 12 小时制和 24 小时制两种模式。在 12 小时制模 式中,用 am 和 pm 区分上午和下午; 时间的表示方法也有两种,一种用二 进制数 表示,一种是用 bcd 码表示。而显示部分我们采用 lcd 液晶显示屏, 液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,而其 体积较小,使用方便,可以使电路更加简洁,所以选择了液晶显示器。 3.1 1602 显示电路显示电路 3.2键盘电路键盘电路 3.3

10、 晶振电路晶振电路 3.4 复位电路复位电路 3.5单片机电路 4 软件设计软件设计与实现与实现 4.1 主程序 void main() init(); while(1) anjian(); 4.2 子程序 4.2.1 按键程序 void anjian() /按键函数 rd=0; if(s1=0) delay(5); if(s1=0) s1num+; while(!s1); if(s1num=1) tr0=0; write_com(0 x80+0 x40+12); write_com(0 x0f); if(s1num=2) write_com(0 x80+0 x40+9); if(s1num=

11、3) write_com(0 x80+0 x40+6); if(s1num=4) write_com(0 x80+15); if(s1num=5) write_com(0 x80+9); if(s1num=6) write_com(0 x80+6); if(s1num=7) write_com(0 x80+1); if(s1num=8) s1num=0; write_com(0 x0c); tr0=1; if(yue=1) tian=ri-ri4; if(yue=2) tian=31+ri-ri4; if(yue=3) tian=59+ri-ri4; if(yue=4) tian=90+ri-

12、ri4; if(yue=5) tian=120+ri-ri4; if(yue=6) tian=151+ri-ri4; if(yue=7) tian=181+ri-ri4; if(yue=8) tian=212+ri-ri4; if(yue=9) tian=243+ri-ri4; if(yue=10) tian=272+ri-ri4; if(yue=11) tian=304+ri-ri4; if(yue=12) tian=334+ri-ri4; ri4=0; if(s1num!=0) if(s2=0) delay(5); if(s2=0) while(!s2); if(s1num=1) miao

13、+; if(miao=60) miao=0; write_sfm(12,miao); write_com(0 x80+0 x40+12); if(s1num=2) fen+; if(fen=60) fen=0; write_sfm(9,fen); write_com(0 x80+0 x40+9); if(s1num=3) shi+; if(shi=24) shi=0; write_sfm(6,shi); write_com(0 x80+0 x40+6); if(s1num=4) xingqi+; if(xingqi=8) xingqi=1; write_xq(15,xingqi); write

14、_com(0 x80+15); if(s1num=5) ri+; if(ri=32) ri=1; write_yr(9,ri); write_com(0 x80+9); if(s1num=6) yue+; if(yue=13) yue=1; tian=1; write_yr(6,yue); write_com(0 x80+6); if(s1num=7) nian+; write_n(1,nian); write_com(0 x80+1); if(s3=0) delay(5); if(s3=0) while(!s3); if(s1num=1) miao-; if(miao=-1) miao=59

15、; write_sfm(12,miao); write_com(0 x80+0 x40+12); if(s1num=2) fen-; if(fen=-1) fen=59; write_sfm(9,fen); write_com(0 x80+0 x40+9); if(s1num=3) shi-; if(shi=-1) shi=23; write_sfm(6,shi); write_com(0 x80+0 x40+6); if(s1num=4) xingqi-; if(xingqi=0) xingqi=7; write_xq(15,xingqi); write_com(0 x80+15); if(

16、s1num=5) ri-; ri4+; if(ri=0) ri=31; write_yr(9,ri); write_com(0 x80+9); if(s1num=6) yue-; if(yue=0) yue=12; tian=334+ri; write_yr(6,yue); write_com(0 x80+6); if(s1num=7) nian-; write_n(1,nian); write_com(0 x80+1); 4.2.2 中断程序 void timer0() interrupt 1 /开中断 1 (定时器中断 0) 包括时间的 算法程序 th0=(65536-50000)/256

17、; tl0=(65536-50000)%256; t0+; if(t0=20) t0=0; miao+; if(miao=60) miao=0; fen+; write_sfm(12,miao); /调用函数 write-()都为调用上边的显示子函数 下同 if(fen=60) fen=0; shi+; write_sfm(9,fen); if(shi=24) shi=0; xingqi+; tian+; write_sfm(6,shi); if(xingqi=8) xingqi=1; write_xq(15,xingqi); if(tian!=0) ri=tian; if(tian=32 r

18、i=tian-31; write_yr(6,yue); if(60=tian ri=tian-59; write_yr(6,yue); if(91=tian ri=tian-90; write_yr(6,yue); if(121=tian ri=tian-120; write_yr(6,yue); if(152=tian ri=tian-151; write_yr(6,yue); if(182=tian ri=tian-181; write_yr(6,yue); if(213=tian ri=tian-212; write_yr(6,yue); if(244=tian ri=tian-243;

19、 write_yr(6,yue); if(274=tian ri=tian-273; write_yr(6,yue); if(305=tian ri=tian-304; write_yr(6,yue); if(335=tian ri=tian-334; write_yr(6,yue); if(tian=366) tian=1; yue=01; ri=1; nian+; write_n(1,nian); write_yr(9,ri); 4.2.3 显示年 void write_n(uchar add,uint date) /液晶显示年 uint shi,ge,bai,qian; qian=dat

20、e/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_com(0 x80+add); write_date(0 x30+qian); write_date(0 x30+bai); write_date(0 x30+shi); write_date(0 x30+ge); 4.2.4 显示星期 void write_xq(uchar add,uchar date) / 液晶显示星期 write_com(0 x80+add); write_date(0 x30+date); 4.2.5 显示月日 void write_yr(uchar

21、add,uchar date) /液晶显示月日 uchar shi,ge; shi=date/10; ge=date%10; write_com(0 x80+add); write_date(0 x30+shi); write_date(0 x30+ge); 4.2.6 显示时分秒 void write_sfm(uchar add,uchar date) /液晶显示时分秒 uchar shi,ge; shi=date/10; ge=date%10; write_com(0 x80+0 x40+add); /液晶屏第二行的选着地址 write_date(0 x30+shi); write_dat

22、e(0 x30+ge); /液晶屏显示数字的方式 4.2.7 程序初始化 void init() /函数初始化 一些相应的变量 miao=53; fen=59; shi=23; xingqi=5; ri4=0; tian=284; nian=2013; dula=0; wela=0; lcden=0; write_com(0 x38); /显示模式设置,设置 16 乘 2 显示,57 点阵,八位 数据接口 write_com(0 x0c); /显示状态为整体显示 write_com(0 x06); /光标的设定 当读或写一个字符后地址指针加一, 光标加一 write_com(0 x80); /

23、液晶屏第一行选着地址 write_com(0 x01); /清除显示 否则后面出现黑一块 for(num=0;num17;num+) write_date(table1num); delay(5); write_com(0 x80+0 x40); for(num=0;num0;x-); for(y=116;y0;y-); 5 调试及性能分析调试及性能分析 5.1 调试分析 5.1.1 软件调试软件调试 软件调试时,开始出现了很多错误,主要是液晶屏乱码,不显示数字。后来经 过调试找出原因并改正得到想要的结果。 5.1.2 硬件调试硬件调试 硬件主要是单片机,液晶,我们的任务是主要将他们各个引脚的作用和芯片

温馨提示

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

评论

0/150

提交评论