收藏 分享(赏)

项目一 电子钟开发学习指南.doc

上传人:精品资料 文档编号:8594746 上传时间:2019-07-04 格式:DOC 页数:19 大小:1.12MB
下载 相关 举报
项目一 电子钟开发学习指南.doc_第1页
第1页 / 共19页
项目一 电子钟开发学习指南.doc_第2页
第2页 / 共19页
项目一 电子钟开发学习指南.doc_第3页
第3页 / 共19页
项目一 电子钟开发学习指南.doc_第4页
第4页 / 共19页
项目一 电子钟开发学习指南.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、项目一 电子钟开发学习指南一、基本知识学习1LED 数码管显示接口技术(1)LED 数码管工作原理及显示码LED 显示器内部由多个发光二极管组成。根据内部二极管连接方式,LED 显示器在结构上又分为共阴极型和共阳极型两种。共阴极型内部发光二极管阴极连在一起,接低电平。共阳极型内部发光二极管阳极连在一起,接高电平。单个数码管内部共有 8 只发光二极管,7 只为字段,可组成字形,第八个为小数点。故单个数码管有人称为七段数码显示,也有人称之为八段显示。如图 2 示,(a)为数码管引脚及外型图,(b)为共阴极型 LED 显示器,(c)为共阳极型 LED 显示器。由图 2 可见,a、b、c 、d、e、f

2、 、g 分别为七个发光段引脚,dp 引脚为小数点。9 脚接电源或接地端,共 10 个引脚。图 2(b)为共阴极型内部电路图,图 2(c)为共阳极型内部电路。数码管工作时每段需串联一个限流电阻,而不能用一个电阻放在共阳极或共阴极端。否则,由于各发光段的参数不同,容易引起某段过流而烧坏数码管。另外,电阻值的选取只要保证管子正常发光即可。一般单个数码管电流控制在 1020mA 较合适。电流太大会加大耗电量,而电流太小又无法得到足够的发光度。7 6 9 1 2 5 4 9 3 8 图 2 数码管引脚及内部结构图数码管发光原理分两种情况:共阴极型如图 2(b)所示,a、b、c、d、e、f 、g 各引脚输

3、入高电平有效。只要哪个引脚输入为高电平,对应的二极管就会发亮。共阳极型,如图 2(c)所示。这种结构数码管的 a、 b、c 、d、e 、 f、g 各引脚输入低电平有效。只要哪个引脚输入低电平,对应的二极管就会发亮。通过点亮不同的发光段可组成不同的字形。输入到数码管 dp 、g、f、e、d、c、b、a 的二进制码称为字段码(或称字形码) ,数码管显示的结果为字形。表 1 是显示字形与共阳极和共阴极两种接法的字段码对应关系。表 1 LED 数码管显示字形与段选码关系显示字形 共阳极段选码 共阴极段选码0 C0H 3FH1 F9H 06H2 A4H 5BH3 B0H 4FH4 99H 66H5 92

4、H 6DH6 82H 7DH7 F8H 07H8 80H 7FH9 90H 6FHA 88H 77HB 83H 7CHC C6H 39HD A1H 5EHE 86H 79HF 8EH 71H“灭” FFH 00H上表中,各发光段 a、b、c 、d、e 、f 、g 及 dp 与数据线的对应关系是 D0D7,即 a 对应 D0、b 对应D1、依次类推,而 dp 对应 D7。各段与管脚的对应关系如图 2(a)所示。只要把共阳极数码管按照引脚 a、b、c 、d、e 、f 、g 、dp 的顺序分别接于单片机 P1 口的 P1.0P1.7,如图 3 所示。由于 P1口在输出时具有锁存功能,只要用指令向 P

5、1 口送出字段码,数码管就可显示出所需字形。例如 MOV P1,#3FH,若采用共阴的数码管,则数码管显示“0” ;若采用共阳型数码管,MOV P1,#88H 则显示“A ”(2)1 位数码管显示接口设计功能要求:设计 1 位数码管显示电路,编程实现从 09 秒计数循环显示。硬件电路C127pC227pC31u R9X1 R1-R7Q1R8EA31RST9 P2.0/A821P2.1/A924P2.2/A1025P2.3/A1 26P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78XTAL218XTAL119U189C51在单片机最小系统的基础上,加上单个数码管显

