计时数字时钟_第1页
计时数字时钟_第2页
计时数字时钟_第3页
计时数字时钟_第4页
计时数字时钟_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理课程设计- 24 -合肥学院计算机科学与技术系课程设计报告20082009 学年第一学期课程微型计算机原理与接口技术课程设计名称计时数字时钟学生姓名周杰学号0604032033专业班级06网络工程(2)指导教师肖连军老师2009 年 2月计 时 时 钟一、题义分析及解决方案1题义与需求分析需要一个八位LED数码管显示器用于显示时间(分,秒);显示的初值在启动实验箱运行程序后输入;按任意键后时间开始走动,每隔一秒改变一次显示值(每60秒为一分钟,60分一小时);能同时显示分秒共四位;秒钟为60时,能自动复位到零,并使分钟加一;分钟为60时,能自动复位到零。LED数码管显示器循环显示分秒的

2、动态值。现显示过程中,按A键可重新置初值;按B键暂停时间,再按一次从当前时间开始计时;E、F键分别清除分钟、秒钟对应两位。最后,还有一个问题就是如何控制计时信息能够准确无误的显示出来,需要解决的就是选择什么样的外设,即通过什么样的外设来显示时间?以上这些问题都是我们设计计时时钟需要解决的,现列举如下:分、秒时钟怎样形成;计时控制;输出显示接口;外设。2解决问题的方法及思路1)硬件部分单片机工作在单任务状态,时间充裕,速度不是主要矛盾,所以用软件实现分、秒时钟的形成和计时控制,以减少硬件开销。 接口用硬件实现。根据实验平台的具体情况,本课程设计选用了8279A芯片、LED发光二极管、十六进制小键

3、盘。由于8279A的输出电流与LED不匹配的问题,需要驱动电流,本实验中选择74LS240。2)软件部分计时器的初始时间设置:启动单片机并成功运行程序后在十六进制开关中输入初值。错误输入时显示ERROR信息。计时:首先将秒位计时加1,判断秒位是否为60,若不是,则直接显示时间;若是,则将秒位置为00,且分位加1;分位同上。显示:8279A芯片内部有一个显示RAM和一个FIFO RAM,可以暂存从小键盘中读出的数据,同时可以将内存中的数据暂存到显示RAM中,简化了程序复杂度。每次将各个位要显示的数据处理好后到换码表中找到对应值,初始化8279后将值送到数据口即实现显示的目的。1秒时间的设定:1秒

4、的等待时间由循环程序执行的时间来决定,经多次实验后来估计循环程序执行的次数。3)功能扩展考虑到实际情况,本实验除了完成任务书要求的分秒功能外,还增加了天和小时的功能。二、硬件设计1 8279A1)8279A在本设计中的作用 在本设计中用8279A芯片控制键盘输入和LED显示。2) 8279A的功能分析a)8279A主要特性8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。可与任何8位机接口。8279A芯片包括键盘输入和显示输出两个部分。若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器

5、输出的。8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点当今已成为设计计算机应用系统,特别是实时性较高的测控系统的首选器件之一。b)8279A的内部结构图2-1 8279A的内部结构图中,IRQ:中断请求输出线,DB0DB7:双向数据总路线(传送命令、数据、状态),、:读写控制输入端,RESET:复位输入端,CLK:时钟输入端,:片选,C和/D(A0):片内寄存器选址,OUTA0A1、OUTB0B3:8位显示输出端,:熄灭显示输出端,SL0SL3:公用扫描输出线,RL0RL7:键盘回馈输入线,SHIF

