电子定时器设计
定时器的设计实验报告

定时器的设计实验报告1. 引言定时器是一种常见的计时装置,广泛应用于各个领域,如电子设备、工业自动化、交通运输等。
本实验通过设计一个基于脉冲计数的定时器电路,旨在研究其工作原理,探索其在实际应用中的可行性和性能表现。
2. 原理及设计2.1 工作原理脉冲计数定时器是一种通过计数器累加输入脉冲信号的数量来实现计时的装置。
其基本原理是利用脉冲信号的频率和计数器的计数速度之间的关系,通过计数器的累加值计算时间间隔。
2.2 设计步骤1. 确定定时器的时间基准。
时间基准可以选择外部脉冲输入或者由稳定的晶振产生。
2. 设计计数器的位数。
根据计时的范围确定计数器的位数,以保证计数范围的覆盖。
3. 计算计数器的计数速度。
根据计时的最大时间间隔和计数器的位数,计算所需的输入脉冲频率。
4. 根据计数器的位数和计数速度,选择合适的计数器芯片。
5. 配置计数器芯片的工作模式和输入脉冲的触发方式。
6. 连接电路并验证设计是否符合要求。
2.3 接线图_______________input > Counter > output________ Display_________3. 实验结果及分析3.1 实验设置- 输入脉冲频率:1kHz- 计数器位数:4位- 计数器芯片:74HC163- 时间基准:晶振(频率为10MHz)3.2 实验结果在实验过程中,我们通过将输入脉冲接到74HC163计数器芯片的CP 输入端,将74HC163的输出接到数码显示器,观察并记录实时的计数结果。
在实验进行中,我们发现计数器芯片的最大计数范围是15(4位二进制),对应的时间间隔为15ms(1kHz输入脉冲时)。
3.3 实验分析通过实验结果可以看出,该定时器电路能够准确计时,实际测量的时间结果与理论计算非常接近。
由于74HC163计数器芯片的高稳定性和高精度,使得定时器的性能表现较好。
然而,该设计存在一个缺点,即计数器位数的限制。
由于计数器位数的限制,导致定时的最大时间间隔受到了限制。
倒计时定时器电路设计

倒计时定时器电路设计倒计时定时器电路是一个常用的电子电路,在各种应用场景中被广泛使用。
例如,在厨房,我们可以使用倒计时定时器电路来实现烹饪定时;在赛车场上,我们可以使用倒计时定时器电路来准确计时比赛时间等等。
下面是一个关于倒计时定时器电路设计的详细说明:首先,我们需要确定时间范围。
根据实际需求,我们可以选择不同的计时范围,如分钟、小时、天等。
不同的时间范围对应着不同的计数器位数,即需要不同数量的计数器。
例如,如果我们需要设计一个分钟级别的倒计时定时器,那么我们需要使用至少6位的计数器,以便表示60分钟。
其次,我们需要确定时间单位。
在设计倒计时定时器电路时,我们需要确定最小的时间单位,即每次计数的时间间隔。
常见的时间间隔有秒、分、时等。
根据实际需求选择最小时间单位。
然后,我们需要选择适当的计数器和显示单元。
计数器是用来计数的关键元件,可以通过不同的计数器实现不同范围和位数的倒计时。
常见的计数器有二进制加法计数器(如74LS191)、二进制表计数器(如74LS193)等。
显示单元可以是数码管,也可以是液晶显示屏等。
接下来,我们需要设计时钟信号源。
时钟信号源可以是晶振电路,也可以是晶振模块,甚至我们可以利用其他电路的时钟来作为时钟信号源。
设计时钟信号源时,需要确定时钟频率,即每秒或每分钟的脉冲数。
根据时钟频率和时间单位选择相应的频率分频电路,以便生成具有所需时间间隔的时钟信号源。
最后,我们需要设计控制逻辑。
控制逻辑用于控制计数器,根据时钟信号源的脉冲将计数器递减。
当计数器减至0时,需要触发警报或其他操作。
控制逻辑可以使用逻辑门、可编程逻辑器件等来实现。
在设计倒计时定时器电路时,还需要考虑一些额外的功能,如暂停、重置、显示等。
这些功能可以通过增加额外的开关、按钮、显示芯片等元件来实现。
总结起来,倒计时定时器电路设计的关键是确定时间范围、时间单位、计数器和显示单元的选择,设计适当的时钟信号源和控制逻辑。
在设计过程中,需要充分考虑实际需求和制约条件,并结合相应的电子元件来实现倒计时定时器电路。
智能定时器毕业设计

