《基于单片机的多功能数字电子钟的设计—课程设计论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的多功能数字电子钟的设计—课程设计论文.doc(14页珍藏版)》请在三一办公上搜索。
1、课程设计任务书学院信息科学与工程学院专业自动化学生姓名学号设计题目基于单片机的多功能数字电子钟的设计(软件) 课程设计内容及要求:内容:1.设计电路,选择器件 2.利用Protel画原理图 3. 编程,调试4. 焊接电路,调试要求:1.电子钟能复位功能,计时功能 2.电子钟能实现省电功能 3.电子钟能实现调时功能进度及安排:1查资料 2设计电路画电路图 3编程与调试 4焊接硬件电路并调试 5写报告指导教师(签字): 年 月 日 学院院长(签字): 年 月 日 成 绩 评 定 表学生姓名班级学号专 业自动化课程设计题目基于单片机的多动能数字电子钟的设计(软件)评语组长签字:成绩日期 20 年 月
2、 日 目 录1功能数字电子钟11.1 数字电子钟简介11.2 数字电子钟的原理12 程序框图13控制系统的软件计.43.1 主程序代码43.2 程序运行结果分析84 设计总结和体会95参考文献9摘要 随着社会的不断进步,电子技术也飞速的向前发展.特别是大规模集成电路的发展,把我们带进了电子化时代。电子产品的日益增多,也让我们的生活越来越方便。特别是计算机的发展,真可谓是突飞猛进。自从1946年世界上第一台计算机的诞生以来,还不到六十年的时间,计算机就取得了举世瞩目的成绩。特别是在通信领域,实现了信息一体化的时代。作为大学生的我们,更需要加强实践能力的培养。课程设计在一定程度上反映了我们对理论知
3、识的理解程度,是理论与实践的桥梁。它不仅能锻炼我们的动手能力,而且能够培养我们对问题的思考能力以及对知识的进一步了解。当你能把你所学到知识化作为现实的东西时,我们能力就提升到一个新台阶。很多人都认为学习是枯燥无味的,有时觉得与现实太遥远。在学习之余,我们仍然可以找到一点有趣的事情,比如说做一个声控灯泡、数字钟等等。生活中我们要找到自己感兴趣的东西。这次综合课程设计中,我们制作了八路抢答器。抢答器是为智力竞赛参赛者答题时进行抢答而设计的一种优先判决器电路,广泛应用于各种知识竞赛、文娱活动等场合。能够实现抢答器功能的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式,但这种方
4、式制作过程复杂,而且准确性与可靠性不高,成品面积大,安装、维护困难。本节介绍一种利用51单片机作为核心部件进行逻辑控制及信号产生的八路抢答器。近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋扩大,特别是工业测控、尖端武器和日用家电等领域更是因为有了单片机而生辉增色。单片机应用技术已成为一项新的工程应用技术。本次课程设计我们做的是八路抢答器,我们采用AT89C51单片机实现抢答功能,性能更稳定,更易操作调试。1功能数字电子钟1.1 数字电子钟简介 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是
5、基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。1.2 数字电子钟的原理 该电子时钟由AT89C2051,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次
6、按下按键不放松,则可实现小时的调节,同样每按一次小时加一。2 程序框图 开始 定义堆栈区 数据缓冲区、标志位初始化 调用键盘扫描程序 是否手动按 是地址指针指向计时缓冲区 调用时间设置程序 主程序流程图 满18次?是秒单元加160s到?是秒单元清0,分单元加160分到?是分单元清0,时单元加124小时到?是时单元清0 返回 子程序流程图 是否运行中断程序是执行手动操作嗯键 分别调节秒分时 摁第一次,调节秒 摁第二次,调节分钟 摁第四次,调节小时 恩四次,中断停止 执行主程序自动计时 中断程序流程图3 控制系统的软件设计 3.1 主程序代码 #include#define uchar unsig
7、ned char /无符号定义字符串#define uint unsigned int / 定义无符号整数sbit rs=P35; / 位定义sbit lcden=P34;sbit s1=P30;sbit s2=P31;sbit s3=P32;uchar count,s1num;char miao,shi,fen;uchar code table= NOW TIME IS ; /定义数据组uchar code table1= 00:00:00;void delay(uint z) /设置延时程序uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write
8、_com(uchar com) /: 写程序rs=0;lcden=0;P2=com;delay(5); /: 调用延时程序lcden=1;delay(5);lcden=0;void write_date(uchar date) /: 写数组rs=1;lcden=0;P2=date;delay(5);lcden=1;delay(5);lcden=0;void init() /: 定义调时子程序uchar num;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(n
9、um=0;num15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)write_date(table1num);delay(5);TMOD=0x01;TH0=(65536-50000)/256; /:初始化程序 TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void write_sfm(uchar add,uchar date) /:子写程序uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+ad
10、d);write_date(0x30+shi);write_date(0x30+ge);void keyscan() /: 子扫描程序if(s1=0)delay(5);if(s1=0)s1num+;while(!s1);if(s1num=1)TR0=0; /: 中断截止write_com(0x80+0x40+10); /:自动写秒write_com(0x0f);if(s1num=2) write_com(0x80+0x40+7); /: 写分钟if(s1num=3)write_com(0x80+0x40+4); /:写小时if(s1num=4) s1num=0; /:sl为零write_com
11、(0x0c);TR0=1; /: 中断起作用,手动调时if(s1num!=0)if(s2=0)delay(5);if(s2=0)while(!s2); /:s2不为0if(s1num=1) /:摁一下摁键 miao+; /:加计时if(miao=60) /: 秒为60时miao=0; /:秒复位write_sfm(10,miao); /:写入秒在10位write_com(0x80+0x40+10); /;重新计秒if(s1num=2)fen+;if(fen=60) /: 分调时fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)sh
12、i+;if(shi=24) /:小时调时shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s3=0)delay(5);if(s3=0)while(!s3);if(s1num=1) /: 嗯一下秒调时miao-; /: 秒减程序的执行if(miao=-1)miao=59; write_sfm(10,miao); /; 写在第十位为秒write_com(0x80+0x40+10);if(s1num=2) /;分减调时fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1n
13、um=3)shi-; /:小时减调时if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);void main() /: 定义主程序init(); /:调用子程序int t()while(1) /:死循环程序keyscan(); /: 扫描程序,是否嗯按键void timer0() interrupt 1 /:中断程序TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=18) /:数为18开始计数count=0;miao+; /:自动秒计时if(miao=60)miao
14、=0;fen+; /:分计时if(fen=60)fen=0;shi+; /: 小时计时if(shi=24)shi=0;write_sfm(4,shi); /: 写入时的位地址write_sfm(7,fen);write_sfm(10,miao); 3.2 程序运行结果分析功能太过单调,只能实现时分秒的显示,设计比较简单。电路图的设计过于单调,用的器件太少,实现调节时间的按钮太少,不能很好的实现时间的调节。在测试过程中,六位数码显示管只显示五位数字,有一位数字不亮,通过多次的修改程序并在PROTEUS软件环境中进行仿真,最终解决了这个问题,同时也透露出本人在单片机电路设计和程序设计方面的不足。不
15、过最后的仿真效果非常好,实现了预期的效果,能过通过多功能控制键调节时间和是否进入省电模式,是一个比较令人满意的设计。 4 设计总结和体会 在这次单片机设计课程的学习中,主要是由我们学生自己来完成,老师在关键的时刻加以指点。我在这次单片机设计课程学习中收获蛮多的,首先做事情一定要沉下心来,认真地对待。带着迷惑,自己对以前的书本进行复习,经过一番试验,最终取得理想的效果。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:8051单片机及其引脚说明,为本次课程设计提供了一定的资料。由于平时很少进行课程设计,所以对于课程设计报告的格式也是近期才接触到,经过这两次的设计,为我们以后毕业设计的制作也奠定了一定的基础。5参考文献1 谢自美电子线路设计实验测试M武汉:华中理工大学出版社,1992.2 何立民单片机应用系统设计M北京:北京航空航天大学出版社,1993.3 楼然笛单片机开发M北京:人民邮电出版社,1994.4 付家才单片机控制工程实践技术M北京:化学工业出版社 2004.3.5 李光才单片机课程设计 实例指导M 北京:北京航空航天大学出版社 2004.6 朱定华单片机原理及接口技术实验M北京:北方交通大学出版社2002.11.