6、T:抵挡键输入线,CNTL/STB:控制/选通输入线。另外,8279的键盘接口部分内部有一个8×8位先进先出的堆栈(FIFO),用来存放键盘输入代码,显示器接口部分内部有一个16×8位显示RAM,用来显示段数据,能为16位LED显示器(或其它显示器)提供多路扫描接口。c)8279A的引脚信号和功能8279可编程键盘显示器接口芯片具有动态显示驱动电路,不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点。 8279 是可编程的键盘/显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279内部有键盘 FIFO (

7、先进先出堆栈)/传感器,双重功能的 8×8=64B RAM,键盘控制部分可控制 8×8=64 个按键或 8×8 阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示 RAM容量为 16×8,即显示器最大配置可达 16 位 LED数码显示。d)8279的命令字及其格式 8279有三种工作方式:键盘工作方式、显示工作方式和传感器工作方式。键盘工作方式:双键互锁和N键轮回。双键互锁是指当有两个以上按键同时按下时,只能识别最后一个被释放的按键,并把其键值送入内部FIFO RAM中。N键轮回是指当有多个按键同时按下时,所有按键的键值均可按扫描顺序依次存入

8、FIFO RAM中。显示工作方式:是指CPU输入至8279内部FIFO RAM的数据的输出格式,有8个字符左端入口显示、16个字符左端入口显示、8个字符右端入口显示、16个字符右端入口显示四种方式。传感器方式:是指扫描传感器阵列时,一旦发现传感器的状态发生变化就置位INT向CPU申请中断。选择不同的工作方式均是通过CPU对8279送入命令来进行控制。8279共有8种命令,命令寄存器为8位,其中D7D5为命令特征位,D4D0为命令的控制位。CPU对8279写入的命令数据为命令字,读出的数据为状态字。8279共有八条命令,其功能及命令字格式分述如下。(1)键盘/显示方式设置命令字命令格式: D7

9、D6 D5 D4 D3 D2 D1 D0 0 0 0 D D K K K其中:D7、D6、D5=000为方式设置命令特征位。DD(D4、D3):用来设定显示方式,如表2-2所示。D4D3显示方式008个字符显示,左端入口0116个字符显示,左端入口108个字符显示,右端入口1016个字符显示,右入口表2-2 显示方式选择所谓左入口 ,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,则是显示位置从最右一位(最低位)开始,以后逐次输入显示字符时,已有的显示字符依次向左移动。KKK(D2、D1、D0):用来设定七种键盘/显示扫描方式,如表2-3所示。D2D1D

10、0键盘/显示扫描方式000编码扫描键盘,双键锁定001译码扫描键盘,双键锁定010编码扫描键盘,N键轮回011译码扫描键盘,N键轮回100编码扫描传感器矩阵101译码扫描传感器矩阵110选通输入,编码显示扫描111选通输入,译码显示扫描表2-3 键盘/显示扫描方式(2)时钟编程命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 P P P P P其中:D7、D6、D5=001为时钟命令特征位。PPPPP(D4、D3、D2、D1、D0)用来设定外部输入CLK时钟脉冲的分频系数N。N取值范围为231。如CLK输入时钟频率为2MHZ,PPPPP应被置为10100(N=20),

11、才可获得8279内部要求的100KHZ的时钟频率。(3)读FIFO/传感器RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 1 0 AI X A A A其中:D7、D6、D5=010为读FIFO/传感器RAM命令特征位。该命令字只在传感器方式时使用。在CPU读传感器RAM之前,必须用这条命令来设定所读传感器RAM中的地址。AAA(D2、D1、D0)为传感器RAM中的八个字节地址。AI(D4)为自动增量特征位。当AI=1时,每次读出传感器RAM后地址自动加1使地址指向下一个存储单元。这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。在键盘工作

12、方式中,由于读出操作严格按照先入先出顺序,因此,不需使用这条命令。(4)读显示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 0 1 1 AI A A A A其中:D7、D6、D5=011为读显示RAM命令字的特征位。该命令字用来设定将要读出的显示RAM地址。AAAA(D3、D2、D1、D0)用来寻址显示RAM中的存储单元。由于位显示RAM中有16个字节单元,故需要4位寻址。AI(D4)为自动增量特征位。AI=1时,每次读出后地址自动加1,指向下一地址。(5)写显示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 AI A A A A其中:

13、D7、D6、D5=100为写显示RAM命令字的特征位。在写显示RAM之前用这个命令字来设定将要写入的显示RAM地址。AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。AI(D4)为自动增量特征位。AI=1时,每次写入后地址自动加1,指向下一次写入地址。(6)显示禁止写入/消隐命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 X IW/A IW/B BL/A BL/B其中:D7、D6、D5=101为显示禁止写入/消隐命令特征位。IW/A、IW/ B(D3、D2)为A、B组显示RAM写入屏蔽位。当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。因