6、示的控制电路,数码管采用共阴数码管。要让数码管显示数值,需让数码管的位选(公共端)为低电平,将需显示的数值的字型码送给数码管的各段。电路设计时,利用单片机 P1 口送显示值,P1.0 连接数码管 a 段,P1.1 连接数码管 b 段,依此类推,P2.0 作为数码管位选。程序设计由于人的眼睛有迟滞效应,故在控制数码管显示 09 的数值时,每个数值都需显示一段时间,否则眼睛看见的显示效果就会变成数码管一直在闪烁,因此在设计的时候,每次将需显示的数值送数码管段选后,延时一段时间,再换下一个数值。因此,设计流程图如下:参考代码ORG 0000HLJMP MAINORG 0030HMAIN: CLR A

7、MOV 30H,ACLR P2.0MOV DPTR,#TABLOOP: MOV A,30HMOVC A,A+DPTRMOV P1,A开 始程 序 初 始 化1S延 时结 束显 示 值=10?查 表送 显 示显 示 值 加 1显 示 值 清 0LCALL DELINC 30HMOV A,30HCJNE A,#10,LOOPMOV 30H,#0SJMP LOOPDEL: MOV R0,#200DL1: MOV R1,#144DL2: MOV R2,#32DJNZ R2,$DJNZ R1,DL2DJNZ R0,DL1RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,0DH,

8、7FH,6FHEND模拟仿真根据图用 PROTUES 画好电路图,在 MEDWIN 下编译好程序,在 PROTUES 中进行仿真。怎么样,你的数字也显示出来了吗?我想一定显示的很好吧。那么要是我想显示 AF 怎么办呢?赶快试一试吧?(3)2 位数码管显示接口设计功能要求:设计 2 位数码管显示电路,实现从 00 到 59 的秒循环计数显示。硬件电路gabdefc gabcdef gabcdefabcdefgC127pC227pC31u R10X1R1-R7Q2R1EA31RST9 P2.0/A821P2.1/A924P2./A1025P2.3/A1 26P1.01P1. 2P1.23P1.34

9、P1.45P1.56P1.67P1.78XTAL218XTAL119 1 2U1:A3 45 69 81 1013 121 27407VCQ1程序设计2 位显示采用动态显示的原理设计,数码管的段码由单片机的 P1 口经反向器后送数码管各段,位选分别由 P2.0 和 P2.1 控制,当 P2.0 输出 0 时 Q2 导通,数码管显示;当 P2.0 输出 1 时,Q2 截止,数码管不显示。设计流程图如图 1-?所示。开始定时器初始化调用显示中断初始化主程序存储单元初始化开始取显示值查表送显示结束延时 1 S显示子程序开始保护现场( B ) 2 0 ?1 S 到否 ?N个位显示值加 1恢复现场Y显示

10、值清零B 清零显示值为 1 0 ?NY中断返回十位显示值加 1显示值为 6 ?显示值清零YN送位选置显示值初始地址修改显示值地址两位显示结束 ?NY中断子程序图 1-? 2 位显示流程图参考程序代码ORG 0000HLJMP STARTORG 000BHLJMP TIME1ORG 0100HSTART: MOV SP,#5FHMOV B,#20MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB ET0SETB EASETB TR0LOOP: LCALL displaySJMP LOOPdisplay:MOV R0,#2FHMOV A,#01HDD2: INC

11、R0mov p1,R0MOV P2,Alcall delayRL ACJNE A,#04H,DD2retdelay:MOV R5,#50DJNZ R5,$RETTIME1: PUSH ACCPUSH PSWMOV TH0,#4CHMOV TL0,#080HDJNZ B,TENDMOV B,#20INC 30H ;秒个位MOV A,30HCJNE A,#10,TENDMOV 30H,#0INC 31H;秒十位MOV A,31HCJNE A,#6,TENDMOV 31H,#0TEND: POP PSWPOP ACCRETIEND模拟仿真在 PROTEUS 中画好仿真图,在 MEDWIN 中编辑好程

12、序代码,编译通过后产生代码,将代码加载至仿真图中,观察放置效果。(4)电子钟显示部分接口电路设计功能要求:设计一 8 位数码管显示电路,使之分别显示 18。显示程序设计功能要求:设计一 8 位数码管显示电路,使之分别显示 18。 (学生自己动手)2键盘设计(1)键盘接口原理键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向计算机输入指令、地址和数据。一般单片机系统中采用非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。在下图

