ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:252.17KB ,
资源ID:8159723      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8159723.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可编倒计时装置.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可编倒计时装置.docx

1、可编倒计时装置目录1.MCS-51单片机简介及设计原理 11.1 MCS-51单片机简介 11.2 设计原理 32.系统硬件线路设计图 42.1 CPU介绍 42.2 LED数码管模块和显示原理 42.3振荡电路模块和原理 62.4复位电路模块和原理 72.5独立按键电路和原理 82.6矩阵按键电路和原理 82.7蜂鸣器电路和原理 92.8上拉电阻的使用 93.程序框图 114.单片机资源分配表 125.源程序 136.性能分析 187.总结与心得 208.参考文献 211.MCS-51单片机简介及设计原理1.1 MCS-51单片机简介单片机它不是完成某一个逻辑功能的芯片,而是把一个计算机系统

2、集成到一个芯片上。作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。C语言是本设计的程序设计语言,它比低级语言更通俗易懂,设计更为方便,故采用它来设计程序。单片机全称为单片微型计算机(Single Chip Microcomputer)。因为单片机主要用于控制系统中,所以又称微控制器(Microcontroller Unit,MCU)或嵌入式控制器(Embedd

3、ed Controller)。它具有嵌入式应用系统所要求的体系结构,微处理器,指令系统,总线方式,管理模式等。他把计算机的基本部件都微型化集成到一块芯片上了,通常片内部都含有中央处理部件(CPU),数据存储器(RAM),程序存储器(ROM,EPROM,Flash ROM),定时器/计数器和各种输入/输出(I/O)接口他们之间的相互连接结构如图1-1所示。 图1-1-1 单片机结构8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总

4、线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原

5、始数据或表格。定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但805

6、1单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。1.2 设计原理本课设使用AT89C52 加上少许的外围电路就可做成一个可预置秒分的倒计时装置,并在计时结束时发出报警声音。本文旨在从硬件和软件上具体分析其设计方法。系统由主单片机和外围电路构成,其功能框图如图:系统整体硬件电路包括,电源部分、显示部分、按

7、键调整部分以及单片机主板部分。 图1-2-1 秒分倒计时器单片机结构整个设计包括振荡电路、复位电路、按键控制电路、矩阵键盘扫描电路、LED 显示电路、扬声器输出电路等。其中振荡电路,复位电路是和芯片AT89C52一起构成一个最小系统,按键控制电路通过P3口来控制置数和启动倒计时,矩阵键盘扫描电路通过和P1口连接来进行循环按键扫描,LED显示电路则是用P0口的数选和P2口低四位的位选来实现数字显示,而扬声器是跟P3.6口对接得到周期的报警信号从而发出规律的报警声。2.系统硬件线路设计图2.1 CPU介绍由单片机AT89C52,,12M晶振,1nF和10uF电容,1k电阻和按键等组成。图2-1-1

8、 CPU组成电路图2.2 LED数码管模块和显示原理LED显示器又称为数码管,LED显示器由8个发光二极管组成。中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器下图为典型的数码管:图2-2-1 8段LED数码管数码管的分类:数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2

9、位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。数码管的驱动方式: 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从

10、而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89C521单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,

11、c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的

12、显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。本次电路设计采用的是共阴极数码管,通过动态扫描方式驱动,其电路模块如下: 图2-2-2 8段LED数码管显示电路2.3振荡电路模块和原理本次设计要使用到AT89C52单片机的时钟振荡功能。AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器。振荡电路如下图所示:图2-3-1 时钟振荡电路如图所示,外接石英晶体或者陶瓷谐振器以及电容C1,C2接在放大器的反馈电路中构成

13、并联谐振电路。谐振器本身对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度以及温度的稳定性,如果使用石英晶体,推荐使用30pF,而使用陶瓷谐振器建议选择40pF。本次设计使用的是石英晶体谐振器,因此采用1nF的电容,频率大小采用12MHZ与6MHZ均可,这里采用的是12MHZ晶振。2.4复位电路模块和原理复位电路虽然简单,但其作用非常重要。一个单片机系统能复正常运行,首先要检查是否能复位成功,其中手动复位开关比较常用。图2-4-1手动开关复位电路VCC上电时,C充电,在1K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,

14、1K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下Reset,C放电。Reset松手,C又充电,在1K电阻上出现电压,使得单片机复位。几个毫秒后,单片机进入工作状态。2.5独立按键电路和原理采用一一对应式方式输入设计键盘控制电路部分,其键盘结构图如下所示:图2-5-1独立按键电路 独立按键与P3口P3.2与P3.3连接,其中P3.2口按键的作用是开始置数,每按一次,置一位数,而与P3.3口连接的按键则是起启动倒计时的作用,同时需要注意的是,P3.2口的按键一旦按下必须置数,否则按下P3.3口按键无效。2.6矩阵按键电路和原理图2-6-1矩阵按键电路 矩阵键盘扫描电路与P1