14、此,从CPU写入显示器RAM数据时,不会影响A的显示。这种情况通常在采用双4位显示器时使用。因为两个四位显示器是相互独立的。为了给其中一个四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。BL/A、BL/ B(D1、D0)为消隐设置位。用于对两组显示输出消隐。若BL=1,对应组的显示输出被消隐。当BL=0,则恢复显示。(7)清除命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 1 0 CD CD CD CF CA 其中:D7、D6、D5=110为清除命令特征位。清除显示RAM方式如表2-4所示。D4D3D2清除方式10×将全部显示RAM清

15、为00H110将全部显示RAM置为20H,A组输出0010,B组输出0000111将全部显示RAM置为FFH0××D0=0不清除,D0=1按上述方法清除表2-4 显示RAM清除方式CF(D1)用来置空FIFO存储器,当CF=1时,执行清除命令后,FIFO RAM被置空,使INT输出线复位。同时,传感器RAM的读出地址也被置为0。CA (D0)为总清的特征位。它兼有CD和CF的联合效能。在CF =1时,对显示的清除方式由D3、D2的编码决定。显示RAM清除时间约需160us。在此期间状态字的最高位Du=1,表示显示无效。CPU不能向显示RAM写入数据。(8)结束中断/错误方式

16、设置命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 E X X X X其中:D7、D6、D5=111为该命令的特征位。此命令有两种不同的作用。作为结束中断命令。在传感器工作方式中使用。每当传感器状态出现变化时,扫描检测电路就将其状态写入传感器RAM,并启动中断逻辑,使INT变高,向CPU 请求中断,并且禁止写入传感器RAM。此时,若传感器RAM 读出地址的自动递增特性没有置位(AI=0),则中断请求INT在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM 的读出并不能清除INT,而必须通过给8279写入结束中断/

17、错误方式设置命令才能使INT变低。因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。作为特定错误方式设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。这种方式的特点是:在8279的消抖周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和禁止写入FIFO RAM。上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。因此,写入命令字时唯一的要求是使数据选择信号A0 =1。e)

18、8279的状态字及其格式 8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFO RAM中的字符数和有无错误发生。其格式为: D7 D6 D5 D4 D3 D2 D1 D0 DU S/E O U F N N N其中:Du(D7)为显示无效特征位。当 Du=1表示显示无效。当显示RAM由于清除显示或全清命令尚未完成时,Du=1,此时不能对显示RAM写入。S/E(D6)为传感器信号结束/错误特征位。该特征位在读出FIFO 状态字时被读出。而在执行CF =1的清除命令时被复位。当8279工作在传感器工作方式时,若S/E=1,表示传感器的最后一个传感器信号已进入传感器RAM;而当8279

19、工作在特殊错误方式时,若S/E=1则表示出现了多键同时按下错误。O、U(D5、D4)为超出、不足错误特征位。对FIFO RAM 的操作可能出现两种错误:超出或不足。当FIFO RAM 已经充满时,其它的键盘数据还企图写入FIFO RAM ,则出现超出错误,超出错误特征位O(D5)置1;当FIFO RAM已经置空时,CPU还企图读出,则出现不足错误,不足错误特征位U(D4)置1。F(D3)表示FIFO RAM中是否已满标志,若F=1表示已满。NNN(D2、D1、D0)表示FIFO RAM中的字符数据个数。f)数据输入/输出格式对8279输入/输出数据不仅要先确定数据地址口,而且数据存放也要按一定

20、格式,其格式在键盘和传感器方式有所不同。(1) 键盘扫描方式数据输入格式键盘的行号、列号及控制键格式如下:图2-2 键盘的行号、列号及控制键格式控制键CNTL、SHIFT为单独的开关键。CNTL与其它键连用作特殊命令键,SHIFT可作上、下挡控制键。(2)传感器方式数据输入格式此种方式8位输入数据为RL0RL7的状态。格式如下: D7 D6 D5 D4 D3 D2 D1 D0RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL02.74LS138译码器1) 74LS138译码器在本设计中的作用 扫描计数器采用编码工作方式2) 74LS138译码器的功能分析74LS138是3/8译码器,