毕业设计(论文)课题名称:基于51单片机的智能定时控制器系统设计指导教师:系别:电子信息系专业:应用电子技术班级:10电子(2)班姓名:毕业设计(论文)任务书课题名称基于51单片机的智能定时控制器系统设计课题性质工程应用专业应用电子技术班级10电子(2)班学生姓名学号指导教师教研室主任系部主任发放日期一、课题条件:随着电子工业的发展,数字电子技术已经深入到了人们生活的各个层面,各种各样的电子产品也正在日新月异地向着高精尖技术发展。
数字电子时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
二、毕业论文(设计)主要内容:1、时间显示:用4位数码管显示当前小时和分钟,秒功能用两LED灯代替(每秒闪烁一次)。
2、可手动设定时间。
3、开机流程:系统有红色和蓝色指示灯,上电10S内,每秒红色指示灯闪烁一次,并伴有蜂鸣声,作为开机/重启提醒,此时绿色指示灯灭。
10S后红色指示灯灭,若光线较强则绿色指示灯亮,若光线较弱则绿色指示灯亮度减半进入节能模式。
3、具有整点报时功能(四短一长),可自行设定报时时间段;三、计划进度:1. 资料的收集撰写开题报告6月20日至9月8日2. 方案设计9月9日至9月15日3. 电路的设计指标分析与确定;后期的电路优化元器件的选择与参数确定9月16日至11月2日4. 毕业设计论文的修改、完善11月3日至11月10日5. 毕业设计答辩11月15 日至11月20日四、主要参考文献:a) 康光华主编.电子技术基础.北京:高等教育出版社,1999.6b) b)何宏主编.单片机原理与接口技术.北京:国防工业出版社.2006.07c) c)杨西明,朱骐主编.单片机编程与应用入门.北京:机械工业出版社.2004.06d) d)先锋工作室编著.单片机程序设计实例.北京:清华大学出版社.2003.01指导教师(系)教研室主任年月日年月日摘要本次设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个简易的电子时钟,它由5V直流电源供电。
定时器控制电路的设计实验报告

定时器控制电路的设计实验报告
本实验的目的是设计一个定时器控制电路,通过将定时器输出与另一个设备连接,以实现定时控制开关等功能。
一、实验原理
定时器电路主要由计时器、比较器和触发器构成。
计时器是根据输入的时钟脉冲来计数的,当达到设定的计数值时,触发比较器产生输出信号,控制输出电路的开关状态。
在本实验中,我们将使用555定时器来实现定时功能,由于555定时器内部电路复杂,本报告不对其具体原理进行详细的介绍。
为了方便设计,我们可以使用NE555单片集成电路来实现。
NE555包括一个内部电压比较器、一个RS触发器和一个放大器,可以直接应用于各种定时器和脉冲发生器电路的设计。
二、实验步骤
1. 检查所需器件是否齐备,包括NE555、电解电容、电阻、导线等。
2. 按照电路图依次连接电路,注意连接的正确性和电路的稳定性。
3. 根据你的需求选择合适的电容和电阻的数值来设定所需的时间长度。
4. 连接计时器的输出端和另一个设备的控制端,例如电机、灯等设备。
5. 打开电源,等待定时结束,观察设备的开关状态,验证电路的正常工作。
三、实验结果
经过实验,我们成功地设计了一个定时器控制电路,并将其输出端与LED灯相连。
在设定的时间结束后,LED灯会自动开启或关闭,验证了电路的正常工作。
四、实验总结
本次实验主要介绍了定时器控制电路的设计原理和实验步骤。
通过实验,我们进一步了解了NE555定时器的应用,熟悉了电容和电阻的作用与选取,掌握了电路连接和调试的技巧。
在实验的过程中,我们还注意到了电路的安全性和稳定性的重要性,这对于其他电子电路的设计和应用也非常重要。
数字定时器设计

