1、基于c语言单片机倒数计时器课程设计课程设计报告课程名称:单片机报告题目:倒数计数器学生姓名:所在学院:专业班级:学生学号: 14指导教师: 2013年 12月25 日课程设计任务书报告题目倒数计数器完成时间12,25学生姓名专业班级指导教师职称讲师总体设计要求和技术要点1.任务利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出声响,通知倒计数终了。2.要求(1)显示格式为“分分:秒秒”。(2)用4个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。(3)程序执行后工作指示灯LE
2、D闪动,表示程序开始执行,按下操作键K1K4动作如下。 K1可调整倒计数的时间160分钟。 K2设置倒计数的时间为5分钟,显示“0500”。 K3设置倒计数的时间为10分钟,显示“1000”。 K4设置倒计数的时间为20分钟,显示“2000”。工作内容及时间进度安排17周-18周周一到周五,上午8:00-11:40,下午2:00-5:40。(1)17周周一:学生选题,明确任务,指导教师对课题进行讲解,资料检索,。(2)17周周二:硬件设计(3)17周周三:硬件仿真(4)17周周四:软件设计(5)17周周五:软件设计(6)18周周一:软件设计(7)18周周二:综合调试(8)18周周三:书写课程设
3、计报告(9)18周周四:书写课程设计报告(10)18周周五:答辩评分课程设计成果1与设计内容对应的软件程序2课程设计总结报告摘要本设计是基于AT89C51单片机的倒数计数器,根据单片机技术原理,主要通过软件设计,制作出的倒数计数器能稳定运行,并当计数完成时能发出声音.本设计主要用到数码管,LED灯,键盘,蜂鸣器,定时器/计数器等学习单片机中所必须掌握的部分.利用Keil uVision4作为编程软件进行源程序设计及调试。同时利用STC-ISP-V483作为程序下载器,将源程序烧入单片机中。关键词:单片机 键盘 计数器 蜂鸣器 LED灯 数码管目录一、概述1二、设计方案21方案总体思路22程序流
4、程图2三、程序3四、总原理图及元器件清单4五、结论与心得6六、参考文献6一、 概述 单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。 AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CP
5、U 和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。本例利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出声响,通知倒计数终了。二、设计方案1. 方案总体思路用8051单片机控制程序执行,通过LED动态扫描来显示倒计时。买次执行中断时判断计时是否继续倒计时,同时通过按键扫描的方式来判断是否有输入更改倒计时的控制信息。通过单片机的处理来达到对倒计时的更新,当倒计时结束时来驱动蜂鸣器发出响声。2程序流程图v三、程序 C语言比汇编语言简洁紧凑,灵活方便,语法限制不太严格,自
6、由度大,本例采用C语言进行程序编写。#include #define uchar unsigned char#define uint unsigned intvoid diyi(); / 函数声明void xianshi();/函数声明void panduan();/函数声明void delay(uchar z);/ 函数声明uchar t=10,m=0,a,temp,b; /定义相关变量uchar code at=0xe0,0xd0,0xb0,0x70;uchar code as10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;ucha
7、r code bs=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;/数组定义void main() /主函数 diyi(); /调用定义函数 EA=0; /关闭中断 while(1) panduan(); /调用判断函数 if(b=1) xianshi();/调用显示函数 void diyi() /定义定义子函数 P2=0xbf; P0=0xbf; P2=0x9f; P0=0xff; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;void exer1()
8、interrupt 1 /定义定时器/计数器子函数 uchar t1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; t1+; if(t1=10) P2=0x9f;P0=0x00; if(t1=20) P2=0x9f;P0=0xff; /LED灯闪烁 t1=0; if(t=0) if(m=0) P2=0xbf; P0=0xff;P2=0x9f;P0=0xff;/定时时间到了 打开蜂鸣器 关闭LED灯 P2 = 0xdf; P0 =bs4; P2=0x1f; P0=0xff; P2 = 0xff; P0=0xff; P2=0x1f;P0=0x00;
9、b=0; EA=0; if(m!=0) t=60; m-; t-; void xianshi()/定义显示子函数 P2 = 0xdf; P0 =bs0; P2=0x1f; P0=0xff; P2 = 0xff; P0 =ast%10; P2=0x1f;P0=0x00;delay(3); P2 = 0xdf; P0 =bs1; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as(t/10)%10; P2=0x1f;P0=0x00;delay(3); P2 = 0xdf; P0 =bs2; P2=0x1f; P0=0xff; P2 = 0xff; P0 =0xbf; P2=0x
10、1f;P0=0x00;delay(3); P2 = 0xdf; P0 =bs3; P2=0x1f; P0=0xff; P2 = 0xff; P0 =asm%10; P2=0x1f;P0=0x00;delay(3); P2 = 0xdf; P0 =bs4; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as(m/10)%10; P2=0x1f;P0=0x00;delay(3); void delay(uchar z)/延时子函数 uchar i,j; for(i=0;iz;i+) for(j=0;j110;j+);void panduan() /判断子函数 P3=0xfd;
11、delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(5); if(temp!=0xfd) P2 = 0xc0;P0 =bs4; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3); while(P3!=0xfd); /判断是否有键按下及格键功能 if(temp=at0) a=1;EA=0; m+;if(m=60)m=0;t=0; P2=0x9f;P0=0xff; P2=0xbf; P0=0xbf;b=1; if(temp=at1) if(a=1) EA=1; a=0;
12、m=5;t=0; P2=0x9f;P0=0xff; if(temp=at2) if(a=1) EA=1;a=0;m=10;t=0; P2=0x9f;P0=0xff; P3=0xfe; delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(5); if(temp!=0xfe) P2 = 0xc0;P0 =bs4; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3); while(P3!=0xfe); /判断是否有键按下及格键功能 if(temp=at0) if(a=1)
13、EA=1; a=0;m=20;t=0;P2=0x9f;P0=0xff; P2 = 0xc0;P0 =bs4; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3); 1 总原理图 1,单片机电路2,按键电路3,LED灯及数码管电路五、结论与心得 在此次单片机项目设计的过程中,我进一步认识到全面专业知识以及逻辑思考方式对研究问题的重要性,以及成功最重要的一块敲门砖是不妥协,不放弃! 在这过程中书到用时方恨少,天下还是好人多同学和老师的帮助给了我莫大的动力。在这两周周中,有时一天中翻专业书的次数比前三周理论学习时合起来翻的次数都多,
14、对理论联系实际的重要性有了更新的领悟。通过请教他人加上自己的理解,并与所学的知识紧密相结合,我相信这过程必然对我今后的学习和工作产生积极的影响。除了获取新的知识,深感巩固旧的学问也很重要,尤其是结合了这几年学的相关的专业知识,对各门课都做一个全面的温习,才不用带着书柜跑。这不仅对我现在的学习乃至今后的工作都会有很大的帮助。 通过此次多功能数字计数器的设计制作,我们将从书本上学到的知识应用于实践,再次巩固了我的单片机知识。虽然设计过程中遇到了很多困难,但是在解决这些问题的过程无疑是对自身专业素质的提高。当最终调试成功的时候也是对自己的一种肯定。此次的设计不仅增强了自己在专业设计方面的信息,鼓舞了
15、自己,更是一次兴趣的培养,为以后的学习方向明确了重点。 另外在这次设计中我们遇到了不少的问题,针对不同的问题我们采取不同的解决方法,最终一一解决了。在我们遇到不懂得问题时,利用课本上、参考书上的知识,以及网上的资料最终解决问题。和队友之间相互讨论,明白了团队合作的重要性。 本次项目设计还存在很多不足,比如,计数功能也不够详细等。以后争取完善这个设计,以提高我们的单片机设计能力。 这里很感谢李晓艳老师给我们的指导和教育,感谢她给我们提供了良好的学习设计环境,也很感谢可爱的伙伴们,让我觉得团队的力量很伟大。 希望老师给以评点和支持,我将在今后朝着这些方向学习奋斗。六、参考文献【3】张毅刚,彭喜元,彭宇.单片机原理及应用.高等教育出版社.2012,11【2】谭浩强.C程序设计教程.清华大学出版社2011,08【3】张永瑞.电子测量技术基础M.西安:西安电子科技大学出版社,2002.【4】李春.数字频率计设计D.北京:邵阳电子厂,2011,02:4页到7页;【5】张杰,杨艳丽,马莉莉,张立倩.基于单片机C语言的数字频率计设计.内蒙古农业大学学报,第28卷,第二期,2007年6月。教师评语及设计成绩教师评语:(指导教师手写)课程设计成绩:指导教师:(签名)日期:年月日