21、即对3个输入信号进行译码。得到8个输出状态。G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。G1高电平有效。A,B,C为译码信号输出端,Y0Y7为译码输出端,低电平有效。 图2-3 74LS138 图2-4 功能表 3) 74LS138译码器的技术参数 极限值 电源电压-7V 输入电压 74LS138-7V 工作环境温度 74LS138-070 贮存温度- 65150 3. 74LS2401) 74LS240译码器在本设计中的作用本设计实验中主要是为增加LED的驱动电流2) 74LS240译码器的功能分析74LS240 TTL 八反相三态缓冲器/线驱动器引出端符号: 1A,2

22、A 输入端 , 三态允许端(低电平有效) 1Y8Y 输出端 图2-5 74LS240逻辑图 输入输出AYLLHLHXHLZ表2-5 74LS240功能表3) 74LS240译码器的技术参数 极限值: 电源电压 . 7V 输入电压 . 5.5V 输出高阻态时高电平电压 . 5.5V 工作环境温度 74LS240 . 070 存储温度 . -65150 4. 小键盘1) 小键盘在本设计中的作用本设计中,小键盘用于输入二进制数字。2) 小键盘的功能分析通常使用的键盘是矩阵结构的。对于4×4=16个键的键盘,采用矩阵方式只要用8条引线和2个8位端口便完成键盘的连接。如图,这个矩阵分为4行4列

23、,如果键5按下,则第1行和第1列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第1列线也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。 图2-5 4×4键盘矩阵图行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,

24、当发现某一行有键闭合时,也就是列线输入中有一位为0时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线为低,然后检查列线。这时如果列线有一位为0,则说明必有键被按下, 采用扫描法可进一步确定按键的具体位置。5.七段LED显示器1) LED作用LED发光二级管(Light-Emitting Diode),在本设计中采用7段数字发光二级管,做为终端显示。显示时间的分秒。2)LED功能分析物理构造:LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。 图2

25、-6 LED结构图数字成像:将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。字型A B C Da b c d e f g bpOX00 0 0 01 1 1 1 1 1 0 03f10 0 0 10 1 1 0 0 0 0 00620 0 1 01 1 0 1 1 0 1 05b30 0 1 11 1 1 1 0 0 1 04f40 1 0 00 1 1 0 0 1 1 0 6650 1 0 11 0 1 1 0 1 1 0 6d60 1 1 00 0 1 1 1 1 1 07d70 1 1 11 1 1 0 0 0 0 00781 0 0 01 1

26、1 1 1 1 1 07f91 0 0 11 1 1 0 0 1 1 06fA1 0 1 01 1 1 0 1 1 1 077B1 0 1 10 0 1 1 1 1 1 0 7cC1 1 0 01 0 0 1 1 1 0 039D1 1 0 10 1 1 1 1 0 1 05eE1 1 1 01 0 0 1 1 1 1 079F1 1 1 11 0 0 0 1 1 1 071表2-6 LED数码表3) LED技术参数表2-7 LED技术参数表6. 硬件总逻辑图及其说明 图2-7 硬件接线图图中8279的地址由和A0决定,故数据口地址为7FFEH,命令口地址为7FFFH。所接的16个按键,扫描线

27、接在74HC138的译码输出端和上,当为0(SL2SL1SL0=000)时,扫描第1列按键,当为0(SL2SL1SL0=001)扫描第2列按键,故07号按键的键值为00H07H,815号按键键值为08H0FH。当某一按键被按下后,键值就自动进入缓冲区,当8279内部RAM不空时由INT输出高电平告知CPU取走,故INT连接CPU的中断输入需加一反向器。8279键盘配置最大为8×8,若要配置64个按键,其它列扫描线可分别连至至上,形成8行8列的按键扫描电路。图中显示部分段选码由8279的OUTA3OUTA0、OUTB3OUTB0通过驱动器74LS240提供,位选码由SL2SL0 经3-