数字定时器设计摘要随着时代的进步,电子行业的发展,定时器的应用也越来越广泛。
但传统的定时器都是使用发条驱动式、电机传动式或电钟式等机械定时器。
数字定时器相对传统定时器来说,体积小、重量轻、造价低、精度高、寿命长、而且安全可靠、调整方便、适于频繁使用。
本文以AT89C51单片机为核心模块,使用AT89C51内部定时器计时,设计了数字定时器的键盘模块,显示模块,声光报警模块,辅助电源模块,继电器开关模块以及硬件复位模块。
系统阐述了数字定时器的工作原理,并给出了软件流程。
该数字定时器最大定时时间为30h,可精确到分。
关键词:定时器;单片机;AT89C51;Design Digital TimerAbstractWith the development of the electronics industry, timer becoming widely used. But the traditional timers are used to wind-driven, the motor drive or electro-mechanical timer Bell, etc. Digital timer relatively traditional timer, small size, light weight, low cost, high accuracy, long life, and secure, easy and suitable for frequent use.This paper use the AT89C51 internal timer as time control, designs a digital timer keyboard module, display module, sound and light alarm module, auxiliary power modules, relay switch modules and hardware reset module. The paper systemic explains digital timer works and software process. The digital timer maximum scheduled time for 30h, accurate to the minute.Keywords: Timer; Monolithic machine; AT89C51; Development is scanned.1绪论我们在日常生活中,经常碰到一些需要定时的事情,例如:印相或放大照片,需要定在零点几秒的时间,洗衣机洗涤衣物需要定在几分钟到几十分钟的时间,电风扇需要定在数十分钟的时间。
555定时器及其应用电路的设计

555定时器及其应用电路的设计定时器是一种常用的电子元器件,它能够按照一定的时间间隔来控制电路的开关状态。
在各种相关的应用中,定时器可以实现很多不同的功能,如闹钟、计时器、定时加热器等。
本文将介绍555定时器的基本原理及其应用电路的设计。
一、555定时器的基本原理555定时器是一种集成电路,由三个功能单元组成:比较器、RS触发器和输出级。
它的输入引脚包括控制电压引脚(Control Voltage, CV)、重置引脚(Reset, R)、触发引脚(Trigger, T)、电源引脚(VCC)和地引脚(GND)。
输出引脚包括输出引脚(Out)和电源引脚(Reset Out)。
1.RS触发器:当T引脚的电平从低电平变为高电平时,触发RS触发器的工作。
当R引脚的电压接近VCC时,RS触发器的输出为低电平;当R引脚的电压接近GND时,RS触发器的输出为高电平。
2. 比较器:555定时器包含两个比较器,分别由两个比较器的非反相输入引脚和控制电压引脚(Control Voltage, CV)连接。
当电压比控制电压引脚的电压高时,比较器的输出为低电平;当电压比控制电压引脚的电压低时,比较器的输出为高电平。
3.输出级:输出引脚输出RS触发器的输出,经过输出级进行放大,最终输出到外部电路。
1.单稳态触发器:单稳态触发器可以产生一个固定时间长度的脉冲信号。
当输入引脚接收到一个触发信号时,输出端将输出一个特定持续时间的高电平信号。
这种电路可以应用于检测器、计数器、自动化系统等。
2.方波发生器:方波发生器可以产生一个固定频率的方波信号。
通过调节电阻和电容的数值,可以实现不同的频率输出。
这种电路可以应用于时钟、计数器、调制解调器等。
3.PWM发生器:PWM发生器可以产生一个脉宽可调的方波信号。
调节电阻和电容的数值,可以实现不同的脉宽输出。
这种电路可以应用于调光、马达驱动器、温度控制等。
三、555定时器应用实例1.闪光灯电路:该电路使用555定时器和几个电阻和电容元件构成,可以实现一个闪光灯。
数电课程设计--十秒倒计时定时器