13、3-5 中,当开关 S 断开时,P1.0 输入为高电平,S 闭合时, P1.0 输入为低电平。由于按键是机械触点,当机械触点断开、闭合时,会有抖动,P1.0 输入端的波形如图 3-6 所示。这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对单片机而言,这已是一段“漫长”的时间了。如果键处理程序采用中断方式的话,在响应按键时就可能会出现问题,也就是说按键有时灵,有时不灵,其实就是这个原因,你只按了一次按键,可是单片机却已执行了多次中断的过程,若执行的次数正好是奇数次,那么结果正如你所料,若执行的次数是偶数次,那就

14、不对了。而如果键处理程序采用查询方式的话也会存在响应按键迟钝的现象,甚至可能会漏掉信号。S P1.0 图 3-5 图 3-6为了使 CPU 能正确地读出 P1.0 口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单片机设计中常用软件法,因此,对于硬件方法我们在此不做介绍。软件去除抖动其实很简单,就是在单片机获得 P1.0 口为低的信息后,不是立即认定 S 已被按下,而是延时 10 毫秒或更长一段时间后再次检测 P1.0 口,如果仍为低,说明 S 的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1.0 为高) ,

15、再延时 510个毫秒,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。当然,实际应用中,对按键的要求也是千差万别,要根据不同的需要来编制处理程序,但以上是消除键抖动的原则。(2)键盘接口电路设计独立式按键接口技术及编程 1通过 I/O 口连接:将每个按键的一端接到单片机的 I/O 口,另一端接地,这是最简单的方法,如图3-7 所示是按键的接法,四个按键分别接到 P3.0、P3.1、P3.2 和 P3.3,这里取用 S1 按键,并在 P1 口接有 8 个发光二极管(共阴极接法) 。对于这种键程序可以采用不断查询的方法,功能就是:

16、检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。下面给出一个例程。其功能很简单,两个键定义如下:P3.0:开始,按此键则灯开始流动(由上而下循环两次结束)P3.0 P3.1 P3.2 P3.3 8051 图 3-7 图 3-8LAMPCODE EQU 21H;存放流动的数据代码ORG 0000HAJMP MAINORG 30HMAIN:MOV SP,#5FH ;堆栈指针初始化MOV P1,#00H ;所有灯都亮MOV LAMPCODE,#0FEH;单灯流动的代码LOOP:ACALL KEY;调用键盘程序ACALL LAMP;调用灯显示程序AJMP LOOP ;反复循环,

17、主程序到此结束;键识别程序KEY:CLR F0;清 F0,表示无键按下。ORL P3,#0FH ;将 P3 口的接有键的两位置 1JB P3.0,K_RET1 ;如果为 1 则一定无键按下ACALL DELAY ;否则延时去抖动ORL P3,#0FH ;再识别一次MOV A,P3ORL A,#0FEHJB P3.0,K_RET1SETB F0 ;设置有键按下的标志,置 F0 为 1K_RET: ORL P3,#0FH ;此处循环等待键的释放JB P3.0,K_RET1 ;读取的数据取反后为 0 说明键释放了,返回AJMP K_RET ;否则等待键释放K_RET1: RET;灯显示程序LAMP:

18、 MOV R0,#16 ;控制彩灯循环点亮次数JB F0,LampStart ;如果 StartEnd=1,则启动MOV P1,#00H ;否则关闭所有显示,所有灯都灭AJMP LAMPRET ;返回LampStart:MOV A,LAMPCODELampR: RL A ;实际就是左移位而已MOV P1,ALCALL D500MSDJNZ R0, LampRLAMPRET: RET;键识别中延时程序,延时 10ms,机器周期为 2usDELAY:MOVR7,#50D1:MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;流水灯的延迟时间,延时 500ms,机器周期为 2usD5

19、00MS: MOV R1,#50LOOP: LCALL DELAYDJNZ R1,LOOPRET END以上程序功能很简单,但它演示了一个键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按键反应“迟钝” ,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家可以仔细考虑一下这些问题,再想想有什么好的解决办法。采用中断方式:如图 3-8 所示。各个按键都接到一个与非上,当有任何一个按键按下时,都会使与门输出为低电平,从而引起单片机的中断,它的好处是不用在主程序中不断地循环查询,如果有键按下,单片机再去做

20、相应的处理。矩阵式键盘接口技术及编程 2矩阵式键盘的结构与工作原理:在键盘中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式,如图 3-9 所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如 P1 口)就可以构成 4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成 4*5=20 键的键盘,而直接用端口线则只能多出一键(9 键) 。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,图 3-9 中,