28、8译码器通过驱动器74LS240提供。三、控制程序设计1. 控制程序设计思路1)主程序部分本程序主要实现的功能包括时间初值设置,输入错误则会提示ERROR,并按任意键重新输入。正确输入完按任意键开始计时。A、B、C、D、E、F键为功能键,用于时间重置,时间暂停及清除时分秒各位。程序开始条件查询是否有按键,当按键按下,8279状态字低三位为此时按键按下次数,由此判断是否从8279数据端口读入数据,当有按键按下时,从8279读数据到内存中,同时COUNT变量加一,当COUNT增加到9时,停止检查是否有按键按下。CALL SCAN_KEY ;键扫描JNC START2;没有按键XCHG AL,KEY

29、COUNTINC ALCMP AL,9JZ START4XCHG AL,KEYCOUNTCALL KEY_NUM ;键值转换为键号STOSB数据存入内存的HOUR,MIN,SED共八个字节单元中,每个单元对应一个数据,首先判断输入的天、时、分、秒是否在合理的范围内,如果不在,显示出错信息,并跳回到程序初始化部分,等待重新输入。如果输入正确,则开始计时,每次显示前将数据从内存读到不同的寄存器中,如将秒钟两位读到AX中,比较AL是否到10,没有则跳出判断,直接从内存中读出时间显示;若到10了,则将秒钟个位清零,并对AH加一后再写回到内存中。如此类推,判断分钟时钟各个位。应注意的是,在判断时钟个位时

30、,既要比较其是否到4,又要判断是否到十,到十则清零,十位加一;到四则继续判断十位是否到2,若十位到2,清除时钟两位。判断天数时,规定天数的最大值为30,天数个位到十清零,十位加一,天数十位大于2且个位大于0则出错。必须保证天数十位小于3,天数个位小于10.或者天数个位为10,个位为0.此时若天数加一,则天数的个位,十位同时清零。;秒钟进一,比较秒钟个位是否到10MOVAL,SEC1;秒钟SEC0,SEC1单元INCALMOVSEC1,ALCMPAL,10JNZCALL_SHOWMOVSEC1,0;比较秒钟十位是否到6MOVAL,SEC0INCALMOVSEC0,ALCMPAL,6JNZCALL

31、_SHOWMOVSEC0,02)键盘扫描子程序时间显示等待的一秒钟,是通过循环执行扫描子程序来实现的。判断有按键通过读8279状态字的低三位是否全为零。若不全为零,向控制口写读FIFO RAM控制字,从数据口读数据到AL中。AL为0AH,则置CF为1;AL为0BH,则将FLAG_B取反;AL为0CH,则清除天位;AL为0DH,则清除小时位;AL为0EH,则清除分钟位;AL为0FH,则清除秒位。结束后主程序会判断CF位,CF=1,则跳到程序初始化部分,重新开始;判断FLAG_B位,为1则暂停计时,不停扫描按键,直到B键再次按下,重新开始计时。3)显示子程序首先清除上一次显示的结果,清除完毕后将8

32、279位选码复位。将指针指向时间所在单元的首地址,依次取出换码,输出到数据端口,依次输出天、时、分、秒。2.程序流程图程序主要由三四大功能块组成:控制整个过程的主程序,初设时间、修改时间、计时等;显示时间子程序,将内存中的当前时间通过8279显示到LED上;按键扫描子程序,判断当前按键值,并执行相应的计时清零工作。时间加一秒并处理和显示开始板卡的初始化设定初始时间时间设置合法输出错误信息时间初值写入8279CX = 40延时20毫秒有功能键按下CX = 0退出退出CX = CX - 1功能处理模块YYYYNNNN图3-1 主控程序流程图3.控制程序24.MODELTINYPCIBAR3EQU1

33、CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT RAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号.STACK100.DATAIO_Bit8_BaseAddress DW?msg0DB'BIOS不支持访问PCI $'msg1DB'找不到Star PCI9052板卡 $'msg2DB'读8位I/O空间基地址时出错$'DAY DB 2 DUP(?)HOUR DB 2 DUP(?);时,分,秒MIN DB 2 DUP(?);XX:XX:XX

