基于c语言单片机倒数计时器课程设计
- 格式:doc
- 大小:222.92 KB
- 文档页数:14
湖南文理学院课程设计报告课程名称:单片机原理课程设计学院:电信学院专业班级:自动化07101学生姓名:指导老师:完成时间:报告成绩:倒计时器设计目录目录 (1)摘要 (3)ABSTRACT (4)第一章设计要求与方案确定 (5)1.1设计意义 (5)1.2设计要求 (5)1.3方案确定 (5)第二章硬件电路 (6)2.1单片机概述 (6)2.1.1 单片机基础 (6)2.1.2单片机与单片机系统 (7)2.1.3 单片机的产生与发展 (7)2.2MCS-51系列单片机介绍 (8)2.2.1 80C51 芯片介绍 (8)2.2.3 最小系统 (9)2.2.4 定时与中断的概念 (10)2.4LED显示电路设计与器件选择 (12)2.4.1.LED显示器的选择 (13)2.4.2LED驱动芯片选择 (13)2.5按键电路设计 (13)2.6蜂鸣器电路的设计 (14)第三章倒计时器的设计 (15)3.1倒计时器系统设计方案及框图 (15)3.2程序设计 (15)3.2.1主程序设计 (15)3.2.2倒计时模块设计 (17)3.2.3键盘扫描数码管显示程序 (17)第四章倒计时器设计仿真 (18)4.1设置倒计时初值 (18)4.2开始倒计时 (18)4.3倒计时结束并报警 (18)总结 (20)参考文献 (21)致谢 (22)附录1 倒计时器设计源程序 (23)附录2 所用元器件清单 (23)摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断的走向深入,同时带动传统控制检测日新月异更新。
在实时控制和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本系统由单片机系统、矩阵式键盘、蜂鸣器和LED数码管显示系统组成。
装置利用AT89C51单片机与74LS245驱动器驱动LED数码管显示。
通过按键控制设定倒计时时间,再通过中断控制系统开始倒计时。
#include<reg51.h>typedef unsigned char uint8;typedef unsigned int uint16;/*七段共阳管显示定义*/uint8 code dispcode[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};/*定义并初始化变量*/uint8 seconde=59;uint16 mstcnt=0;/*函数声明*/void delay(uint8 k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //显示子程序/*****************************//*延时子程序*//****************************/void delay (uint8 k){uint8 j;while((k--)!=0){for(j=0;j<125;j++){;}}}/**************************//*时间处理子程序*//**************************/void time_pro( void){if(seconde==0)//秒钟设为59进制{ seconde=59; }}/*****************************//* 显示子程序*//*****************************/void display(void){P1=dispcode[seconde/10]; //显示秒的十位delay(4);P2=dispcode[seconde%10]; //显示秒的个位delay(4);}/**************************//*1s定时定时*//**************************/void timer0(void) interrupt 1 using 0//定时器0方式1,250us中断一次{TH0=0xff;TL0=0x19;TMOD = 0x01;mstcnt++;if(mstcnt==4000){seconde--;mstcnt=0; //注意对计数单元的清零}}/**************************//*主函数*//**************************/void main(void){ P1=0xff; //初始化p0口,全设为1使数码管P2=0xff; //初始化p2口,全设为1使数码管TMOD = 0x01; //time0为定时器,方式1TH0=0xff; //预置计数初值TL0=0x19;EA=1;ET0=1;TR0=1;while (1){time_pro( ); //时间处理display( ); //显示时间}}。
课程设计说明书课程名称:单片机技术设计题目:倒计时数字秒表设计院系:学生:三学号: *********专业班级: ***********指导教师:四年月日课程设计任务书倒计时秒表摘要:本次课程设计以AT89S52单片机为核心设计一个倒计时数字秒表,计数初值为59并开始每秒自动减1,当按键1按下时记录当前时间值,当按键2按下时显示当前记录值,显示过之后再次按下按键1时秒表复位为59。
本设计硬件部分包括电源电路、复位电路、按键电路、振荡电路、数码管显示电路五部分电路,软件程序部分有定时中断程序、外部中断程序、显示子程序和延时子程序等。
软件Proteus画出原理图并进行仿真,依照仿真成功的原理图接线,在万能版上把个个器件焊接好从而实现预期的功能。
关键词:倒计时 AT89S52 74LS47 数码管目录1.设计背景 (5)1.1、设计课题的提出 (5)1.2、设计作用与意义 (5)2.设计方案 (6)2.1、可行方案选择 (6)2.2、可行方案比较 (6)3.方案实施 (7)3.1、硬件电路的实施 (7)3.2、软件程序的实施 (11)4.结果与结论 (13)4.1、Proteus仿真运行结果 (13)4.2、结论 (14)5.收获与致 (14)6.参考文献 (14)7.附件 (15)7.1、附件一(整体电路图) (15)7.1、附件二(元件清单图) (16)7.1、附件三(程序) (17)7.1、附件四(运行实物图) (22)1.1设计课题的提出计时器日常生活中随处可见,我们手上的电子表,手机上的时间显示等,这些利用数字电路实现的装置,与机械时钟相比具有更高的准确性与直观性,且无机械装置,具有更长的使用寿命。
其中重要的组成部分就是计数器模块,是单片机中常见的模块,以计时器为基础还可以设计更多对日常生活密切相关的设备,诸如定时报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、甚至各种定时电器的自动启用等,都是以计时器为基础的。
单片机倒计时课程设计一、课程目标知识目标:1. 理解单片机的基本原理,掌握其内部结构和功能。
2. 学会编写简单的C语言程序,实现对单片机的控制。
3. 掌握倒计时功能的实现方法,理解其工作原理。
技能目标:1. 能够运用所学知识,设计并实现一个具有倒计时功能的小程序。
2. 培养学生的动手实践能力,提高问题解决和团队协作能力。
3. 提高学生编程和调试程序的能力,培养良好的编程习惯。
情感态度价值观目标:1. 激发学生对单片机及编程的兴趣,培养自主学习、持续探究的热情。
2. 培养学生面对问题时的耐心、细心和信心,形成积极向上的学习态度。
3. 增强学生的团队协作意识,培养尊重他人、共同进步的价值观。
课程性质分析:本课程为实践性较强的课程,结合单片机原理和编程技巧,培养学生动手实践能力和问题解决能力。
学生特点分析:本课程针对的是初中或高中年级的学生,他们对单片机有一定的基础认识,具备基本的编程知识,但实践能力有待提高。
教学要求:1. 课程内容要紧密结合课本,确保学生能够将所学知识应用到实际操作中。
2. 教学过程中注重启发式教学,引导学生主动思考、发现问题、解决问题。
3. 重视团队协作,培养学生的沟通能力和合作精神。
4. 教学评估关注学生的实际操作能力、编程技巧和团队协作表现。
二、教学内容1. 单片机基础理论:回顾单片机的内部结构、工作原理及功能,重点掌握时钟电路、I/O口控制、中断系统等基础知识。
相关教材章节:第一章 单片机概述,第三章 单片机内部结构及工作原理。
2. C语言编程:学习单片机编程基础,掌握C语言的基本语法和编程技巧,能编写简单的控制程序。
相关教材章节:第二章 单片机编程语言,第六章 C语言编程实例。
3. 倒计时程序设计:学习倒计时程序的设计方法,掌握定时器/计数器的工作原理,学会编写倒计时程序。
相关教材章节:第五章 定时器/计数器,第七章 常用程序设计实例。
4. 实践操作:结合所学知识,设计并实现一个具有倒计时功能的小程序,包括硬件连接、程序编写、调试与优化。
单片机课程设计秒倒计时概述在单片机课程设计中,秒倒计时是一个常见的实践项目。
本文将介绍如何使用单片机设计一个简单的秒倒计时电路,并使用Markdown文本格式进行说明。
硬件设备•单片机(例如STC89C52)•七段数码管•按钮•电阻、电容等基础元器件功能设计本文设计的秒倒计时电路具有以下功能: 1. 系统上电后,自动开始倒计时; 2. 使用按钮控制启动/暂停倒计时; 3. 使用按钮控制归零操作; 4. 显示倒计时的秒数。
硬件连接七段数码管将7个IO口分别连接到七段数码管的对应引脚,使用共阳极数码管时,将数码管的共阳极引脚连接到VCC,使用共阴极数码管时,将数码管的共阴极引脚连接到GND。
按钮使用一个按钮作为启动/暂停倒计时的按键,使用另一个按钮作为归零操作的按键。
将按钮引脚连接到单片机的GPIO口,并通过上拉电阻将按钮引脚连接到VCC。
软件设计引脚定义首先,需要定义单片机的输入输出引脚。
根据硬件连接,假设七段数码管的引脚分别连接到P0口,启动/暂停按钮连接到P1.0口,归零按钮连接到P1.1口。
可以使用以下代码进行引脚定义:// 引脚定义sbit LED = P0; // 七段数码管连接到P0口sbit KEY1 = P1^0; // 启动/暂停按钮连接到P1.0口sbit KEY2 = P1^1; // 归零按钮连接到P1.1口然后,需要设计倒计时的逻辑。
在每个时钟周期,需要判断是否需要启动/暂停倒计时,以及是否需要进行归零操作。
具体的倒计时逻辑可以使用以下代码实现:// 秒倒计时逻辑void countdown() {static unsigned int seconds = 60; // 倒计时的秒数,默认为60秒static bit running = 0; // 表示倒计时是否运行中,默认为停止状态if (running) {if (seconds > 0) {seconds--;} else {running = 0;}}if (KEY1 == 0) { // 按下启动/暂停按钮running = !running;delay(10); // 延时去抖动}if (KEY2 == 0) { // 按下归零按钮seconds = 60;running = 0;delay(10); // 延时去抖动}}最后,需要设计显示倒计时的逻辑。
XXXXXXXXXXXXX单片机原理及接口技术课程设计总结报告设计题目:电子钟倒计时器的设计姓名:XXXXXXX系别:XXXXXXXXXXXXXXXXXXXXXXXXXXXX专业:XXXXXXXX班级:XXXXXXXXX学号:XXXXXXXXXXX指导教师:XXXX2010年01月12日郑州轻工业学院课程设计任务书题目电子钟倒计时器的设计专业、班级XXXXXXXXX班学号XXXX姓名XXXXXX主要内容、基本要求、主要参考资料等:主要内容1. 以单片机为核心器件组成具有倒计时功能的计时器。
2. 可以通过按键进行复位、启动、暂停等功能。
基本要求1. 能够对电子电路、电子元器件等方面的知识有进一步的认识,独立对其进行测试与检查。
2. 熟悉8052单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
参考资料1. 单片机原理及接口技术张毅刚/彭喜元主编人们邮电出版社2. 单片机试验与实践教程万光毅主编北京航空航天大学出版完成期限:2010年01月12日指导教师签名:课程负责人签名:2010年01月04日绪论单片机自20世纪70年代问世以来,已对人类社会产生了巨大的影响。
尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉、易于使用等优点,在工业控制、智能仪器仪表、办公室自动化、家用电器等诸多领域得到广泛的应用。
在于MCS-51单片机兼容的各种增强型、扩展性等多种衍生单片机产品中,美国ATMEL公司推出的AT89C5x系列单片机在我国的8位单片机市场中占有比较大的份额。
AT89C5x系列单片机有多种机型,其中的基本型AT89C51单片机时十分重要的,因为他是目前替代MCS-51系列单片机的主要芯片之一,具有典型性、代表性,同时也是各种增强型、扩展型等衍生产品的基础。
单片机倒计时课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握倒计时程序的设计方法;2. 学生能运用C语言编写简单的单片机倒计时程序,并理解程序各部分功能;3. 学生了解倒计时在实际应用中的意义,如定时控制、时间管理等。
技能目标:1. 学生能独立完成单片机倒计时程序的设计、编译和调试;2. 学生通过实际操作,提高动手能力,培养解决问题的能力;3. 学生学会使用编程软件和烧录工具,掌握基本的编程技巧。
情感态度价值观目标:1. 学生培养对单片机编程的兴趣,激发学习热情,树立自信心;2. 学生在团队协作中,培养沟通能力,学会分享和互助;3. 学生认识到编程在现实生活中的应用,提高对科技发展的关注,培养创新意识。
课程性质:本课程为实践性课程,以单片机倒计时程序设计为主线,结合C语言编程知识,培养学生的动手能力和实际应用能力。
学生特点:本课程面向初中或高中年级学生,学生对单片机编程有一定的基础,具备基本的C语言知识,喜欢动手实践。
教学要求:课程注重理论与实践相结合,强调学生在实践中掌握知识,教师需提供充分指导,关注学生的学习进度,确保课程目标的达成。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 单片机基础原理复习:回顾单片机的内部结构、工作原理,重点掌握时钟、计数器等基本组成部分。
2. C语言编程基础:巩固C语言基础知识,如数据类型、运算符、控制语句等,为编写倒计时程序打下基础。
3. 倒计时程序设计:a. 倒计时原理讲解,明确倒计时程序的基本思路和实现方法;b. 编写倒计时程序,包括初始化设置、计数器操作、中断处理等;c. 分析程序各部分功能,理解程序运行流程。
4. 实践操作:a. 使用编程软件(如Keil)进行程序编写、编译和调试;b. 利用烧录工具(如STC-ISP)将程序烧写入单片机;c. 观察并分析倒计时程序在实际运行中的表现,如准确性、稳定性等。
单片机课程设计 倒计时一、课程目标知识与技能目标:1. 理解单片机的基本原理和功能,掌握倒计时程序的设计方法;2. 学会使用单片机编程软件,完成倒计时程序的编写、调试与运行;3. 掌握单片机与其他电子元件的连接方法,实现倒计时功能。
情感态度价值观目标:1. 培养学生对单片机课程的兴趣,激发学生的学习热情;2. 培养学生的团队合作意识,学会共同解决问题;3. 培养学生严谨、细致的学习态度,养成良好的编程习惯。
课程性质分析:本课程为单片机课程设计,以倒计时为主题,结合单片机原理、编程技巧和电子技术,旨在提高学生的动手实践能力和创新意识。
学生特点分析:1. 学生具备一定的单片机基础,了解单片机的基本原理和编程方法;2. 学生对实践操作有较高的兴趣,喜欢动手尝试;3. 学生之间存在个体差异,需要因材施教,分层教学。
教学要求:1. 理论与实践相结合,注重培养学生的实际操作能力;2. 采用任务驱动法,引导学生主动探究,提高解决问题的能力;3. 针对不同学生,制定个性化的教学计划,确保每个学生都能达到课程目标。
二、教学内容1. 理论部分:(1)单片机基本原理与结构;(2)倒计时程序设计原理;(3)C语言编程基础;(4)中断与定时器原理。
2. 实践部分:(1)单片机编程软件的使用;(2)倒计时程序的编写、调试与运行;(3)单片机与其他电子元件的连接与调试;(4)倒计时功能实现。
3. 教学大纲:第一周:回顾单片机基本原理,学习C语言编程基础;第二周:学习倒计时程序设计原理,讲解中断与定时器原理;第三周:实践操作,使用编程软件编写倒计时程序;第四周:连接其他电子元件,实现倒计时功能,并进行调试与优化。
4. 教材章节:(1)单片机原理与结构:教材第1章;(2)C语言编程基础:教材第2章;(3)中断与定时器原理:教材第3章;(4)倒计时程序设计:教材第4章。
教学内容安排和进度根据学生的实际水平和接受能力进行调整,确保学生能够扎实掌握所学知识,并能够应用到实际操作中。
51单片机99秒倒计时C语言源程序51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。
目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。
定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。
10*100毫秒=1S计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。
定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*//*数码管,12M晶振*/#include <reg52.h>#define uchar unsigned charsbit p11=P1^1; //连的是继电器。
code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar shiwei;uchar gewei;void delay(unsigned int cnt){while(--cnt);}void main(){TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms*/TH0=0xd8;TL0=0xf0;IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=1; //开定时器0while(1){P0=shiwei; //99的十位P2=0; //99的个位,delay(300); //动态扫描数码管延时P0=gewei;P2=1;delay(300);}}void tim(void) interrupt 1 using 1 //定时器0中断{static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时TH0=0xd8; //定时10毫秒TL0=0xf0;count++;if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒{count=0;second--;if(second==0){p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
C51单片机60秒倒计时的模拟与仿真设计C51单片机是一种非常常用的单片机型号,在许多嵌入式系统中都有广泛的应用。
60秒倒计时是一种简单但实用的计时功能,可以在各种场景下使用,比如比赛计时、实验计时等。
这里将介绍如何使用C51单片机来实现并仿真设计一个60秒倒计时。
接下来,我们详细说明60秒倒计时的设计步骤。
1.硬件连接:将4位共阳数码管的共阳极接到单片机的P1口(P1.0-P1.3),将数码管的a-g段分别接到单片机的P2口(P2.0-P2.6)。
在P1口和P2口之间加上适当的上拉电阻。
2.编写程序:使用Keil C51环境新建一个C语言项目,并编写以下程序:```c#include <reg51.h>sbit D1 = P2^0;sbit D2 = P2^1;sbit D3 = P2^2;sbit D4 = P2^3;void delay(unsigned int t)unsigned int i, j;for(i=0; i<t; i++)for(j=0; j<0x4e; j++); }void maiunsigned int i, j, k; while(1)for(i=5; i>=0; i--)for(j=9; j>=0; j--)for(k=9; k>=0; k--)D1=i;D2=j;D3=k/10;D4=k%10;delay(1000);}}}}```4.调试和仿真:将单片机开发板接上电源,程序将开始运行。
我们可以通过观察数码管的显示来判断程序是否正常运行。
在程序开始时,数码管将显示59:59~00:00的倒计时时间,每隔1秒钟更新一次。
经过60秒后,数码管将停留在00:00的状态。
使用C51单片机实现60秒倒计时模拟和仿真设计非常简单,只需几步即可完成。
这个简单的例子也可以帮助初学者更好地理解和掌握C51单片机的使用方法。
当然,实际应用中可能会有更复杂的需求,需要进一步扩展和优化程序,但整体框架和思路仍然是相似的。
单片机课程设计倒计时秒表-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN一、设计目的此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
掌握单片机应用系统的软硬件设计过程、方法及实现,强化单片机应用电路的设计与分析能力。
提高学生在单片机应用方面的实践技能和科学作风;培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。
用所学的知识和自身课外的拓展学习加深对专业课的理解和学习;锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
通过本次课程设计,应加强培养如下能力:(1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力;(2)学会使用软件Proteus画原理图和仿真调试。
(3)学会基本焊接电路板的技能通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
二、设计要求1、可以以实现正常秒表的所有功能,包括启动、暂停、复位等;2、可以自由设定倒计时时间(10s、20s、30s···),并进行倒计时;3、显示方式自选;4、任选一款51单片机;5、扩展功能:在秒表的基础上增加时钟功能,倒计时完成时加入报警单元,如声音、灯光等。
1.设计原理与方法1.1.设计原理本次课程设计的题目是:可编程倒计时装置,其中分和秒都是两位数字显示,键盘预先设置要倒计时的时间,按键启动倒计时装置,数码管动态显示倒计时的画面,当倒计时归零后,发出声音,提示倒计时结束。
该装置利用AT89S52单片机作为倒计时器的核心控制器,针对需要倒计时的场合进行可调时间的倒计时功能。
首先通过键盘矩阵输入设置的要倒计时的时间,定好了相关的设置时或分或秒,进行倒计时的按键启动操作。
在输入数字进行倒计时设置时,每一次切换选择设置时分秒都会将显示清零。
当全部时间输入确定后,按下确认键后,可以计算总共倒计时时间,并将其显示在数码屏上。
按键启动后,数码管会动态的进行显示时间,直到最后归零。
倒计时完成后,通过蜂鸣器发出指示报警音,再次按下启动按钮可以清除报警音,回复待机状态。
基本完成了题目要求实现的功能。
其系统的原理框图如下所示:该图就是本设计的总的原理图,利用核心cpu的相关端口,可以进行相对应的功能实现,其具体的实现内容在后面的内容,进行具体的说明和介绍。
1.2设计方案为了实现题目的要求,具体进行三个部分的设计。
第一部分是输入部分,这个部分是用于倒计时的时间设置,采用矩阵键盘。
特点是占用单片机I/O口少,但软件上需要编码。
由于该系统涉及到了0~9数字的输入,只用单片机本身的I/O口难以实现实现,且还需要选择设置时分秒,引脚需求较多,所以用键盘矩阵来实现。
第二部分是显示部分,本设计采用数码管显示倒计时时间。
利用外接74LS47来点亮数码管。
这样CPU8个引脚可输出2位BCD码,如果只用单纯引脚输出,需要24个引脚进行LED选通点亮。
这样就很复杂。
由于七段数码管需要选通6个,故采用轮询方式对每一个应该点亮的数码管进行操作,按键延时采用数码管显示模块填充,从根本上防止抖动。
第三部分是控制部分,利用CPU的中断,在中断服务程序中执行启动与计时到的复位工作,采用负边沿的触发方式。
x x x x x x x x x x x学校课程设计报告课程名称:单片机原理及应用课程设计设计题目:倒计时器系别:通信与控制工程系专业:电子信息工程班级:10级电信2班学生姓名: 张帆杜斌学号: 10409203、10409221起止日期: 2012年12月24日~2013年1月6日指导教师:教研室主任:本系统采用STC89C52作为主控芯片,设计一款的倒计时器,该倒计时器能在数码管显示倒计时的时间,时间可由按键进行设定,4位数码管做显示,能够实现5种倒计时模式,通过控制按键进行选择9999s-0s、999s-0s、99s-0s、9s-0s、开始值由人工输入-0s的特点。
首先检测按键,当相应的按键按下时,进入相应的倒计时方式。
工作方式五为可调初值的倒计时方式,初值也是通过独立按键来设定。
定时中断二十次后即一秒后,初值自动减一。
当初值减到零后,计时停止。
关键词:STC89C52;数码管显示;独立按键;振荡电路设计要求 (1)1 方案论证与对比 (1)1.1 方案一 (1)1.2 方案二 (1)1.3 方案对比与选择 (1)2 单元电路设计与计算 (2)2.1 STC89C52简介 (2)2.2时钟振荡电路的设计 (3)2.3复位电路的设计 (3)2.4数码管显示电路的设计 (4)2.5 独立按键电路的设计 (5)3 系统软件设计 (6)3.1 倒计时主程序流程 (6)3.2 定时器工作流程 (7)4 系统功能测试与整体指标 (8)5 详细仪器清单 (9)6 总结与思考及致谢 (10)参考文献 (10)附录一:倒计时器DXP原理图 (11)附录二:倒计时器电路PCB板图 (12)附录三:实物图 (13)附录四:程序 (14)倒计时器设计任务与要求本项目是由单片机执行设定的程序,在数码管显示倒计时的时间,且能由单片机接受矩阵键盘设定的时间。
由4位数码管做显示,能够实现5种倒计时模式,通过控制按键进行选择9999s-0s、999s-0s、99s-0s、9s-0s、开始值由人工输入-0s。
湖南工程学院课程设计任务书课程名称:题目:倒数计时器专业班级:电子技术1002 班学生姓名:学号:201001180208指导老师:审批:任务书下达日期2013年5月13日星期一设计完成日期2013年5 月24 日星期五目录一、总体思路与基本框图: (1)1)总体思路: (1)2)基本框图: (1)二、具体源程序片段: (2)1、延时函数: (2)2、lcd的写指令函数与写数据函数: (2)3、lcd显示屏与定时器的初始化函数: (3)4、主函数: (4)三、故障分析与改进: (4)四、仿真: (5)五、总结与设计调试体会: (5)七、参考文献: (6)八、课程设计成绩评分表: (17)一、总体思路与基本框图:1)总体思路:该课程设计要求在lcd液晶显示屏上显示时间,则可以利用51系列单片机的芯片来让lcd液晶显示屏显示出课程设计的要求,用定时器T0来定时,定时器T1来控制当时、分、秒都为零时,发出一段音乐响,用独立键盘来调节时、分、秒。
用独立按键s17来代表功能键,控制该调节时还是分或者是秒钟,用s18、s19按键来表示增加键和减小键,即可调节时分秒的大小。
用s20来代表启动键和暂停键。
2)基本框图:基本框图如图1-1所示:图1-1由上图可知,该系统由单片机AT89C52,lcd显示器,蜂鸣器,独立按键等构成的几个模块连接起来的。
二、具体源程序片段:三、1、延时函数:对于该系统我写了两个延时函数,一个延时函数是毫秒级的,还有一个是50us级的。
程序源片段如下://延时50微秒级;void delay50us(uint t){uchar i;for(;t>0;t--)for(i=19;i>0;i--);}//延时毫秒级函数;void delay(uint t){uint i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}2、lcd的写指令函数与写数据函数:这两个函数,我根据lcd的时序图一步一步的写出来的,都是一些固定的指令,源程序如下://写指令函数;void write_com(uchar com) {en=0;rs=0;rw=0;P0=com;delay50us(100);en=1;delay50us(500);en=0;} //写数据函数;void write_data(uchar dat) { en=0;rs=1;rw=0;P0=dat;delay50us(100);en=1;delay50us(500);en=0;}3、lcd显示屏与定时器的初始化函数:Lcd初始化:{second=10;minut=0;hour=0;delay50us(300); write_com(0x38); delay50us(100); write_com(0x38); delay50us(100); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); write_com(0x80);for(i=0;i<16;i++){write_data(table2[i]);delay50us(100);}write_com(0x80+0x40); for(i=0;i<16;i++){write_data(table1[i]);delay(5);}//定时器初始化;{TMOD=0x11;T H0=(65536-50000)/256; T L0=(65536-50000)%256;E A=1;E T0=1; T R0=0;E T1=1; //TR1=1; }4、主函数:void main(){ init(); //初始化函数;while(1){keycontrol();fmq();}}还有其他一些函数等等,后面的总源程序会一一呈现。
课程设计报告课程名称:单片机报告题目:倒数计数器学生姓名:所在学院:专业班级:学生学号: 14指导教师:2013年12月25 日课程设计任务书摘要本设计是基于AT89C51单片机的倒数计数器,根据单片机技术原理,主要通过软件设计,制作出的倒数计数器能稳定运行,并当计数完成时能发出声音.本设计主要用到数码管,LED灯,键盘,蜂鸣器,定时器/计数器等学习单片机中所必须掌握的部分.利用Keil uVision4作为编程软件进行源程序设计及调试。
同时利用STC-ISP-V483作为程序下载器,将源程序烧入单片机中。
关键词:单片机键盘计数器蜂鸣器 LED灯数码管目录一、概述 (1)二、设计方案 (2)1方案总体思路 (2)2.程序流程图 (2)三、程序 (3)四、总原理图及元器件清单 (4)五、结论与心得 (6)六、参考文献 (6)一、概述单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
本例利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,则发出声响,通知倒计数终了。
二、设计方案1. 方案总体思路用8051单片机控制程序执行,通过LED动态扫描来显示倒计时。
买次执行中断时判断计时是否继续倒计时,同时通过按键扫描的方式来判断是否有输入更改倒计时的控制信息。
通过单片机的处理来达到对倒计时的更新,当倒计时结束时来驱动蜂鸣器发出响声。
2.程序流程图三、程序C语言比汇编语言简洁紧凑,灵活方便,语法限制不太严格,自由度大,本例采用C语言进行程序编写。
#include <reg52.h>#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 as[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar 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() 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 =bs[4]; P2=0x1f; P0=0xff; P2 = 0xff; P0=0xff; P2=0x1f;P0=0x00;b=0;EA=0;}if(m!=0){t=60; m--;}}t--;}}void xianshi()//定义显示子函数{P2 = 0xdf; P0 =bs[0]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[t%10]; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =bs[1]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[(t/10)%10]; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =bs[2]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =0xbf; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =bs[3]; P2=0x1f; P0=0xff; P2 = 0xff; P0 =as[m%10]; P2=0x1f;P0=0x00;delay(3);P2 = 0xdf; P0 =bs[4]; 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;i<z;i++)for(j=0;j<110;j++);}void panduan() //判断子函数{P3=0xfd;delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);if(temp!=0xfd){P2 = 0xc0;P0 =bs[4]; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3);while(P3!=0xfd); //判断是否有键按下及格键功能if(temp==at[0]){ a=1;EA=0; m++;if(m==60)m=0;t=0; P2=0x9f;P0=0xff; P2=0xbf; P0=0xbf;b=1; }if(temp==at[1]){if(a==1){EA=1; a=0;m=5;t=0; P2=0x9f;P0=0xff;}}if(temp==at[2]){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 =bs[4]; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3);while(P3!=0xfe); //判断是否有键按下及格键功能if(temp==at[0]){if(a==1){EA=1; a=0;m=20;t=0;P2=0x9f;P0=0xff;}}P2 = 0xc0;P0 =bs[4]; P2=0x00;P0=0xff;P2 = 0xe0;P0 =0xff;P2=0x00;P0=0x00;delay(3);}}}1.总原理图1,单片机电路2,按键电路3,LED灯及数码管电路五、结论与心得在此次单片机项目设计的过程中,我进一步认识到全面专业知识以及逻辑思考方式对研究问题的重要性,以及成功最重要的一块敲门砖是不妥协,不放弃!在这过程中书到用时方恨少,天下还是好人多——同学和老师的帮助给了我莫大的动力。
在这两周周中,有时一天中翻专业书的次数比前三周理论学习时合起来翻的次数都多,对理论联系实际的重要性有了更新的领悟。
通过请教他人加上自己的理解,并与所学的知识紧密相结合,我相信这过程必然对我今后的学习和工作产生积极的影响。
除了获取新的知识,深感巩固旧的学问也很重要,尤其是结合了这几年学的相关的专业知识,对各门课都做一个全面的温习,才不用带着书柜跑。
这不仅对我现在的学习乃至今后的工作都会有很大的帮助。
通过此次多功能数字计数器的设计制作,我们将从书本上学到的知识应用于实践,再次巩固了我的单片机知识。
虽然设计过程中遇到了很多困难,但是在解决这些问题的过程无疑是对自身专业素质的提高。
当最终调试成功的时候也是对自己的一种肯定。
此次的设计不仅增强了自己在专业设计方面的信息,鼓舞了自己,更是一次兴趣的培养,为以后的学习方向明确了重点。
另外在这次设计中我们遇到了不少的问题,针对不同的问题我们采取不同的解决方法,最终一一解决了。
在我们遇到不懂得问题时,利用课本上、参考书上的知识,以及网上的资料最终解决问题。
和队友之间相互讨论,明白了团队合作的重要性。
本次项目设计还存在很多不足,比如,计数功能也不够详细等。
以后争取完善这个设计,以提高我们的单片机设计能力。
这里很感谢李晓艳老师给我们的指导和教育,感谢她给我们提供了良好的学习设计环境,也很感谢可爱的伙伴们,让我觉得团队的力量很伟大。
希望老师给以评点和支持,我将在今后朝着这些方向学习奋斗。
六、参考文献【3】张毅刚,彭喜元,彭宇.单片机原理及应用.高等教育出版社.2012,11 【2】谭浩强.C程序设计教程.清华大学出版社2011,08【3】张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社,2002. 【4】李春.数字频率计设计[D].北京:邵阳电子厂,2011,02: 4页到7页;【5】张杰,杨艳丽,马莉莉,张立倩.基于单片机C语言的数字频率计设计.内蒙古农业大学学报,第28卷,第二期,2007年6月。