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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机课程设计秒计时器设计文档格式.docx

1、1 设计理论 51.1设计指标 51.2方案论证 52 AT89S51 介绍 62.1主要性能特点 6 2.2管脚说明 63 系统硬件电路 93.1单片机最小应用系统 93.1.1复位电路 113.1.2时钟电路 123.2显示电路 133.2.1数码管的结构和分类 133.2.2显示驱动方式 143.3键控电路 153. 3. 1矩阵式键盘的工作原理 153. 3. 2矩阵式键盘的按键识别方法 154 软件程序设计 174.1程序流程图 174.2单元程序设计 194.3源程序 235心得体会 246参考文献 251 设计理论1.1设计指标(1)该倒计时器应具有基本倒时功能;(2)具有暂停,

2、复位功能;(3)时间可以任意调整;(4)时间用数码管显示,初始值为99S,扫描时间为1MS。1.2方案论证采用单片机程序设计制作,它是利用芯片AT89S51的特殊功能,上电两个数码管将显示99,P3口控制4X4矩阵按键开关,输入数字。通过P0口对两片74HC273进行控制,一片输出字型码,一片输出字位码。P2.4和P2.5控制74HC02,来确定字位和字形码地址。其系统框图如图1所示。2 AT89S51 介绍AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件

3、采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。2.1主要性能特点1、4k Bytes Flash片内程序存储器; 2、128 bytes的随机存取数据存储器(RAM);3、32个外部双向输入/输出(I/O)口;4、5个中断优先级、2层中断嵌套中断;5、6个中断源;6、2个16位可编程定时器/计数器;7、2个全双工串行通信口;8、看门狗(WDT)电路;9、片内振荡器和时钟电路;10、与MCS-51兼容;11、全静态工作:0Hz-3

4、3MHz; 12、三级程序存储器保密锁定;13、可编程串行通道;14、低功耗的闲置和掉电模式。2.2管脚说明VCC:电源电压输入端。GND:电源地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。PDIP封装的AT89S51管脚图P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高

5、,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八

6、位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(T0定时器的外部计数输入) P3.5 T1(T1定时器的外部计数输入) P3.6 /WR(外部数据存储器的写选通) P3.7 /RD(外部数据存储器的读选通) P3口

7、同时为闪烁编程和编程校验接收一些控制信号。I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此

8、引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:外部程序存储器访问允许。当

9、/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:片内振荡器反相放大器和时钟发生器的输入端。XTAL2:片内振荡器反相放大器的输出端。3 系统硬件电路3.1单片机最小应用系统单片机最小系统是单片机在发挥具体测控功能时所必须的组成部分。单片机最小应用系统方框图,如图3所示图3 单片机最小系统应用框图3.1.1复位电路单片机在开机时都需要复位,以便CPU及其他功能部件都处于一个确定的初

10、始状态,并从这个状态开始工作。单片机复位电路工作原理:当通电瞬间 稳压电源给电容充电。RESET为复位输入端,当RESET引脚持续两个机器周期以上的高电平时,使单片机完成复位操作,随着电容充电结束,将使电容与电阻之间将呈现低电平,单片机复位结束。复位操作的主要功能是把PC初始化为0000H,使单片机程序存储器从0000H单元开始执行程序。本设计主要采用上电自动复位电路,其电路图如图4所示图3.1.2时钟电路本篇论文选择的方案中采用的是内部振荡方式。采用内部方式时在XTAL1和XTAL2引脚上接石英晶体和微调电容可以构成振荡器,如图5所示。图中C1、C2起稳定振荡频率、快速起振的作用。内部振荡方

