内容及结束语.doc_第1页
内容及结束语.doc_第2页
内容及结束语.doc_第3页
内容及结束语.doc_第4页
内容及结束语.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、8051芯片我们主要将将8051片内数据存储器的结构。大家都知道8051单片机内部数据存储器可划分为两大区域:00H7FH为片内低128字节RAM区;80H0FFH为特殊功能寄存器区(SFR)。地址为00H07FH的低128字节片内RAM区又可划分为三个区域:1通用寄存器区;2可位寻址区;3用户RAM区(堆栈也可以设在这里)。(1)通用寄存器区:地址(00H1FH) 通用寄存器区由4各寄存器组成:0组(00H07H),1组(08H0FH),2组(10H17H),3组(18H1FH).每个寄存器组含有8个通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7。共有32个通用寄存器。每个可以用寄存器名寻址,也可以直接用字节地址寻址,地址为00H1FH。上电复位时,堆栈指针的初始值指向07H。(2)可位寻址区 8051系列单片机片内RAM的可位寻址区时字节地址位20H2FH的16字节单元,这些单元可位寻址也可字节寻址。共128位。(3)用户RAM区 8051系列单片机片内RAM的用户RAM区地址位30H7FH。这个区域只能用字节地址寻址,堆栈也可以设置在这里。1、8051单片机的核心电路,它包含如下功能部件:(1)一个8位CPU;(2)一个片内振荡器和时钟电路;(3)4K字节片内程序存储器;(4)128字节片内存储器;(5)可寻址64K外部程序存储器;(6)64K外部数据存储器空间及控制电路;(7)21个特殊功能寄存器;(8)21条可编程的I/O线(4个8位并行I/O端口);(9)两个16位定时器/计数器;(10)一个可编程全双工串行口;(11)具有5个中断源,两个优先级嵌套中断结构。2、MCS-51引脚功能说明51系列单片机8031、8051及89c51/89s51均采用40Pin封装的双列直接DIP结构。下图是它们的引脚配置:40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: Pin20:接地脚。 Pin40:正电源脚,工作时,接+5V电源。 Pin19:时钟XTAL1脚,片内振荡电路的输入端。 Pin18:时钟XTAL2脚,片内振荡电路的输出端。 8051的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1接地,外部时即将XTAL1接地,外部时钟信号从XTAL2脚输入。 输入输出(I/O)引脚:Pin39-Pin32为P0.0-P0.7输入输出脚。 Pin1-Pin8为P1.0-P1.7输入输出脚。 Pin21-Pin28为P2.0-P2.7输入输出脚。 Pin10-Pin17为P3.0-P3.7输入输出脚。 Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。 Pin30:ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。 Pin29: 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。 Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。 二.时钟电路 MCS-51片内有一个高增益反相放大器,其输入端(XTAL1)和输出端(XTAL2)用于外接石英晶体和微调电容,构成振荡器。如图(a)所示。电容C1和C2对频率有微调作用,电容容量的选择范围一般为30PF+-10PF。震荡频率的选择的范围为1.212MHZ三复位,上电复位8051的复位方式可以是自动复位,也可以是手动复位。此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源, 以保证单片机内部RAM的数据不丢失。 四DS12887DS12887是美国达拉斯半导体公司最新推出的时钟芯片,采用CMOS技术制成,把时钟芯片所需的晶振和外部锂电池相关电路集于芯片内部,同时它与目前 IBM AT计算机常用的时钟芯片MC146818B和DS1287管脚兼容,可直接替换。采用DS12887芯片设计的时钟电路勿需任何外围电路并具有良好的微机接口。DS12887芯片具有微轼耗、外围接口简单、精度高、工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟场合中。其主要功能如下:1性能特点 (1)内含一个锂电池,断电情况运行十年以上不丢失数据。 (2)计秒、分、时、天、星期、日、月、年,并有闰年补偿功能。 (3)二进制数码或BCD码表示时间、日历和定闹。 (4)12小时或24小时制,12小时时钟模式带有PWM和AM指导,有夏令时功能。 (5)MOTOROLA5和INATAEL总线时序选择。 (6)有128个RAM单元与软件音响器,其中14个作为字节时钟和控制寄存器,114字节为通用RAM,所有ARAM单元数据都具有掉电保护功能。 (7)可编程方波信号输出。 (8)中断信号输出(IRQ)和总线兼容,定闹中断、周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试。2.引脚说明DS12887内部原理如图1所示,由振荡电路、分频电路、周期中断/方波选择电路、14字节时钟和控制单元、114字节用户非易失RAM、十进制/二进制计加器、总线接口电路、电源开关写保护单元和内部锂电池等部分组成。图2显示了DS12887管脚排列图。下面分别说明管脚功能:Vcc:直流电源+5V电压。当5V电压在正常范围内时,数据可读写;当VCC低于4.25V,读写被禁止,计时功能仍继续;当VCC下降到3V以下时,RAM和计时器被切换到内部锂电池。 MOT(模式选择):MOT管脚接到VCC时,选择MOTOROLA时序,当接到GFND时,选择INTEL时序。 SQW(方波信号同):SQW管脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。 AD0AD7(双向地址/数据复用线):总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。 AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。 DS(数据选通或读输入):DS/RD客脚有两种操作模式,取决于MOT管脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总的时刻,在写周期,DS的后沿使DS12887锁存写数据。选择INTEL时序时,DS称作(RD),RD与典型存贮器的允许信号(OE)的定义相同。 R/W(读/写输入):R/W管脚也有两种操作模式。选MOTOROLA时序时,R/W是一电平信号,指示当前周期是读或写周期,DSO为高电平时,R/W高电平指示读周期,R/W低电平指示写周期;选INTEL时序,R/W信号是一低电平信号,称为WR。在此模式下,R/W管脚与通用RAM的写允许信号(WE)的含义相同。 CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。 IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。 RESET(复位输出):当该脚保持低电平时间大于200ms,保证DS12887有效复位。注意RESET复位时将有:(1) 周期中断允许位PIE被清零。(2) 闹钟中断允许AIE被清零。(3) 更新结束中断允许UIE被清零。(4) 中断请求状态标志位IRQF被清零。(5) 周期中断状态标志位PF被清零。(6) 闹钟中断状态标志位AF被清零。(7) 更新结束中断标志位UF被清零。(8) IRQ中断请求引脚为高阻状态。(9) 方波输出允许位SQWE被清零。(10) 若AS为低电平,备用线Standby允许输入。3.DS12887内部结构 DS12887的地下分配图如图所示,由114字节的用户RAM,10字节的存放实时时钟时间。日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节可直接读写。下图为DS12887的地址 映象图,它共有128个字节单元,其中,10字节单元为存放时间、闹钟值和日历的RAM,4个字节单元为寄存器A、B、C和D,114个字节单元为通用的用户RAM。 时间和日历信息通过读相应的内存字节来获取,时间、日历和定闹通过写相应的内存字节设置或初始化,其字节内容可以是十进制或BCD形式。时间可选择12小时制或24小时制,当选择12小时制时,小时字节搞位为逻辑“1”代表PM。时间、日历和定闹字节是双缓冲的,总是可访问的。每秒钟这10个字节走时1 秒,检查一次定闹条件,如在更新时,读时间和日历可能引起错误。三个字节的定闹字节有两种使用方法。第一种,当定闹时间写入相应时、分、秒定闹单元,在定允许闹位置高的条件下,定闹中断每天准时起动一次。第二种,在三个定闹字节中插入一个或多个不关心码。不关心码是任意从C到FF的16进制数。当小时字节的不关心码位置位时,定闹为小时发生一次由于相线小时和分钟定闹字节置不关心位时,每分钟定闹一次;当三个字节都置不关心位时,每秒中断一次。b.通用用户RAM地址单元功能十进质范围范围二进制码BCD码00H秒059003B05901H秒闹钟059003B05902H分059003B05903H分闹钟059003B05904H时(12小时方式)时(24小时方式)112010C AM, 818C PM0112 AM, 8192 PM0230017002305H时闹钟(12小时方式)时闹钟(24小时方式)112010C AM, 818C PM0112 AM, 8192 PM0230017002306H星期星期天=1170107010707H日131011F013108H月112010C011209H年099006300994.寄存器 4.1 寄存器A BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0 UIP:更新周期正在进行位。当UIP为1,更新转换将很快发生,当UIP为0,更新转换至少在244s内不会发生。 DV0,DV1,DV2:用于开关晶振和复位分频链。这些位的010唯一组合将打开晶振并允许RTC计时。 表1列了邮周期中断率和方波频率。 RS3,RS2,RS1,RS0:频率选择位,从15级频率器13个抽头中选一个,或禁止分频器输入,选择好的抽头用于产生方波(SQW管脚)输出和周期中断,用户可以: (1)用PIE位允许中断: (2)用SQWE位允许SQAW输出; (3)二者同时允许并用相同的频率; (4)都不允许4.2 寄存器B BIT7 BIT6 BIT5 BIT4 BIOT3 BIT2 BIT2 BIT1 SET PIE ALE0 VIE SQWE DM 24/12 DSE SET:SET为0,时间更新正常进行,每秒计数走时一次,当SET位写入1,时间更新被禁止,程序可初始化时间和日历字节。 PIE:周期中断劲旅位,PIE为1,则允许以选定的频率拉低IRQ管脚,产和不足齿数民:PIE为0,则禁止中断。 AIE:定闹中断允许位,PIE为1,允许中断,否则禁止中断。 SQWE:方波允许位,置1选定频率方波从SQW脚输出;为0-时,SQW脚为低。 DM:数据模式位,DM为1青蛙为十进制数据,而0表明是BCD码的数据。 24/12:小时格式位,1表明24小时械,而0表明12小时械。 DSE:P夏令时允许位,当DSE置1时允许两个特殊的更新,在四月份的第一时期日、时间从1:59:59AM时改变为1:00:00AM,当DSE位为0,这种特殊修正不发生。4.3 寄存器C BIT7 BIY6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 IRQF PF AF VF 0 0 0 0 IRQF:中断申请标志位。当下列表达式中一个或多个为真时,置1。 PF=PIE=1;AF=AIE=1; UF=UIE=1; 即:IRQF=PFPIE+AFAIE+UFUIE 只要IRQF为1,IRQ管脚输出低 ,程序读寄存器C以后或RESET管脚为低后,所有标志位清零。 AF:定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。 VF:更新周期结束标志位。VF为1表明更新周期结束。 BIAT0BIT3:未用状态位,读出总为0,不能写入。4.4 寄存器D BIT7 BIT6 BIT5 BIT4 BIOT3 BIT2 BIT1 BIT0 VRT 0 0 0 0 0 0 0 VRT:内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗 尽。 BIT0BIT6:未用状态位,读出总为0,不能写入。5非易失RAM 在DS12887中,114字节通用非易失RAM不专用于任何特殊功能,它们可被处理器程序用作非易失内存,。在更新周期也可访问。6中断 RTC实时时钟加RAM向处理器提供三个独立的、自动的中断源。定闹中断的发生率可编程,从每秒一次到每天一次,周期性中断的发生率可从500ms到 122s选择。更新结束中断用于向程序指示一个更新周期完成。中断控制和状态位在寄存器B和C中,本文的其它部分将详细描述每个中断发生条件。7 晶振控制位 DS12887出厂时,其内部晶振被关掉,以防止锂电池在芯片装入系统前被消耗。寄存器A的BIT4BIT6为010时打开晶振,分频链复位,BIT4BIT6的其它组合都是使晶振关闭。8 方波输出选择 15级分步抽着中的13个可用于15选1选择器,选择分频器抽头的目的是在SQW管脚产生一个方波信号,其频率由寄存器A的 RS0RS3位设置。SQW频率选择与周期中断发生器共离15选1选择器,一旦频率选择好,通过用程序控制方波输出允许位SWQE来控制SQW管脚输出的开关。9 周期中断选择 周期中断可在IRQ脚产生500ms一次到每122s一次的中断,中断频率同样由寄存A确定,它的控制位为寄存器B中的PIE位。10更新周期 DS12887每秒执行一次更新周期还比较每一定闹字节与相应的时间字节,如果匹配枵三个字节都是不关心码,则产生一次定闹中断11.8051与DS12887连接图五、8155芯片8155用于并行扩展单片机的I/O口,有p0的8个位变为22个口(PA、PB、PC)单片机要访问一个芯片就必须要通过地址信号。地址信号一般包括了片选信号和功能信号,但一个芯片如果内部还有寄存器存储单元(这些单元本身是有地址的即孤立 的地址选择信号),因此单片机要访问一个芯片提供的地址信号首先要满足能够找到具有特定功能的芯片,然后又要能在该芯片内找到想要访问的单元。因此,对于单片机外部的设备,单片机要想对其读/写就必须要定义该外部设备的地址,这个地址就包括了外部地址和内部地址的组合称为一个单片机可以控制访问的单元地址。即使芯片称为单片机系统中的一部分了。而对于芯片本身而言的,内部寄存器地址是不变的,如8155中命令寄存器地址为*000B。而如何形成单片机可以访问的地址呢?首先要明白单片机的地址线构成方式,对于51单片机,一般是P0口为8位地址,如果需要十六位,则p2口则提供高8位地址。访问外部芯片就需要由单片机提供能够访问到芯片内部的一个完整地址。记住的是访问内部所需的地址信号是从固定位置输入的,因此具体芯片的地址是多少是由硬件连线决定的。关键是看单片机是以什么方式提供的信号,是只8位还是16位,是仅有p1口还是P1P2口分别提供地址信号的。 通常P1口提供内部选择信号,P2提供外部选择信号,两者结合形成该芯片的地址了。其余信号按情况可以定位1或者0。芯片引脚功能说明如下:RESET(脚4)复位输入信号。AD0AD7(脚1219)三态地址/数据复用线。CE(脚8)片选信号。RD(脚9)读选通信号线,低电平有效。WR(脚10)写选通信号线,低电平有效。IO/M(脚7)RAM/IO选择线。当IO/M=0,CE=0时,单片机选择8155的RAM读写,AD0AD7上地址为8155的RAM单元地址。当IO/M=1,CE=0时,单片机选择8155的I/O读写,AD0AD7上地址为8155的地址。ALE(脚11)地址锁存信号线。8155片内有地址锁存器,ALE信号的下降沿将AD0AD7上的地址信息以及CE,IO/M的状态锁存在8155内部寄存器。PA0PA7(脚2128)端口AI/O线。PB0PB7(脚2936)端口BI/O线。PC0PC8(脚3739,1,2,5)端口CI/O线。TIMER IN(脚3)定时/计数器的输入端。TIMER OUT(脚6)定时/计数器的输出端。28155与8051相接 8155可直接和8051单片机接口,不需任何外加逻辑电路,对系统增加256个字节的RAM,22根I/O线和一个4位的定时计数器。8155与8051的接口逻辑如图所示。该系统中用8155的I/O作为键盘显示器接口。用一片2K字节的EPROM2716作为程序存储器。图中8051扩展了一片8155,PA作为扫描口,PB作为显示器的数据口,8155的I/O地址为FD00HFD05H,选用6位共阴极显示器。六、LED显示器单片机应用系统中主要使用发光二极管显示器,简称LED(Light Emitting Diode)。1.LED显示器的结构及分类基本的半导体数码管是由七个条壮发光二极管芯片排列而成的。可实现09的显示。起具体结构有“反射罩式”、“条形七段式”及“单片集成式多位数字式”等。LED显示器中的发光二极管共有两种连接方法:(1) 共阳极接法所谓共阳方式是指各段发光管的阳极(即P区)是公共的,而阴极互相隔离。(2) 共阴极接法所谓共阴方式是指各段发光管的阴极(即N区)是公共的,而阴极互相隔的。使用LED相识器时要注意区分这两种不同的接法。为了显示数字或符号要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。 七段发光二极管,再加上一个小数点位,共计8段。因此提供给LED显示器的字形代码正好一个字节。2. 8155做LED显示器接口实际使用的LED显示器都是多位的.对多位LED显示器,通常都是采用动态扫描的方法进行显示,即逐个地、循环地点亮各位显示器.这样虽然在任一时刻只有一位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样.为了实现LED显示器的动态扫描,除了要给显示器提供段的输入之外,还要对显示器加位的控制,这就是通常所说的段控和位控.因此多位LED显示器接口断路需要有两个输出口,起重一个用于输出8条段控线;另一个用于输出位控线,位控线的数目等于显示器的位数. 下图是使用8155做6位LED显示器的接口电路. 其中C口为输出口,以输出位控线.由于位控线的驱动电流较大,8段全亮时约4060Ma,因此PC口输出加74LS06进行反相和提高驱动能力,然后再接各LED显示器的位控端 A口也为输出口,以输出8位字形代码.为提高显示亮度,通常加74LS244进行段控输出驱动.26八DS12887地址确定因为片选CS接8051的P2.7位,所以P2.7=0表示选中。8155的片选CE接8051的P2.1位,所以P2.1=1不选中8155。因为8155与DS12887两芯片不能同时选中,只能选中一个芯片。同时8155的IO/M口与8051的P2.0位相接,所以IO/M=P2.0=1。P2.6P2.1位随意,0或1均可P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00 1 1 1 1 1 1 1P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.00 0 0 0 0 0 0 0所以DS12887的秒地址为7F00HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00 1 1 1 1 1 1 1P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.00 0 0 0 0 0 1 0所以DS12887的分地址为7F02HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00 1 1 1 1 1 1 1P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.00 0 0 0 0 1 0 0所以DS12887的时地址为7F04H九8155地址确定及控制字确定18155地址确定对于8155来说PA口输出,PC口输出。8155的片选CE接8051的P2.1位,所以P2.1=0表示选中8155。DS12887的片选CS接8051的P2.7位,所以P2.7=1表示不能选中DS12887,因为155与DS12887两芯片不能同时选中,只能选中一个芯片。当IO/M=1时,选中8155片内3个I/O断口(A,B,C),又因为IO/M接8051的P2.0位,所以P2.0=1P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.01 1 1 1 1 1 0 1P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.00 0 0 0 0 1 0 0AD0AD7为I/O口地址AD7AD6AD5AD4AD3AD2AD1AD0X X X X X 0 0 101HA口 通用A口XXXXX0 1 103HC口 通用C口或控制口所以:A口地址为01H B口地址为03H所以8155的控制口地址:FD00H2.控制字确定8155在操作前,必须由CPU向命令寄存器送命令字,设定其工作方式。命令寄存器只能写入不能读出,由8位锁存器组成。TM2,TM1=00表示定时器命令无操作IEB,IEA为00表示禁止控制A,B口中断PC2,PC1=01表示C口01=ALT2。ALT2表示C口工作于基本输出方式PB为B口输入输出,随意1或0均可PA=1表示A口为输出状态TM2TM1IEBIEAPC2PC1PBPA0 0 0 0 0 1 0 0所以8155的命令字只为07H。8155只要看到07H的话就知道PA,PC输出如何命令8155进行上述操作:MOV DPTR #FD00HMOV A #07HMOVX DPTR A十电子时钟程序OUTBIT EQU 0E101H ;位控制口CLK164 EQU 0E102H ;段控制口(接164时钟位)DAT164 EQU 0E102H ;段控制口(接164数据位)IN EQU 0E103H ;键盘读入口LEDBUF EQU 60H ;显示缓冲 1JMP STARTLEDMAP: ;八段管显示码 DB 3FH, 06FH, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H,5EH,79H, 71H DB 00HDELAY: ;延时子程序 MOV R7 #00DELAYLOOP: DJNZ R7 DELAYLOOP DJNZ R6 DELAY RETDISPLAYLED: MOV R0 #LEDBUF MOV R1 #6 ;共6个八段管 MOV R2 #00000001B ;从左边开始显示LOOP: MOV DPTR, #OUTBIT MOV A, #0 MOVX DPTR, A ;关所有八段管 MOV A, R0 MOV B, #8 ;送164 DLP: RLC A MOV R3, A MOV ACC. 0, C MOV DPTR, #DAT164 ANL A, #0FDH MOVX DPTR, A MOV DPTR, #CLK164 ORL A #02HMOVX DPTR, A ANL A #0FDHMOVX DPTR, AMOV A R3DJNZ B DLPMOV DPTR, #OUTBITMOV A R2MOVX DPTR, A ;显示一位八段管 MOV R6, #1CALL DELAYMOV A, R2 ;显示下一位RL AMOV R2, AINC R0DJNZ R1, LOOPRETTESTKEY:MOV DPTR, #OUTBITMOV A #0MOVX DPTR, A ;输出线置为0MOV DPTR, #INMOVX A, DPTR ;读入键状态CPL AANL A, #0FH ;高四位不用RETKEYTABLE: ;数字键码定义 DB 00H, 01H, 04H, 07HDB 0FH, 02H, 05H, 08HDB 0EH, 03H, 06H, 09HDB 0DH, 0CH, 0BH, 0AHDB 10H, 11H, 12H, 13H, 14HDB 15H, 16H, 10H, 10H, 10HGETKEY:MOV DPTR, #OUTBITMOV P2, DPHMOV R0, #LOW(IN)MOV R1, #00100000BMOV R2, #6KLOOP:MOV A, R1 ;找出键所在列CPL AMOVX DPTR ACPL ARR AMOV R1, A ;下一列 MOVX A R0CPL AANL A, #0FHJNZ GOON1 ;该列有键入DJNZ R2, KLOOPMOV R2, #0FFH ;没有键按下,返回HOFFHSJMP EXITGOONL:MOV R1, A ;键值=列4+行MOV A, R2 DEC ARL ARL AMOV R2, A ;R2=(R21)4MOV A, R1 ;R1中为读入的行值MOV R1, #4LOOPC:RRC A ;移位找出所在行JC EXITINC R2 ;R2=R2+行值DJNZ R1, LOOPCEXIT:MOV A, R2 ;取出键码MOV DPTR, #KEYTABLEMOVC A, A+DPTRMOV R2, AWAITRELEASE:MOV DPTR, #OUTBIT ;等键释放CLR AMOVX DPTR, AMOV R6, #10CALL DELAYCALL TESTKEYJNZ WAITRELEASEMOV A, R2RETSTART: MOV R6, #02H CALL DELAYMOV 20H, #00HMOV 21H, #00HMOV 22H, #00HMOV SP, #40HMOV DPTR, #0E100HMOV A, #03HMOVX DPTR, ASTART1:MOV DPTR, #0FE0AHMOVX A, DPTRANL A, #70HCJNE A, #20H, START2; ;判断晶振打开否?SJMP START3START2:MOV DPTR,#0FE0BH ;设置SET=0,芯片正常工作。24/12=1,选24小时制。MOV A, #82HMOVX DPTR, AMOV R0, #06HMOV DPTR, #0FE00H ;十分秒清零MOV A, #00HRETUN0:MOVX DPTR AINC DPTRDJNZ R0, RETUN0MOV DPTR, #0FE0AHMOV A, #27HMOVX DPTR, A ;打开晶振,SQW输出512HZ方波INC DPTRMOV A, #5AHMOVX DPTR, ASTART3:MOV DPTR, #0FE0AHMOVX A, DPTRJNB ACC. 7, LOOP12MOV R5, #4DHDJNZ R5, $LOOP12:MOV DPTR, #0FE0BHMOV A, #5AHMOVX DPTR, ALOOP13:MOV DPTR, #0FE00H ;读秒,分,时MOV R1, #60HMOV R0, #03HLOOP11:MOVX A, DPTRLCALL PTREG ;读取的值,进行拆字后送显示缓冲器60H65HINC DPTRINC DPTRDJNZ R0, LOOP11MOV DPTR, #0FE0BHCALL DISPLAYLED ;调用显示子程序CALL TESTKEY ;有键入?JZ LOOP12 ;无键入,继续显示CALL GETKEY ;有键入,读入键码CJNE A, #14H, KEEP0SJMP KEEP1 ;是NEXT键,调整秒位KEEP0:CJNE A, #15H, KEEP2SJMP KEEP3 ;是LAST键,调整分位KEEP2:CJNE A, #16H, KEEP1SJMP KEEP5 ;是MON键,调整时位KEEP1:MOV DPTR, #0FE0BHMOV A, #0DAHMOVX DPTR, AMOV A, 20HLCALL HBCDCJNE A,#60H, LOOP20 ;秒位不能超过60秒MOV 20H, #00HSJMP LOOP13LOOP20: MOV DPTR, #0FE00H MOVX DPTR, A INC 20HSJMP LOOP13KEEP3: MOV DPTR, #0FE0BH MOV A, #0DAH MOVX DPTR, A MOV A, 21H LCALL HBCD CJNP A, #60H, LOOP21 ;分位不能超过60分 MOV 21H, #00H SJMP LOOP13LOOP21: MOV DPTR, #0FE0BHMOVX DPTR, AINC 21HSJMP LOOP13KEEP5: MOV DPTR,#0FE0BHMOV A, #0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论