34、SEC DB 2 DUP(?) TEMP DB 8 DUP(?)KEYCOUNTDB?FLAG_BDB0LED_TABDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHERRORDB086H,88H,88H,0C0H,88HCMD_8279 DW 00B1H;8279命令字、状态字地址DATA_8279 DW 00B0H;8279读写数据口的地址.CODESTART: MOVAX,DATAMOVDS,AXNOPCALLInitPCICALLModifyAddress;根据PCI提供的基地址,

35、将偏移地址转化为实地址CALL INIT8279 ;初始化子程序MOV KEYCOUNT,0LEADI,DAYSTART2:CALL SCAN_KEY ;键扫描 JNC START2;没有按键 XCHGAL,KEYCOUNT INCAL CMP AL,9 JZ START4 XCHG AL,KEYCOUNT CALL KEY_NUM ;键值转换为键号STOSB LEA BX,LED_TAB;字型码表 XLAT CALL WRITE_DATA JMP START2 START4:LEA SI,DAYLODSBMOV AH,ALLODSBCMPAX,0301HJGESTART9CMPAL,0AHJ

36、GESTART9CMPAX,0JBESTART9LODSBMOVAH,ALLODSBCMPAX,0204HJGESTART9LODSBMOVAH,ALLODSBCMPAL,0AHJGESTART9MOV CX,2START8:LODSBMOVAH,ALLODSBCMPAX,0600HJGESTART9CMPAL,0AHJGESTART9LOOPSTART8MOVAX,0 JMPSTART5START9:CALLINIT8279_1PUSHCXMOVCX,5LEASI,ERRORSTART10:LODSBCALLWRITE_DATALOOPSTART10POPCXCALLDL2SCALLINIT

37、8279_1MOV KEYCOUNT,0LEADI,DAYJMPSTART2START5:MOVCX,40LOOP_1:CALLDL20MSCALLSCAN_KEY_CHJNCSCAN_NEXTCALLINIT8279_1 ;A键MOVAX,0MOVKEYCOUNT,0LEADI,DAYJMPSTART2SCAN_NEXT:CMPFLAG_B,1JNELOOP_2JMPLOOP_1LOOP_2:LOOPLOOP_1MOVAL,SEC1;比较秒钟个位是否到10INCALMOVSEC1,ALCMPAL,10JNZSKIP_1MOVSEC1,0MOVAL,SEC0;比较秒钟十位是否到6INCALMO

38、VSEC0,ALCMPAL,6JNZSKIPJMPGO_ONSKIP_1:JMPSKIPGO_ON:MOVSEC0,0MOVAL,MIN1;比较分钟个位是否到10INCALMOVMIN1,ALCMPAL,10JNZSKIPMOVMIN1,0MOVAL,MIN0;比较分钟十位是否到6INCALMOVMIN0,ALCMPAL,6JNZSKIPMOVMIN0,0MOVAL,HOUR1;比较时钟个位是否到4INCALMOVHOUR1,ALCMPAL,4JNZSTART6MOVAL,HOUR0CMPAL,2JNZSKIPMOVHOUR0,0MOVHOUR1,0JMPSTART13SKIP:JMPCALL

39、_SHOWSTART6:CMPAL,10;比较时钟个位是否到10JNZCALL_SHOWMOVHOUR1,0MOVAL,HOUR0INCALMOVHOUR0,ALJMPCALL_SHOWSTART13:MOVAL,DAY1INCALCMPAL,1JZSTART11CMPAL,10JNZCALL_SHOWMOVDAY1,0MOVAL,DAY0INCALMOVDAY0,ALJMPCALL_SHOWSTART11:MOVAL,DAY0CMPAL,3JNZSTART12MOVDAY1,1MOVDAY0,0JMPCALL_SHOWSTART12:MOVAL,DAY0INCALMOVDAY0,ALJNZC