21、列线通过电阻接正电源,并将行线所接的单片机的 I/O 口作为输出端,而列线所接的 I/O 口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可判断是否有键按下了。具体的识别及编程方法如下所述。矩阵式键盘的按键识别方法:确定矩阵式键盘上何键被按下介绍一种“行扫描法” 。行扫描法又称为逐行扫描查询法,是一种最常用的按键识别方法,如图 3-9 所示键盘,介绍过程如下。键 盘 扫 描有 键 闭 合延 时 去 抖 动扫 描 键 盘计 算 键 值闭 合 键 释 放建 立 有 效 标 志 建 立 无效 标 志返 回 图

22、3 6找 到 闭 合 键NYNYNY图 3-10 键盘扫描程序流程图判断键盘中有无键按下。将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根行线相交叉的 4 个按键之中。若所有列线均为高电平,则键盘中无键按下。VCC 图 3-9 矩阵式键盘判断闭合键所在的位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。行扫描法识别按键的方法

23、就象在二维平面上找确定的点,要在二维平面上找到确定的点,我们首先可以先确定这点的横坐标,然后确定它的纵坐标。而识别按键的位置即是先确定它的行线位置,再确定它的列线位置,然后通过公式:键值=行号列数+列号来计算得到。其设计流程图如图 3-10 所示。(3)电子钟键盘设计采用独立式按键设计,各按键功能为:位选键、加 1 键、确认键和显示模式切换键。二、案例数字电子钟的设计1设计任务LED 数码管时钟电路采用 24h 计时方式,时、分、秒用六位数码管显示。该设计采用单片机最小化应用设计,LED 显示采用动态扫描方式实现。能直接显示时、分、秒十进制数字。具有校时功能,整点报时功能。2设计要求(1)能直

24、接显示时、分、秒十进制数字。(2)具有校时功能。(3)具有整点报时功能。(4)在自制线路板上焊接并调试。3设计框图校时按钮A T 8 9 C 5 1单片机系统处理L E D 显示报时7 4 L S 4 8 段选位选图 a-1系统框图如图 a-1 所示。 CPU 选用的是 AT89C51,由单片机的定时器构成基准时间1s;通过 89C51 的输出口输出 BCD 码,再经过 7448 译码来段选;由 89C51 位选 6 个共阴数码管,显示时钟状态和校时状态、6 个按钮实现校时功能。4单元电路设计(1)AT89C51 单片机系统中心电路192837465RP110KP1.01P1.12P1.23P

25、1.34P1.45P1.56P1.67P1.78REST9RXD10TXD11INT012INT113T014T115WR16RD17XTAL218XTAL119GND20 P2.0 21P2.1 22P2.2 23P2.3 24P2.4 25P2.5 26P2.6 27P2.7 28PSEN 29ALE/P 30EA/VP 31P0.7 32P0.6 33P0.5 34P0.4 35P0.3 36P0.2 37P0.1 38P0.0 39VCC 40U1AT89S51MCU VCCVCCP15P16P17P33P10P11P12P13P14P34P32P00P01P02P03P04P05P0

26、6P07RESTP20P21P22P23P24P25P26P27Y111.0592MHzC520PC620P+ C422uR1010KVCCS10复 位D34148图 a-2 单片机最小系统 (2)按键电路 k1k2k3k4k5k6P10P11P12P13P14P15图 a-3图 a-3 按键电路为了实现数字钟电路中的校时功能而设计的。电路中各个按键的功能:K2 为设置键,K3 为位选键,K4 为加 1 键,K5 为减 1键,K6 为确定键。(3)数码管动态显示电路动态显示:动态显示的特点是将所有数码管的段选线并联在一起,通过控制位选信号来控制数码管的点亮。这样一来,就没有必要每一位数码管配一

27、个锁存器,从而大大简化了硬件电路。数码管采用动态扫描显示,所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的限流电阻。图 a-4 为一种六位 LED 动态显示电路。它是利用芯片 74LS48 输出字段码,单片机的 P2.2P2.7 输出位选信号再经过三极管 9013 驱动数码管。R0220R1220R2220R3220R4220R5220R6220R16R15R13R14R12R11 100P22P23P24P25P26P27A1A2A

28、3A4A5A6A7A1A2A3A4A5A6A7abfcgdeDPY17421105abcdefg3 dp dp d29d312abfcgdeDPYdpabfcgdeDPYdpd18DY1DPYabfcgdeDPY117421105abcdefg3 dp dp d29d312abfcgdeDPYdpabfcgdeDPYdpd18DY2DPYQ1 Q2 Q3 Q4 Q5 Q6P00P01P02P03BI/RBO4 RBI5LT3 A7B1 C2D6a 13b 12c 11d 10e 9f 15g 14U174LS48VCC图 a-45程序设计(1)程序流程图a、主程序流程图:开 始调 用 初 始