辽宁师范大学《数字电路》课程设计(09级本科)题目:定时器1 学院:物理与电子技术学院专业:电子信息工程班级:班级学号: 14 姓名:张宁指导教师:赵静邱红张卓完成日期:2011 年 10 月 27 日一.设计内容及要求10秒的倒计时定时器,倒计时要求用数码显示,当定时到1秒时,有声音提示,提示声音为秒,当倒计时到0时停止计数二.总体方案设计由设计内容及要求,我设计了一个以NE555构成的多谐振荡电路,来发出一秒间隔的脉冲;用74LS192进行倒计时,通过74LS47连接一个数码显示器;由74LS192发出的高低电平经过逻辑电路变化,连接74LS121来控制蜂鸣器在1秒时响。
三.单元模块设计.1.以NE555构成的多谐振荡器图1 图二NE555的震荡器在本电路中的周期T=C(R1+R2)=1S图三。
图三为多谐振荡电路R1和R2,C的值确保震荡周期为1秒,图三的右下角为复位电路,与下一部分一同介绍。
2.倒计时电路图四图五由74LS192的真值表图四可以看出,若想让元件工作在减计数状态MR,PL非,CPu的值必须分别为0,1,1。
由要求可以看出,192的初始必须是九,所以加了一个复位电路,确保初始值是9.计数器输入端P0,1,2,3对应接高低低高电平。
Q0,Q1,Q2,Q3为计数器输出端接到74LS47上。
NE555的3号管脚与74LS192的4浩管脚相连。
一秒发出一个脉冲,74LS192开始倒计时。
图六4.逻辑电路逻辑电路的作用在于将74LS192输出为一,即Q3Q2Q1Q0=0001时输给报警电路一个负脉冲。
图七图八图九图九管脚功能描述:管脚3(A1)、4(A2)是负边沿触发的输入端;管脚5(B)是同相施密特触发器的输入端,对于慢变化的边沿也有效;管脚10(C ext)和管脚11(R ext/C ext)接外部电容(C x),电容范围在10pF~10μF之间;管脚9(R int)一般与管脚14(V CC,接+5V)相连接;如果管脚11为外部定时电阻端时,应该将管脚9开路,把外接电阻(R x)接在管脚11和管脚14之间,电阻的范围在2~40kΩ之间。
简易定时器数字课程设计