11、式所得的时钟信号比较稳定,实用电路中使用较多。振荡频率的选择范围为1MHz12MHz。3.2显示电路显示器件有很多种,常用的有发光二极管,数码管,液晶显示器等,本文采用通用型的LED数码管。 3.2.1数码管的结构和分类LED数码管根据LED的接法不同分为共阴和共阳两类,它们的发光原理是一样的,只是它们的电源极性不同而已,其结构图分别如图6所示,本设计使用共阳数码管。 (a)共阴结构(3.2.2显示驱动方式数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。本文主要采用动态显示驱动。由于数码管要点亮需要31

12、0mA的电流,但单片机不能提供如此大的电流故需要加74HC273加以驱动,单片机输出端引脚的电压约为5V,如果直接加载到数码管上将烧坏数码管,因此在这部分电路中一并加限流电阻,根据理论计算和实际的经验限流电阻取470,其电路图如图7所示一片作为输出字形,一片作为输出字位3.3键控电路键盘是微机应用系统中使用最广泛的一种数据输入设备,按照键盘按键的结构形式,可分为独立式键盘和矩阵式键盘。本文主要采用矩阵式键盘,此键盘控制电路主要是用于调整时间,其电路结构图如图9所示。3. 3. 1矩阵式键盘的工作原理 在键盘中按键数量较多时,为了减少I/O 口的占用,通常将按键排列成矩阵形式,如图1 所示。在矩

13、阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而图(9)4X4矩阵按键是通过一个按键加以连接。这样,一个端口(如P1 口)就可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9 键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O 口作为输出端,而列线所接的I/O 口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低

14、电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。3. 3. 2矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。1、判断键盘中有无键按下将全部行线R0-R3 置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中。若所有列线均为高电平,则键盘中无键按下。2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低

15、电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。为了保证键每闭合一次CPU 仅作一次处理,必须却除键释放时的抖动。44 软件程序设计4.1程序流程图 系统程序流程图如图10所示。4.2单元程序设计1.打开中断和定时器 TMOD=0X11; ET0=1; ET1=1; EA=1; TH0=0X3C; TL0=0XB0; TH1=0xfc; TL1=0x18; TR1=1; TR0=1; 2.中断0time() interrupt 1 change=0; shi=0; ge=

16、0; if(-t) return; else t = 20; if(n=1|n=0) P1_6=0; n = 0; return; n-; 3.矩阵按键输入void get_key() TR1=0; zxm = 0x00;/消隐显示 key_value = 0 ; zwm=0x0e; k=key;/预取key值 if(key & 0x0f) = 0x0e) key_value = 1; if(key & 0x0f) = 0x0d) key_value = 5; 0x0f) = 0x0b) key_value = 9; 0x0f) = 0x07) key_value = 13; zwm=0x0d

17、; 0x0f) = 0x0e) key_value = 2; 0x0f) = 0x0d) key_value = 6; 0x0f) = 0x0b) key_value = 10; 0x0f) = 0x07) key_value = 14; zwm=0x0b; 0x0f) = 0x0e) key_value = 3; 0x0f) = 0x0d) key_value = 7; 0x0f) = 0x0b) key_value = 11; 0x0f) = 0x07) key_value = 15; zwm=0x07; 0x0f) = 0x0e) key_value = 4; 0x0f) = 0x0d)

18、 key_value = 8; 0x0f) = 0x0b) key_value = 12; 0x0f) = 0x07) key_value = 16; zwm=0x00; while(key & 0x0f)!= 0x0f); k=10000; while(-k);4.数码管显示display() interrupt 3 TH1=0Xfc; TL1=0X18; if(dis) zxm = 0; zwm = 0x80; zxm = zxn%10; zwm = 0x40; zxm = zxn/10; dis=dis;5.输入时间 if(key_value=13) TR0=TR0; if(key_va

19、lue=15) n=99; t=20; TR0=1; P1_6=1; if(key_value=14) change=1; if(key_value!=0) if(key_value11)&(change=1)&(shi=0)&(ge=0) n=(key_value-1)*10; shi=1; continue; (shi=1)& n=n+key_value-1; ge=1;(ge=1) n=99; t=20; TR0=1;43源程序 系统总源程序见 附录二5 心得体会这次单片机秒计时设计使得我更加深刻的加深了对51单片机实际应用方面的知识,提高了自己的动手能力,增强了自身的编程能力,积累了一

20、些宝贵的学习经验。通过这次试验,我进一步的51了解了单片机的各管脚以及开发板各部分功能的应用。对单片机的秒计时,有了进一步的了解。知道了解和掌握单片机指令系统中高级语言C语言程序设计的基本知识和方法,4X4矩阵按键扫描原理和编程。对51单片机的中断指令有了新的了解。6参考文献1 康华光 电子技术基础 模电部分(第五版)北京高等教育出版社 2006.1 2孙树朴 电力电子技术 徐州中国矿业大学出版社 2000.33谭浩强 C程序设计(第三版) 北京清华大学出版社 20054胡汉才 单片机及其接口技术(第三版)北京清华大学出版社 2010.5附录1附录2#includeunsigned char

21、xdata key at 0xf7ff;unsigned char xdata zwm at 0xdfff;unsigned char xdata zxm at 0xefff;unsigned char code zx =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;unsigned char t=20,n=99,key_value;unsigned int k;bit dis=1,change=0,shi=0,ge=0;void get_key();void wait();void main() while(1) get_key(); if(key_value=13) TR0=TR0; if(key_value! 0x

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

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