15、口的8个端口相连进行键盘扫描,而此次设计中使用的是3*4矩阵键盘的按列扫描,通过不断循环给P1.4,P1.5,P1.6口置零,观察P1.0,P1.1,P1.2,P1.3口是否有低电平,来判断是否有按键被按下,从而通过列端口和行端口得出是哪个按键被按下。2.7蜂鸣器电路和原理蜂鸣器部分采用IO口输出,单片机P1端口驱动蜂鸣器。蜂鸣器有两类3大品种。一类是压电式,一类是电磁式,电磁式又有两大品种,铁振膜式和动圈式,二者原理一样只是结构不同。所有蜂鸣器都有两种类型:纯蜂鸣器和带驱动的蜂鸣器,蜂鸣器都是用音频信号驱动的,都是交流驱动。报警器的种类很多,比如:扬声器,蜂鸣器等,本次设计采用的是电磁式蜂鸣

16、器作为报警器。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、震动膜片以及外壳等组成。接通电源后,振荡器产生的音频信号通过电磁线圈,使得电磁线圈产生了一个磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。蜂鸣器电路图如图所示:图2-7-1喇叭报警电路 2.8上拉电阻的使用考虑在什么时候使用上拉电阻呢?总结如下: (1)当TTL电路驱动CMOS电路时,如果TTL电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 (2)OC门电路必须加上拉电阻,以提高输出的高电平值。(3)为加大输出引脚的驱动能力,有的单片机管脚上也常使用

17、上拉电阻。(4)在CMOS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻降低输入阻抗,提供泄荷通路。 (5)芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限,增强抗干扰能力。 (6)提高总线的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰。 (7)长线传输中电阻不匹配容易引起反射波干扰,加上拉电阻使电阻匹配,有效的抑制反射波干扰。另外,上拉电阻阻值的选择原则包括: (1)从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。(2)从确保足够的驱动电流考虑应当足够小;电阻小,电流大。(3)对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑以上三点

18、,上拉电阻阻值通常在1k到10k之间选取。根据以上原则,本设计所选择的是10K的电阻。图2-8-1上拉电阻电路3.程序框图4.单片机资源分配表编程之前,应先将可用资源和需要资源列举出来,一一分配后就能清楚的了解整个设计结构,不易出错。AT89C52单片机IO口有P0、P1、P2、P3,中断源有外部中断0、1两个,定时器中断0、1两个,一个串口中断。外围电路为1个4位数码管,8个上拉电阻,1个蜂鸣器,1个LED,14个轻触式按键。现分配如下:4位数码管的数据端连接在一起,然后接入AT89C52 P0端口,其8个共阴极引脚接入P2口作为选通。将2个按键接到P3上,使用P3.2和P3.3端口;蜂鸣器

19、也接到P3口上,使用P3.6端口,矩阵键盘则接入P1口的8个端口。为了计时1秒以及动态扫描数码管,使用一个定时器0作为时钟。P0 数码管数据端P1矩阵键盘扫描P2低四位为数码管的位选端P3P3.2和P3.3为独立按键,P3.6为喇叭选通端表4-1 单片机资源使用分配5.源程序#include#define uchar unsigned char#define uint unsigned intuchar code table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uint miao;uint ge,shi,bai,qian,i,

20、j;sbit d1=P32;sbit d2=P33;sbit d4=P36;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void display(uint ge,uint shi,uint bai,uint qian) P2=0xf1; P0=tablege; delay(10); P2=0xf2; P0=tableshi; delay(10); P2=0xf4; P0=tablebai; delay(10); P2=0xf8; P0=tableqian; delay(10);uchar keyscan() ucha

21、r num,temp; while(1) P1=0xef; temp=P1; temp=temp&0x0f; if(temp!=0x0f) delay(10);/按键去抖动 temp=P1; temp=temp&0x0f; if(temp!=0x0f) temp=P1; switch(temp) case 0xee:num=1; break; case 0xed:num=4; break; case 0xeb:num=7; break; return num; while(temp!=0x0f) temp=P1; temp=temp&0x0f; P1=0xdf; temp=P1; temp=t

