




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连海事大学08自动化课程设计报告大连海事大学信息学院课程设计报告课程名称: 单片机课程设计 设计内容: 万年历电子时钟 实验时间: 2011年7月 实验地点: XXXXXXX 专业班级: 自动化XX班 姓 名: XXX 学 号: XXXXXXXX 指导老师: XXX 2011年 7 月 19 日目录摘要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摘要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置到飞机上的各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡等,这些都离不开单片机。单片机是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。万年历在日常生活中最常见,应用也最广泛。本次课程设计主要就是设计一款数字钟,以89S51单片机为核心,配备数码管,按键,蜂鸣器。数字钟采用24小时制方式显示时间,年、月、日、秒及毫秒。 文章的核心主要从硬件设计和软件编程两个大的方面。硬件电路设计主要包括中央处理单元电路、时钟电路、人机接口电路、信号处理电路、执行电路等几部分组成。软件用C语言来实现,主要包括主程序、时间设置子程序,按键切换程序,校时程序等软件模块。关键字: 单片机 串行I/O口 段选 位选 定时中断 动态扫描第一章 绪论1.1引言及设计思路万年历是采用数字电路实现对年、月、日,时、分、秒,数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。一开始接触到实验箱的时候大家都很陌生,因为是第一次使用,所以实验箱很多模块的功能及使用方法都要我们自己去掌握。在没有实质说明书的情况下,我们先后使用万用表测电压、电阻的方法得到了实验箱主芯片与单片机P口的引脚对应图,为接下来的软件编程和硬件接口连接打下了基础。万年历电子时钟的实现主要硬件模块是单片机,本实验箱使用的的AT89S51单片机,此外还有显示模块四位数码管,还有时间切换和调整模块按钮和闹铃模块蜂鸣器。起初我们想用实验箱上原有的HD7279芯片来驱动数码管显示和键盘控制,但由于对这款芯片的认识不足,虽然从网上找到了很多关于HD7279的资料,但仍不能正确的使用它,于是我们想到通过对TFT彩屏液晶显示器的控制来显示时间,但对于它的显示原理也不能掌握,最后我们想到了用单片机直接控制数码管来显示时间。单片机P0的八个口分别接到数码管的八个段选位,P1.0-P1.3分别接四个数码管的位选。通过单片机对数码管的动态扫描来显示时间。P3.1,P3.2,P3.3,P3.5分别接四个按钮,以实现对数码管时间的切换、校时,加、减功能,P3.4接两个发光二极管,使它们每隔1S亮一下,以实现对秒闪烁点的模拟。在通过3天艰苦的编程,反复调试之后,终于实现了万年历电子时钟的功能,通过按下按钮1,可以实现从年月日时分秒毫秒的显示切换,按下按钮2,可实现年份、月份日期,时分的加减,以实现时间的校正。发光二极管的闪烁可说明秒表在计时。第二章 系统设计2.1设计任务:设计一个万年历,主要以单片机和数码管为硬件基础,载入用C语言编写的程序,设计出功能完善的万年历。该万年历通过按键可切换显示时间与日期、月份、日期、年份;能自动准确的计时;能通过判断年份和月份来显示相应的天数(即能判断闰年,大月和小月)。2.2 系统硬件设计2.2.1系统总体框架单片机数码管切换及调整按钮蜂鸣器(闹钟)2.2.2 模块二万年历的protues仿真图2.3系统软件设计3、1数字电子钟设计用到很多子程序,它们的流程图如下所示。 主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。开始启动定时器键切换和校时时间显示2.4设计说明书:2.4.1模块划分:1、显示模块利用单片机来控制数码管的显示。通过单片机P0口来控制数码管的八段,P1口来控制4位数码管。本程序采用方式0译码。在主程序中进行。2、切换模块主要靠按键来切换显示时间和日期,采用中断方式来进行。3、计时模块本程序采用定时计数器T0,定时10ms,即50ms进一次中断,100次后达到1秒,秒位加一,达到60秒后分位加一,一次类推周而复始的进行计数。该模块也是采用中断方式进行采用6M的晶振。4、校时模块该模块也是通过按键来对时间和日期进行校时。先通过一个按键来选择要校时的部分,再通过另外两个按键来对该部分进行加减,调整到正确的时间和日期。日期在校时过程中还要对年份和月份进行判断是不是闰年,是大月还是小月。进过判断后来显示相应的日期。上述计时过程中也要进行判断。该模块也采用中断方式。2.5使用说明书:打开电源,显示时间。按键S1用来控制切换,即按下S1就显示日期,再按一次就显示时间,依次循环。按键S2用来控制校时部分的选择,第一次按下,分位或时位会闪烁,表示以选择该位,同时计数器会停止计数;第二次按下,月位或日位会闪烁;第三次按下,年的高位或年的低位会闪烁;第四次按下时,会退出选择功能,计数器恢复计时,依次循环。按键S3和S4分别用来控制时间或日期的加、减,使用该功能时,按键S2必须先按下选择某一位进行加减,按键S2第四次按下时,也同时退出该功能。2.6元件清单:AT89S51单片机4只共阴极数码管、导线若干、LED发光二极管若干,电阻电容若干,4个独立按键,6M晶振一个第三章 总结3.1设计过程7月11号星期一上午,老师给我们讲解了课程设计的内容后,我们便投入了紧张的课设中,万事开头难,面对着完全陌生的实验箱,我们首先要做的就是收集资料,以便弄清实验箱各功能模块及使用方法,第一天就这么过去了,对实验箱的模块有了大致的了解。星期二,我们开始对主芯片的串口进行测试,找到了它与单片机引脚对应图。对于万年历,我们首先想到的是用单片机,实验箱上的HD7279芯片,数码管和按键来实现,查阅了很多关于HD7279芯片的资料后仍对其显示原理搞不清楚,于是我们只好放弃使用该芯片,又想到用实验箱上的TFT彩屏液晶显示器来使用,通过对实例程序的仔细琢磨,在修改调试后显示器仍然只能显示5条彩色带,也只能无奈的放弃。最后我们想到了直接用单片机控制数码管,采用动态扫描的方式来实现时间显示,用按键切换来实现。但这样的话,编程就相对来说复杂了很多。星期三,上午开始了编程,8个段选和4个位选就占了12个I/O口,定时和中断占2个口,四个按键也占了4个口,这样一来串行口就显得很紧张。但这不是最主要的,编程是块难啃的骨头,连续编了三天的程序,周五晚上进行仿真调试通过,7月18号的周一来实验室进行硬件调试,硬件调试也经历了数码管显示错位,乱码,按键不灵的问题,通过线路的重新连接,消抖的程序的修改,一一把这些问题解决了。经过经过一上午辛苦的调试,终于成功的把万年历设计出来了!3.2 心得体会回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说单片机的动态扫描原理,不懂分得二极管的正负极,不知道数码管是共阴极还是共阳极,对单片机汇编语言掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。 本次课程设计,真可谓是感慨万千,从一开始的一无所知,到后来的轻车熟路,其中所经历的波折真是无以言表。坚持不懈是我最大的收获,在课设过程中我曾一度有想放弃的念头,但理智战胜了冲动,我还是坚持下来了,坚持就是胜利!同时也再一次让我体会了团队协作的重要性,我们分工协作,各显神通,一起讨论,一起攻关,请别的组同学帮忙,向老师请教遇到不懂的问题,互相提问,互帮互助。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在xxx同学的帮助下解决了难题,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!也感谢学校为我们课程设计提供了这么好的设备,这么好的环境。附录#include#define uchar unsigned char#define uint unsigned intsbit P3_5=P35;sbit P3_1=P31;sbit P3_2=P32;sbit P3_3=P33;sbit P3_4=P34;#define Switch P3_5 /显示切换#define Adjust P3_1/调整#define UP P3_2/加#define DOWN P3_3/减#define POSITIVE_DISP /共阳极显示定义uchar flag; /显示切换标志uint msec;/毫秒uint sec;/秒int min=41; /分int hour=21; /小时int day=15; /天int month=7; /月 int yearl=11; /年int yearh=20; /年uint tcnt; /定时器计时标志:每250us加1uint cursor=0; /当前光标闪烁位uchar a=0xff; /LED显示掩码#ifdef POSITIVE_DISP uchar code Seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阳极数码管段码uchar code Segbit=(10),(11),(12),(13);#else/uchar code Seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/共阴极极数码管段码!(需要修改)/uchar code Segbit=(10),(11),(12),(13);#endifvoid delay(uint t)/延时 uint i; while(t-) for (i=0;i0;i-) for(j=248;j0;j-);void display(uchar L1,uchar L2,uchar L3,uchar L4) if(cursor=2&(flag)P1=Segbit3|a;P0=L1;delay(1);elseP1=Segbit3;P0=L1;delay(1); /显示十位 if(cursor=2&(flag)P1=Segbit2|a;P0=L2;delay(1);elseP1=Segbit2;P0=L2;delay(1); /显示十位 if(cursor=1&(flag)P1=Segbit1|a;P0=L3;delay(1);elseP1=Segbit1;P0=L3;delay(1); /显示个位 if(cursor=1&(flag)P1=Segbit0|a;P0=L4;delay(1);elseP1=Segbit0;P0=L4;delay(1); /显示个位main() TMOD=0x02; /设置模式为定时器T0的模式2 (8位自动重装计数初值的计数值) TH0=0x06; /设置计数器初值,靠TH0存储重装的计数值X0=256-250=6 TL0=0x06; TR0=1; /启动T0 ET0=1; /开启定时器T0中断允许 EA=1; /开启中断总控制 while(1) if(P3_1=0)/调整时间标志0:不调整 1(2):调整对应数码管时间(1:个位 2:十位) Kdelay(); if(P3_1=0) cursor+; if(cursor2)cursor=0; if(cursor)/如果需要调整时间则扫描加减按键,否则不需要扫描 if(P3_2=0) Kdelay(); if(P3_2=0) if(1=flag) if(cursor=1)min+;if(min=60)min=0; if(cursor=2)hour+;if(hour=24)hour=0;else if(2=flag) if(cursor=1)day+;if(day=32)day=1; if(cursor=2)month+;if(month=13)month=1;else if(3=flag) if(cursor=1)yearl+;if(yearl=100)yearl=0; if(cursor=2)yearh+;if(yearh=100)yearh=0; if(P3_3=0) Kdelay(); if(P3_3=0) if(1=flag) if(cursor=1)min-;if(min0)min=59; if(cursor=2)hour-;if(hour0)hour=23;else if(2=flag) if(cursor=1)day-;if(day1)day=31; if(cursor=2)month-;if(month1)month=12;else if(3=flag)if(cursor=1)yearl-;if(yearl0)yearl=99; if(cursor=2)yearh-;if(yearh3)flag=0;cursor=0; if(flag=0) /显示秒和毫秒display(Segsec/10,Segsec%10,Segmsec/10,Segmsec%10);else if(flag=1)/显时分 display(Seghour/10,Seghour%10,Segmin/10,Segmin%10); else if(flag=2) /显示月日 display(Segmonth/10,Segmonth%10,Segday/10,Segday%10);else if(flag=3) /年display(Segyearh/10,Segyea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025「合同管理专员业绩评估表」
- 2025年眼科疾病诊断与治疗技能考核模拟试卷答案及解析
- 2025年肿瘤内科常见病例分析测试卷答案及解析
- 2025年急救医学院校学生急救技能操作考试试卷答案及解析
- 2025年肿瘤科药物治疗方案选取模拟测试答案及解析
- 2025年新材料应用领域科技成果转化专项资金申报指南报告
- 新能源汽车整车安全性能提升2025年技术创新报告
- 飞机模线样板移型工三级安全教育(公司级)考核试卷及答案
- 2025年算法工程师部署策略面试题(含答案与解析)
- 拖拉机整机装试工基础考核试卷及答案
- 高考英语词汇3500词精校版-顺序版
- 社区公共卫生护理考核试卷
- DBJ43-T 315-2016 现浇混凝土保温免拆模板复合体系应用技术规程
- 鲁教版初中英语单词总表
- MOOC 理解马克思-南京大学 中国大学慕课答案
- 《医疗卫生机构安全生产标准化管理规范(修订)》
- 乡镇报灾系统培训课件
- 如何辅导初中数学差生
- 《病史采集》课件
- 康复治疗大厅规划方案
- 《慢性病综合防治》课件
评论
0/150
提交评论