简易定时器数字课程设计一、课程目标知识目标:1. 让学生理解简易定时器的原理和功能,掌握数字电路基础知识。
2. 使学生掌握定时器电路的设计方法,能够运用所学知识搭建简单的定时器电路。
3. 帮助学生了解定时器在实际生活中的应用,拓宽知识视野。
技能目标:1. 培养学生动手操作能力,能够正确使用数字电路实验器材。
2. 提高学生的问题解决能力,能够运用所学知识分析并解决定时器电路故障。
3. 培养学生的团队协作能力,学会在小组合作中共同完成任务。
情感态度价值观目标:1. 激发学生对电子技术的兴趣,培养积极探索、勇于创新的科学精神。
2. 培养学生严谨、细致的学习态度,养成良好的实验习惯。
3. 增强学生的环保意识,认识到电子技术在实际应用中对环境保护的重要性。
本课程针对初中学段学生,结合学科特点和教学要求,注重理论与实践相结合,以培养学生的动手能力、问题解决能力和团队协作能力为核心。
课程目标具体、可衡量,旨在让学生在掌握数字电路基础知识的同时,能够将所学应用于实际生活,提高学生的综合素养。
二、教学内容本章节教学内容主要包括以下三个方面:1. 数字电路基础知识:- 介绍数字电路的基本概念、逻辑门电路及其功能。
- 讲解定时器电路的原理,以课本相关章节为基础,结合实际案例进行分析。
2. 定时器电路设计:- 引导学生了解定时器的种类和功能,掌握典型定时器集成电路的使用方法。
- 依据教材内容,制定详细的教学大纲,逐步讲解定时器电路的设计步骤和注意事项。
教学内容安排:- 第一课时:数字电路基础知识回顾与拓展- 第二课时:定时器电路原理及其应用- 第三课时:定时器电路设计方法与实验操作3. 实践操作与案例分析:- 安排学生进行数字电路实验,搭建简单的定时器电路,巩固所学知识。
- 结合实际案例,分析定时器电路在实际应用中的优缺点,提高学生的问题解决能力。
教学内容具有科学性和系统性,结合教材章节和教学要求,注重理论与实践相结合,旨在帮助学生掌握数字电路基础知识,提高定时器电路设计和分析能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《专业实训设计报告》设计题目:电子定时器设计班级:电子11-2班学号: 1106040207学生姓名:李高指导教师:刘英哲一、设计要求要求实现一个电子定时器,即根据外部输入的计定时间进行计时(时间可采用外部按键的方式输入),并实时的显示当前计时结果,当计时到计定时间后进行警报(可通过LED 闪烁或蜂鸣器)。
计时时间以秒/分为显示单位,可分别实现对5 分钟,10 分钟,15 分钟和20 分钟的计时。
二、设计的目的1.掌握电路设计的一般方法在前面我们已经学习了模电、数电、单片机的理论知识,并对模拟电路,数字芯片和单片机各个接口的功能、各个功能模块有了了解。
通过此次课程设计,我们可以更加了解单片机及其使用,并围绕单片机设计拓展电路。
2.掌握电路仿真和调试过程此次课程设计是一个综合设计,要求我们做出实物。
在设计中我们要学习软硬件,绘制和焊接电路,通过调试使定时器能够正常工作。
3.提高总结能力完成智能定时器实物设计后,我们要在报告中总结设计过程,经验和分析结果,对设计不足的地方提出改进建议。
三、设计的具体实现方案一:采用555定时器来输入脉冲,先通过74LS90进行十进制计数(时钟的秒数个位),达到进位时将进位送入74LS92进行六进制计数(时钟的秒数十位),进位送入74LS90进行十进制计数(时钟的分位);由74LS47译码后送给数码管进行显示。
方案二:该方案仅由主电路、按键电路、显示电路、报警电路,四个模块组成。
整个系统的计时功能皆由STC89C52内部自带的定时器T0来实现;时钟由共阴极数码管显示;五个开关按钮可以实现时钟的加,分钟的加,预置定时时间,定时启停;并利用蜂鸣器进行定时报警。
方案框图如图3-1:图3-1方案一中虽然不需要程序,但是电路复杂,且不符合课程设计“以单片机为核心”的要求,所以最后采用了方案二。
方案二,电路简单,时钟部分完全用软件实现,操作方便,完全可以满足课程设计要求。
根据选题要求,设计任务主要完成LED数码管能实现秒/分的显示;通过按钮调整时间;预置定时时间定时;并提醒用户定时时间到。
为完成相应功能,系统设计包含以下几个基本模块:控制模块、信息显示模块、报警模块。
总的框图如上面方案二中图3-1所示。
1.控制模块的选取方案控制器是控制模块的核心,控制模块主要完成时钟和定时功能,从按键读取操作要求、从数码管和蜂鸣器信息显示。
方案一:采用中小规模集成电路。
采用中小规模集成电路构成的控制电路,由于外围器件多,容易出故障,而且调试起来非常麻烦。
方案二:采用ATMEL 公司的AT89S51作为系统控制器。
单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。
本系统控制算法不太复杂,系统规模较小,适宜采用单片机控制方案。
综合考虑,本设计采用方案二。
2.硬件设计及电路图1)设计原理:硬件电路主要有单片机最小系统,按键输入电路,LED显示电路,蜂鸣器电路组成。
按键输入电路:对定时器输入定时时间、时钟时间,并对其调整。
最小系统:包括晶振电路,复位电路。
LED显示电路:显示数字钟时间,定时时间和按键操作。
2)单元电路设计:控制器:本设计采用A T89S51单片机芯片,AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
在设计中,P1.0~P1.6口用来控制数码管的段选,P1.7口控制小数点显示;P0.4~P0.7则用来控制LED数码管的位选;P0.0、P0.1、P0.2、P0.3是按键输入接口;P2.7控制蜂鸣器报警。
时钟定时由定时/计数器T0实现。
晶振电路设计:时钟电路对单片机是不可缺的,单片机的每个功能都要以时钟电路为基础工作。
单片机内部自带一个时钟电路,外部接入定时控制元件即可构成一个稳定的自激振荡器。
其中机器周期共有12个振荡脉冲周期,因此,机器周期是时钟周期的12倍。
本实验中时钟电路中使用的晶体是12MHz,则时钟周期为(1/12)us,机器周期为1us。
在电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
电路图如下:复位电路设计:复位操作有上电自动复位、按键电平复位和外部脉冲复位三钟方式,本次实验用的是按键电平复位,利用电容的充放电公式来选择所需的电容、电阻,能保证复位信号高电平持续时间大于2个机器周期。
电路图如下:按键输入电路:按键输入电路有4个按钮组成。
SEC/MIN分别控制秒钟、分钟加1,SET 设置时间,START/REST控制定时的启停, ALARM ON/OFF控制报警灯的闪灭。
电路图如下:LED显示电路:LED数码管就是由发光二极管组合而成的1种新型显示器件。
LED显示采用了7SEG-MPX4-CC-BLUE四位共阴极数码管。
最后确定LED显示电路如图:报警灯电路:单片机P2.7口高电平使报警灯工作。
电路如图:3.软件设计软件设计主要是实现对定时/计数器T0的控制。
总体思路是用中断方式计数定时器T0定时到50毫秒的次数。
如果计满20次,则表示1秒到达,接着就可以软件方式实现分,时的加1或清零。
此次设计采用了T0的定时工作方式1。
下面介绍与设计相关的定时/计数器T0的控制寄存器和工作方式1。
定时/计数器方式寄存器TMOD:TMOD低四位用于选择T0的工作方式。
GATE门控(开/关),GATE=0则T0工作在自启动方式;GATE=0工作在外启动方式。
C/—T 计数/定时,C/—T=0则T0定时;C/—T=1计数。
M1M0=00,T0选择工作方式0;M1M0=01,T0选择工作方式1;M1M0=10,T0选择工作方式2;M1M0=11,T0选择工作方式3。
定时/计数器控制寄存器TCON:TR0位是T0运行控制位。
TR0=1,启动T0工作;TR0=0,停止T0工作。
工作方式1:16位定时计数方式,THx和TLx各提供8位计数初值,当TLx低8位计数满回零向THx进位,当THx也计数满回零时置位TFx。
方式1最大计数值为65536,是计数值最大的方式。
程序使用Keil软件编写,完整程序见附2。
下图是程序的总流程图:4.元器件清单四、结论与展望倒计时定时器已经成为人们日常生活中必不可少的物品,随着技术的发展,广泛的应用于各个公共场所,给人们日常的生活、学习、工作、娱乐带来便利,但是由于原先简单的报时功能已经不能够被人们所满足,希望出一些新的功能新的产品来满足人们的需要,例如重要日子的倒计时、秒表等等,这些都能带来更大的方便。
而所有的这些都是以倒计时定时器为基础的。
因此,研究倒计时定时器有着非常重要的意义和实用价值。
电子定时器在家用电器中经常用于延时自动关机、定时。
延时自动关机可用于:收音机、电视机、录音机、催眠器、门灯、路灯、汽车头灯、转弯灯以及其他电器的延时断电及延时自停电源等。
定时可用于:照相定时曝光、定时闪光、定时放大、定时调速、定时烘箱、冰箱门开定时报警、水位定时报警、延时催眠器、延时电铃、延时电子锁、触摸定时开关等。
例如:空调中的定时器,在工作一段时间之后便能自动切断电源停止工作。
夏季夜间使用,入睡前先顶好时间,等睡熟后到了预定时间,空调自动关机,方便节能。
定时器除了应用于家用电器外,还广泛地用于工业农业生产和服务设施等等。
五、心得与体会通过这次课程设计,我学习到了我平时没有接触过的东西,特别是这个学习过程,就突然感觉自己终于把书本上的理论用到了生活中至少是与生活跟接近了。
把这些知识运用到实际中去,对于做家用定时器硬件的时候有着很大的帮助,同时还培养了我的自学能力和独立思考能力。
在调试过程中每当遇到问题的时候,都能通过自己的思考分析,一次又一次的实验最终能够完成。
这对我也是一次很大的考验,能有这次锻炼的机会是我不可缺少的经历。
感谢老师的指导、同学的讨论,让课程设计的整个过程变得更加具有人情味,同学们的思维也能更好地得到舒展。
总的来说,这次课程设计是一个不错的经历,告诉我要不断学习,不断提高。
六、参考文献[1]吴金戎,沈庆阳,郭庭吉. 8051单片机实践与应用[M]. 北京:清华大学出版社,2002[2]李鸿. 单片机原理及应用[M]. 湖南:湖南大学出版社,2004[3]肖洪兵. 跟我学用单片机[M]. 北京:北京航空航天大学出版社,2002.8[4]马忠梅藉顺心,单片机C语言应用程序设计,北京航空航天大学出版社,2007[5]刘刚,秦永左,单片机原理及应用,北京,北京大学出版社,2006[6]李群芳, 肖看, 张士军. 单片微型计算机与接口技术, 2012.1附1:附2:Timer:#include <reg52.h>#include "cext.h"#include "timer.h"#include "taskproc.h" // interrupt period (1 msec)#define tmr_time 1e-3static uchar counter ;static uchar cnt, dpcnt, kbcnt;static uint timer_counter;#include <reg52.h>#include "cext.h"#include "timer.h"void main( void ){ // initializes internal 8052 timer.// Clock Frequency = 12 MHzinit_timer(12e6);// enables interruptsEA = 1;// loop for everwhile (1);}void ISR_timer2 () interrupt 5 using 1 // Timer2 isr{ // Clear interruptTF2 = 0;// Do it at 1msled_mux();// Task procedure.// Each task runs every 10ms multiplied by its own task counter // S0:if (counter == 1){ if (cnt == 100){ cnt = 0;led_counter();}// Increment of the Timer task countercnt++; }// S1:if (counter == 2){ if (dpcnt == 20){ dpcnt = 0;blink_dp(); }// Increment of the decimal point task counterdpcnt++; }// S2:if (counter == 3){ if (kbcnt == 25){ kbcnt = 0;get_key(); }// Increment of the keyboard task counterkbcnt++; }if (++counter == 10) counter = 0;/*State tableS0: Timer countsS1: Blink dpS2: get keysOther task state are null*/ }void init_timer (float fclk)// Timer2 initialization{ int tmr_reload;counter = 0; // initialize state counter// initialization T2CON:// CP/RL2 = 0 (autoreload, no capture),// EXEN2 = 0 (disable external input T2EX),// C/T2 = 0 (timer, no counter),// RCLK = TCLK = 0 (timer, no baud rate generator), // TF2 = EXF2 = 0 (interrupt flags cleared)// TR2 = 0 (timer stop, please)T2CON = 4;// Load timer2 autoreload bytestmr_reload = (0xFFFF - (uint)((fclk * tmr_time) / 12)); RCAP2H = high_byte(tmr_reload);RCAP2L = low_byte(tmr_reload);// Highest priority for Timer2 interruptsPT2 = 1;// Enables Timer2 interruptsET2 = 1;// Start Timer2TR2 = 1; }Task Proc:#include <reg52.h>#include "cext.h"char num[ ] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 7-seg codeschar add[ ] = {0x0fe,0x0fd,0x0fb,0x0f7}; // Multiplexing addresschar dpn[ ] = {0,0,0,0}; // Dots matrixchar buf[ ] = {0,0,0,0}; // Counter bufferchar alm[ ] = {0,0,0,0}; // Alarm sets bufferchar value, key_mask, new_key;static uchar d0, d1, d2, d3, d5;static uchar flag;static uchar digit_counter;static char set_flag;static char set_count;static char set_alm;static char stop_counter = true;char un, th;uint timer;uint alarm;uchar del;// P2.7. Alarm outputsbit alm_out = P2^7;// processor switch contest.#pragma registerbank (1)// Multiplexing Task. Do it every 10msvoid led_mux (){ if (!set_flag){ // Normal counting. Display the counts.value = buf[digit_counter];P1 = num[value] | dpn[digit_counter] ; }else{ // Display alarm valuesvalue = alm[digit_counter];P1 = num[value] | dpn[digit_counter] ; }if (set_alm){ // Timer and alarm valuetimer = buf[0] * 1000 + buf[1] * 100 + buf[2] * 10 + buf[3]; alarm = alm[0] * 1000 + alm[1] * 100 + alm[2] * 10 + alm[3]; // Check whether the alarm condition is occured or notif ((alarm - timer) <= 0){ alm_out = false; // Make alarm out low.stop_counter = true ; // Stop the counter. } } // Drive the digit actually multiplexed.P0 = add[digit_counter];for (del=0; del<100; del++) ;// Increase multiplexer address to the next digitdigit_counter++ ;// Did you diplay all digit ?if (digit_counter >= 4)// Start again.digit_counter = 0;// Pulse high P0.0, P0.1, P0.2 and P0.3P0 = P0 | 0x0f; }// Blink on and off the dots when counting and alarm is on.void blink_dp (){ if (!set_flag && !stop_counter){ if (flag)dpn[1] = 0x80;elsedpn[1] = 0x0;flag = !flag; } }// Counter. Counts from 00.00 to 59.59 min.sec.// The Timer interrupt is driven every 1 sec.void led_counter (){ if (!stop_counter) buf[3]++;if (buf[3] > 9){ buf[3] = 0;d3 = true; }if (d3){ ++buf[2];d3 = false; }if (buf[2] > 5){ buf[2] = 0;d2 = true; }if (d2){ ++buf[1];d2 = false; }if (buf[1] > 9){ buf[1] = 0;d1 = true; }if (d1){ ++buf[0];d1 = false; }if (buf[0] > 5){ buf[0] = 0;d0 = true; } }// Four keys Task manager.// Timer interrupt driven every 250msvoid get_key (){ char valid_key;char delay = 127;key_mask = P0 & 0xf0;while (--delay >= 0) ;valid_key = P0 & 0xf0;if (key_mask != valid_key) valid_key = 0;while ((P0 & 0xf0) != (0 | (valid_key & 0x40))) ;switch (valid_key){ case 0x10: // Reset Timerbuf[0] = 0;buf[1] = 0;buf[2] = 0;buf[3] = 0;alm_out = true;stop_counter = !stop_counter;break;case 0x20: // Set alarm++set_count;if (set_count == 1){ // First time SET is pressed. Sets secondsset_flag = true;dpn[0] = 0; dpn[1] = 0; dpn[2] = 0x80; dpn[3] = 0x80; } else if (set_count == 2){ // Second time SET is pressed. Set minutesset_flag = true;dpn[0] = 0x80; dpn[1] = 0x80; dpn[2] = 0; dpn[3] = 0; } else if (set_count == 3){ // Latest time SET is pressed. Return to timer functions. set_flag = false;set_count = 0;dpn[0] = 0; dpn[1] = 0; dpn[2] = 0; dpn[3] = 0; }un = 0;th = 0;break;case 0x40: // Set seconds/minutesif (set_count == 1){ ++un;if (un > 9){ th++;un = 0;if(th > 5)th = 0; }alm[3] = un;alm[2] = th; }else if (set_count == 2){ ++un;if (un > 9){ th++;un = 0;if(th > 5)th = 0; }alm[1] = un;alm[0] = th; }break;case 0x80: // Set alarm on/offset_alm = !set_alm;if (set_alm){ dpn[0] = 0x80; dpn[1] = 0x80; dpn[2] = 0x80; dpn[3] = 0x80;} else{ dpn[0] = 0x0; dpn[1] = 0x80; dpn[2] = 0x0; dpn[3] = 0x0; } break; }}。