22、emp&0x0f; if(temp!=0x0f) delay(10); temp=P1; temp=temp&0x0f; if(temp!=0x0f) temp=P1; switch(temp) case 0xde:num=2; break; case 0xdd:num=5; break; case 0xdb:num=8; break; case 0xd7:num=0; break; return num; while(temp!=0x0f) temp=P1; temp=temp&0x0f; P1=0xbf; temp=P1; temp=temp&0x0f; if(temp!=0x0f) de

23、lay(10); temp=P1; temp=temp&0x0f; if(temp!=0x0f) temp=P1; switch(temp) case 0xbe:num=3; break; case 0xbd:num=6; break; case 0xbb:num=9; break; return num; while(temp!=0x0f) temp=P1; temp=temp&0x0f; display(ge,shi,bai,qian);/不加的话会有显示错误 void main()bit d=1; uchar key; uint wei=0x08; ge=0;shi=0;bai=0;qi

24、an=0; P2=0x0f; while(1) display(ge,shi,bai,qian); if(d1=0) delay(10); if(d1=0) key=keyscan(); if(key=0&key=5) if(wei=0x08)wei=0x01; else wei=wei=6&key=9) if(wei=0x08)wei=0x01; else wei=wei1; switch(wei) case 0x01:ge=key;break; case 0x02:shi=5;break; case 0x04:bai=key;break; case 0x08:qian=5;break; w

25、hile(!d1); if(d2=0) delay(10); if(d2=0) d=0; while(d=0) miao=(qian*10+bai)*60+shi*10+ge; miao-; for(i=1;i60;i+) display(ge,shi,bai,qian); ge=(miao%60)%10; shi=(miao%60)/10; bai=(miao/60)%10; qian=(miao/60)/10; if(miao=0) display(0,0,0,0); for(j=0;j100;j+) d4=0; display(0,0,0,0); delay(10); d4=1; d4=

26、1; d=1; 6.性能分析图6-1程序仿真图1如图,通过按按键P3.2进行置位,每按一下,置一位数字;再按按键P3.3进行启动倒计时,需要注意的是启动倒计时之前无需对4位都进行置数,但是一旦按了P3.2按键,就必须通过矩阵键盘进行置数,否则按P3.3无法启动倒计时。图6-2程序仿真图2由于,此次设计未采用定时器,所以倒计时装置的倒计时部分程序运用的是for循环和delay延时构成的自减函数,所以在计时方面不能准确的确定为一秒,会稍有误差,其次矩阵键盘扫描和LED数码管动态显示都会运用到循环,前者在此次设计中运用的是自循环,无返回值的话就不会跳出循环,而后者采用的是调用的时候必须放在一个循环体

27、中,否则只会显示四位数码管中的一位。当倒计时到0时,就会启动报警装置,如图,会有一段“滴滴滴滴”的声音提醒我们,倒计时已结束。此时,可以重新按P3.2进行置数,之后又可以继续按P3.3进行启动倒计时,验证了这段程序重复运行的可能性。另外,无论在何时,只要按下Reset复位键,都会重置程序,数码管初始化显示0000,可以重新进行置数和启动倒计时。7.总结与心得通过本次课程设计,我对单片机和C语言的相关知识得到了进一步的,刚开始看到这个题目的时候,感觉倒计时不是很难,有对应的输入,在控制芯片的作用下,进行递减的控制,就可以达到效果。所以刚开始的时候,做的还不是很认真,当设计进行到具体环节的时候,问

28、题就体现出来了,并不是像刚开始的那样简单。首先要想到芯片的对应P口的功能,于是要对所学的单片机的知识进行复习,查找相关资料对那些知识进行扩充,于是就大量的查找相关资料和阅读,了解清楚了相应的功能后,开始了设计。接着就是具体的模块部分的设计。我把整体模块分为三个部分进行滴,输入部分,即倒计时的预设置模块,用键盘作为输入模块。显示部分,由于我把设计的功能扩大到了小时,而且秒、分的设计要显示两位,所以需要用到4个七段数码管。而控制部分则有AT89C52芯片来完成其功能。 再就是进行相对应的仿真设计。由于再仿真用到的是Proteus软件,所以要对这个软件的应用进行学习。也是开始查找一些资料书和上网找一些应用方面的技巧,在做了充分的准备后,开始了仿真绘图。在绘图的过程中,有时候也是弄错了,导致仿真的结果出不来,在同学的帮助下,仔细查找和修改,还是完成了本设计,感觉集体的智慧还是很强大的。 最后就是程序的设计和完成,本次设计既可以用C语言,也可以用汇编来写,于是我就尝试着,用两种语言来写。刚开始,着手用汇编写的时候,刚开始的功能还可以很顺利的完成,但是到多位数字输入的时候,感觉用汇编来写就有点复杂了,于是换成用C语言来写,这样就轻

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1