40、ALL_SHOWCALL_SHOW:CALLSHOW;显示CALLIfExit;判断是否退出JNZSTART_EXITSTART7:JMPSTART5;无键盘按键按下,循环显示START_EXIT:JMPNEAR PTR EXITCOPYPROCNEARPUSHCXPUSHSIPUSHDXMOVCX,8MOVSI,0DO:MOVDL,DAYSIMOVTEMPSI,DLINCSILOOPDOPOPDXPOPSIPOPCXRETCOPYENDPCOPY_1PROCNEARPUSHCXPUSHSIPUSHDXMOVCX,8MOVSI,0DO_1:MOVDL,TEMPSIMOVDAYSI,DLINCS

41、ILOOPDO_1POPDXPOPSIPOPCXRETCOPY_1ENDPINIT8279PROC NEAR;8279初始化 MOV DX,CMD_8279;CMD_8279为写命令地址、读状地址 MOV AL,34H ;可编程时钟设置,设置分频系数(20分频) OUT DX,AL MOV AL,10H;8*8字符显示,左边输入,外部译码键扫描方式 OUT DX,AL CALL INIT8279_1 RETINIT8279 ENDPINIT8279_1PROC NEAR CALL CLEAR;清显示 MOV AL,90H;从第一个数码管开始移位显示 OUT DX,AL RETINIT8279_

42、1 ENDPCLEAR PROC NEAR MOV DX,CMD_8279 MOV AL,0DEH ; 清除命令 OUT DX,ALWAIT1: IN AL,DX TEST AL,80H JNZ WAIT1; 显示RAM清除完毕吗? RETCLEAR ENDPSCAN_KEY PROC NEARMOV DX,CMD_8279 IN AL,DX;读状态READ_FIFO:ANDAL,7 JZ NO_KEY ;是否有键按下READ:MOV AL,40HOUT DX,AL;读FIFO RAM MOV DX,DATA_8279IN AL,DX STC;有键JMP SCAN_KEY1NO_KEY: CL

43、C;无键按下,清CF SCAN_KEY1:RETSCAN_KEY ENDPSCAN_KEY_CHPROC NEARMOV DX,CMD_8279PUSHCX IN AL,DX;读状态ANDAL,7 JZ NO_KEY_CH_1 ;是否有键按下MOV AL,40HOUT DX,AL;读FIFO RAM MOV DX,DATA_8279IN AL,DXCMPAL,0CAH;A键按下JNESCAN_KEY_BSTCPOPCX;有A键JMPSCAN_CHNO_KEY_CH_1:JMPNO_KEY_CHSCAN_KEY_B:CMPAL,0CBH;B键第一次按下,暂停;再按一次,重新开始计时JNESCAN

44、_KEY_CCMPFLAG_B,0JEFLAGMOVFLAG_B,0JMPNO_KEY_CHFLAG:MOVFLAG_B,1JMPNO_KEY_CHSCAN_KEY_C:CMPAL,0CCHJNESCAN_KEY_DMOVCX,2LEADI,DAYCALLCOPYSCAN_DAY:CALLSCAN_KEYJNCSCAN_DAY;无按键按下CALLKEY_NUM;有按键,转换键值STOSB;替换掉原来时钟的两位(先高后低)CALLINIT8279_1CALLSHOWLOOPSCAN_DAYMOVAH,DAY0MOVAL,DAY1CMPAX,0301HJGEER_1CMPAX,0JBEER_1CM

45、PAL,0AHJGEER_1JMPNO_KEY_CHSCAN_KEY_D:CMPAL,0CDH;D键按下JNESCAN_KEY_EMOVCX,2LEADI,HOURCALLCOPYSCAN_HOUR:CALLSCAN_KEYJNCSCAN_HOUR;无按键按下CALLKEY_NUM;有按键,转换键值STOSB;替换掉原来时钟的两位(先高后低)CALLINIT8279_1CALLSHOWLOOPSCAN_HOURMOVAH,HOUR0MOVAL,HOUR1CMPAX,0204HJGEER_1CMPAL,0AHJGEER_1JMPNO_KEY_CHSCAN_KEY_E:CMPAL,0CEH;E键按下JNESCAN_KEY_FMOVCX

温馨提示

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

评论

0/150

提交评论