29、化 子 程 序设 置 堆 栈调 用 键 盘 (校 时 )和 显 示程 序 , 同 时 等 待 中 断TR0,开 启 T0中 断 置 1EA,CPU开 放 中 断 置 1ET0,允 许 T0中 断 置 1TH0、 TL0赋 值TMOD定 时 器 /计 数 器 方 式 寄 存 器 赋 值B=20程 序 头b、初始化子程序流程图: 开 始R1=2FHA=0R1=AR1=+1判 定 R1=36H?否 是返 回c、动态显示子程序流程图:开 始R7=10R0=2FHA1R0=+1PR02=A调 用 延 时 10usA左 移判 定 =40H?是 否 R7=+1,0?是返 回否d、键盘校时子程序流程图:开 始

30、 判 定 设 置 键 是 否 按 下是 否延 时 去 抖 动 再 判 定 设 置键 是 否 按 下是 否 判 定 位 选 键 是 否 按 下是否 延 时 去 抖 动再 判 定 位 选 键 是 否 按 下是否 返 回数 码 管 位 选左 移 一 位判 定 减 1键 是 否 按 下 判 定 加 1键 是 否 按 下是延 时 去 抖 动 延 时 去 抖 动 判 定 加 1键 是 否 按 下 是 判 定 减 1键 是 否 按 下否 否是 是数 码 管 数 值加 1 数 码 管 数 值减 1 判 定 确 认 键 是 否 按 下是返 回e、中断程序流程图: 开 始AC, PSW压 栈重 设 TH1,L值B

31、-1=0?计 时 S否是B=2030H秒 个 位 加 130H秒 个 位 =10?30H秒 个 位 清 零31H秒 十 位 加 131H秒 十 位 =6?31H秒 十 位 清 零32H分 个 位 加 132H分 个 位 =10?跳 至 累 加器 A,PSW弹 栈跳 至 累 加器 A,PSW弹 栈是 否是 跳 至 累 加器 A,PSW弹 栈否跳 至 累 加器 A,PSW弹 栈3H分 十 位 加 132H分 个 位 清 零是 否A(2)程序代码ORG 0000HA3H分 十 位 =6? 否3H分 十 位 清 零是34H时 个 位 加 135H时 十 位 =2?跳 至 累 加器 A,PSW弹 栈34

32、H时 个 位 清 零是 否34H时 个 位 =4?是否 35时 十 位 清 零 34H时 个 位 =10?34H时 个 位 清 零35时 十 位 加 1是 否中 断 结 束LJMP STARTORG 000BHLJMP TIME1ORG 0100HSTART: MOV SP,#5FHMOV B,#20MOV TMOD,#01HMOV TH0,#4CHMOV TL0,#080HSETB ET0SETB EASETB TR0ACALL CLEARLOOP: LCALL DISPLAYSJMP LOOPCLEAR:MOV R1,#2FHMOV A,#0 CLR1: MOV R1,AINC R1CJN

33、E R1,#36H,CLR1RET DISPLAY:MOV R7,#100DD1: MOV R0,#2FHMOV A,#01HDD2: INC R0MOV P0,R0MOV P2,ALCALL DELAY100USRL ACJNE A,#40H,DD2DJNZ R7,DD1RETDELAY100US:D1: MOV R5,#50DJNZ R5,$RETTIME1:PUSH ACCPUSH PSWMOV TH0,#4CHMOV TL0,#080HDJNZ B,TENDMOV B,#20INC 30H ;秒MOV A,30HCJNE A,#10,TENDMOV 30H,#0INC 31HMOV A,31HCJNE A,#6,TENDMOV 31H,#0INC 32H ;分MOV A,32HCJNE A,#10,TENDMOV 32H,#0INC 33HMOV A,33HCJNE A,#6,TENDMOV 33H,#0INC 34H ;时MOV A,35HCJNE A,#2,TIMENEXTMOV A,34HCJNE A,#4,TENDMOV 34H,#0MOV 35H,#0SJMP TENDTIMENEXT:MOV A,34HCJNE A,#10,TENDINC 35HMOV 34H,#0TEND: POP PSWPOP ACCRETIEND

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报