《基于数码管的电子时钟设计.doc》由会员分享,可在线阅读,更多相关《基于数码管的电子时钟设计.doc(22页珍藏版)》请在课桌文档上搜索。
1、-单片机原理及应用 课 程 设 计 报 告题 目:基于数码管的电子时钟设计专 业: 自动化班 级:1、任务书课题名称基于数码管的电子时钟设计指导教师(职称) 执行时间2012 2013 学年 第 2学期 第 10 学生*承担任务设计目的1. 学习8051单片机定时器时间计时处理、按键扫描及LED数码管显示的设计法。2.能够较全面地巩固和应用单片机课程中所学的基本理论和基本法,锻炼动手能力。3.培养学生独立思考、独立收集资料、独立设计的能力;培养分析、总结及撰写技术报告的能力。设计要求要求:1、用8个数码管显示一个电子时钟格式为00-00-00,分别表示时钟、分钟和秒钟;2、要求有暂停,能进行时
2、钟、分钟和秒钟的调节;3、到整时(如1点整,2点整)时蜂鸣器发出滴答”声,同时一个发光二极管发出闪烁。. z.-摘 要 随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。本设计主要基于单片机技术原理,设计制作出一个电子时钟系统。6位LED数码管显示,使用按键扫描进行时间校准。这种实现法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。最后将设计的时钟系统在Protues仿真软件上进行仿真验证所设计的时钟系统稳定可靠。关键词: AT89C51单片机;电子时钟;数码管;按键扫描基于数码
3、管的电子时钟设计目 录摘要3第一章绪论11.1 单片机的应用和特点11.2 单片机的发展趋势11.3 电子时钟简介及其基本特点2第二章控制系统的硬件设计32.1 总案设计32.2 单片机芯片的选择32.2.1 AT89C51的功能概述32.2.2 AT89C51引脚功能说明42.3单片机系统电路设计62.4 按键电路设计62.5 蜂鸣器电路设计72.6 LED数码管显示电路7第三章控制系统的软件设计10第四章系统仿真12第五章总结与体会13参考文献14附录15附录二元件清单20插图清单图2-1 电子时钟设计框图3图2-2 AT89C51引脚说明4图2-3 单片机系统电路6图2-4 按键设计电路
4、7图2-5 蜂鸣器设计电路7图2-6 LED数码管8图2-7 显示电路设计9图2-8 总体设计电路9图3-1 主程序框图10图3-2显示子程序框图11图4-1 整点报时仿真12图4-2调时仿真12表格清单表2-1 数码管字型与字段关系表8. z.-第一章 绪论1.1 单片机的应用和特点 20世纪末,单片机技术获得了飞速的发展,渗透到我们生活的每个领域,几乎很难找到那个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种IC卡,民用豪华轿车的安全控制系统,录像机、摄像机、全自动洗衣机的控制等等,这些都离不开单片
5、机的控制还有医疗器械、功能仪表都需要单片机。可见,单片机关系到我们生活的面面。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分为如下几个畴:智能仪器、工业控制,家用电器、网络和通信、设备领域、模块系统以及汽车电子。 随着单片机的广泛应用,在其在推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使得现代电子产品性能进一步提高。单片机有以下特点: 1. 单片机的存储器ROM和RAM是格区分的。ROM称为程序存储器,只存放程序、固定常数及数据表格。RAM则为数据存储器,用作工作区及存放用户数据
6、1 2. 采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力; 3. 单片机的I/O口通常是多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的法,引脚处于种功能,可由指令来设置或机器状态来区分; 4. 单片机的外部扩展能力很强。在部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与多通用的微机接口芯片兼容,给应用系统设计带来了很大的便。1.2 单片机的发展趋势 目前,单片机正朝着高性能和多品种向发展趋势是进一步向着CMOS化、低功耗、小体积,大容量、高性能、低价格和外围电路装化等几个面发
7、展。 单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计法。在以前,是必须由模拟或是数字电路实现的大部分功能的,而现在已经能用单片机通过软件的法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 1.3 电子时钟简介及其基本特点 随着社会经济的急速发展,给人们的生活带来巨大压力的同时迫使人们加快自己工作、生活的步伐,使时间对于人们来说总是则宝贵,工作的忙碌性和繁杂性容易是人忘记当前时间。忘记了要做的事情,当事情不是很重要的时候这种遗忘无伤大雅。但是,一旦是重要的事情,一时的耽误可能酿成大祸。1957年,Ventura发明了世界上第一只电子表,
8、从而奠定了电子时钟的基础,电子时钟也飞速的发展起来。现代的电子时钟的基于单片机的一种计时工具采用延时程序产生一定的时间中断,用于一秒定义,通过计数式进行六十秒分钟进一,满六十分小时进一,满二十四小时清零,从而达到计时的功能,是人们日常生活不可缺少的工具。 现在高精度的计时工具大多数采用了英晶体振荡器,由于电子钟、英钟、英表都采用了英技术,因此,走时精度高,稳定性好,使用便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器或数码管代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。第二章 控制系统的
9、硬件设计2.1 总案设计根据课设的要求,我们设计了如图2-1所示的整体框图,包括外部震荡电路模块、复位电路模块、按键电路模块、蜂鸣器电路模块(起整点报时的功能)、单片机芯片以及显示模块。其中单片机芯片是核心模块,与外部晶振电路和复位电路组成单片机系统电路。外部晶振电路 单 片 机显示电路复位电路蜂鸣器电路按键键电路图2-1 电子时钟电路设计框图2.2 单片机芯片的选择 经过多种单片机性能的分析及现有实验设备的限制,在本设计中单片机芯片采用了AT89C51单片机芯片。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Rea
10、d Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的案。AT89C51的功能概述AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,12
11、8字节部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲式停止CPU的工作,但允RAM,定时/计数器,串行通信口及中断系统继续工作。掉电式保存RAM中的容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.2.2 AT89C51引脚功能说明引脚排列如图2-2所示。 图2-2 AT89C51引脚说明 Vcc: 电源电压 GND: 接地P0口:P0口是一组8位漏极开路型双向I/O口,即地址/数据总线复用口。作为输出口用时,每位能驱
12、动8个TTL逻辑门电路,对端口写1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1口是一个带有部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写1”,通过部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为部存在上拉电阻,*个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8地址5。 P2口:P2口是一个带有部上
13、拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写1”,通过部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为部存在上拉电阻,*个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOV* DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(例如执行MOV* Ri指令)时,P2口线上的容(即特殊功能寄存器(SFR)区中P2寄存器的容),在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收高位地址和其他控制信号。P3口:P3口是一个带有部上拉电阻的8位双向
14、I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入1”,它们被部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能。 P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器期以上高电平将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AU*R的DISRT0位(地址8EH)可打开或关闭该功能。DIRT0位缺省为RESET输出高电平打开状态。 ALE/PROG:当访问外部程序存储器或数据存储器时
15、,ALE(地址锁存允)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此可对外输出时钟或用以定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于出入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,单片机执行外部程序时,应设置ALE无效。 /PSEN:程序储存允(/PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)使,每个机器期两次/PSEN有效,即输出两个脉冲。当访问外部数据存储器。没有两次
16、有效的/PSEN信号。EA/VPP:外部访问允。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程电压VPP。2.3单片机系统电路设计 单片机系统电路包含晶振和复位两部分,如图2-3所示。图2-3 单片机系统电路在图2-3的复位部分,单片机的9脚(RST)是硬件复位功端,当该端持续4个期输入高电平即可实现复位,复位后单片机的各状态都将回复初始状态,其中K5为复位键,按下此键就可以
17、使单片机恢复到初始值。晶振电路部分,此电路在加电大约延迟10sm后正当器起振,在*TAL2引脚产生幅值为3V的正弦时钟信号,其振荡频率主要由英晶振的频率决定。电容C1、C2起到两个作用,一是帮助振荡器起振,二是对振荡器的频率进行微调,值都为33pF。图中*1为英晶振。2.4 按键电路设计设计用了3个按键K1、K2、K3,分别表示设定键、暂停键、加键,其中设定键是对时、分、秒的选择键,而加键是对时或分或秒的调节,两者结合从而达到调节时间的目的。电路如图2-4所示:图 2-4 按键设计电路2.5 蜂鸣器电路设计当单片机检测到整点的时候,例如01-00-00时,单片机系统应能发发出信号使蜂鸣器发出嘀
18、、嘀、嘀”的声音,同时一个发光二极管闪烁。用I/O口很容易实现该功能。本设计的蜂鸣器电路是实现整点报时。本设计中选用压电式蜂鸣器。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器、共鸣器和外壳组成。当接通电源后(1.5V15V直流工作电压),多振荡器起震,输出1.52.5KHZ的音频信号。阻抗匹配器推动压电蜂鸣片发生。购买市售的压电式蜂鸣器,用一根I/O口线驱动蜂鸣器发声,约需10mA的驱动电流,可用7406或7407低电平驱动,也可以用一个晶体管驱动,如图2-5所示: 图2-5 蜂鸣器设计电路图2.6 LED数码管显示电路我们常用的LED数码管有七段式和八段式,相对于七段式来说八段式多了
19、一个小数点其他的基本相同。本设计中我们选用的是八段式LED数码管。所谓八段就是数码管里有八个小的LED发光二极管,通过控制不同的LED二极管的亮灭来显示不同的字形。数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳极,一种是共阴极。共阳极就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极连接在一起,即为公共端。其中,共阳极的公共端接+5V电源,共阴极公共端接地。如图2-5所示。 (a)外观图 (b)共阳极等效电路 (c)共阴极等效电路图2-6 LED数码管一个八段数码管称为一位,多个数码管并列在一起可构成多为数码管,它们的段选线(即a
20、、b、c、d、e、f、g、dp)连载一起,各自的公共端为位选线。显示时都是从段选线送入编码,选中哪个位选线,那个数码管就会被点亮。数码管的八段对应一个字节的八位,a对应最低位,dp对应最高位。例如,显示字符0,共阴极数码管字符编号为00111111,即0*3f;共阳极数码管字符编号为11000000,即0*c0。可以看出两个编码的各位正好相反。本设计中选用的是共阳极的数码管,表2-1中为各字符的编号。表2-1 数码管字型与字段关系表显示字符 g f e d c b a字型码共阴极共阳极 0 0 1 1 1 1 1 13FHC0H 1 0 0 0 0 1 1 006HF9H 2 1 0 1 1
21、0 1 15BHA4H 3 1 0 0 1 1 1 14FHB0H 4 1 1 0 0 1 1 066H99H 5 1 1 0 1 1 0 16DH92H 6 1 1 1 1 1 0 17DH82H 7 0 0 0 0 1 1 107HF8H 8 1 1 1 1 1117FH80H 9 1 1 0 1 1116FH90H A 1 1 1 0 11177H88H B 1 1 1 1 1007CH83H C 0 1 1 1 0 0139HC6H D 1 0 1 1 1105EHA1H数码管的显示法可分为静态显示和动态显示,在本设计中采用的是动态显示,其原理:各个数码管的相同端连接在一起,共同占用8
22、位段引管线:每位数码管的阳极连接在一起组成公共端。依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,显示就会清晰显示出来。本设计选取的是7SEG-MP*8-CA-BLUE共阳极的多位数码管,如图2-7所示。图2-7 显示电路设计 由以上各部分电路模块的设计思路,以及进一步修改得到如图2-8所示的由AT89C51芯片和74HC573等元件组成的电路图,按钮开关从上到下依次设定、暂停、加、确认等功能。此外,该电路还可以实现整点报时,同时发光二极管闪烁的功能。图2-8 总体设计电路图第三章 控制系统的软件设计 软件的设计主要包括三个部分:主程序、显示子程序、中断服务组程序。1
23、、主程序设计功能主要是选择定时器工作式,流程图如图3-1所示,程序见附录一。开始单元初始化显示缓冲区初始置定时器模式及工作方式设置初始常数启动定时器 图3-1 主程序框图2、中断服务组程序设每个机器期的长度是12个振荡期。实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下法计算: 机器期=1211.0592MHz1.0857S ,程序见附录一。3、显示子程序设计功能:扫描8个数码管,数值。程序见附录一, 流程图如图3-2所示:调用延时程序秒单元加160S到 N Y 秒单元清0分单元加160M到. N Y 分单元清0小时单元加124H到 N Y 小时单元清0返回 图3-2 显示子程
24、序设计框图 第四章 系统仿真系统的调试、仿真用到了Keil和Protues两个软件。Keil C51 仿真器是一款利用KEIL C51 的IDE 集成开发环境作为仿真环境的廉价仿真器,是利用SST公司具有IAP功能的单片机SST89C58制作而成,主要是利用了SST89C58的IAP功能,所谓IAP功能是In application program 的英文缩写,是在应用编程的意思,通俗一点讲就是:它可以通过串口将用户的程序下载到单片机中,可以通过串口对单片机进行编程。它之所以具有这种功能,实际上它有两块程序flash区,其中一块flash中运行的程序可以更改另外的一块程序flash区中的程序,
25、正是利用这一特性才用它作成了仿真器,我们把仿真器的监控程序事先烧入SST89C58,监控程序通过SST89C58的串口和PC通讯,当使用KEIL C51的IDE环境仿真时,用户的程序通过串口被监控程序写入flash程序区中,当用户设置断点等操作仿真程序时,flash程序中的用户程序也在相应的更改,从而实现了仿真功能 。 具体操作过程如下:1. 在Protues软件中绘制连接图2-8所示的总体电路图,然后把程序输入keil软件中生成HE*文件,最后把HE*文件载入AT89C51单片机中运行。2. 仿真后的结果: (1)开始通电时,LED数码管显示的时间是00-00-00”,此时处于整点状态,蜂鸣
26、器发出嘀嘀嘀”的响声,发光二极管也同时亮起。仿真结果如图4-1所示。图4-1 整点报时仿真 (2)按下k1键(设定功能),选择调节的是时、分、秒其中的一个,然后按k3(加)键,对选中的时或分或秒进行调节,例如把时间调整在22-11-10”,仿真结果如图4-2所示。调时后按下k1键(确认功能),时钟就开始工作计时。按下k2(暂停)键,LED数码管上显示的时间就不会变动,时钟停止工作。图4-2 调时仿真第五章 总结与体会 通过这次单片机课程设计,发现了自身所学知识存在多的不足和问题,同时也学到了不少东西,提高了动手能力。 在整个设计过程中,从设计案的确定,到具体电路的设计,最后到总体电路的联接构建
27、以及程序的编写改写,整个设计工程量的比较大的,单靠个人能力,很多面考虑不,有的地甚至毫无头绪,想不出具体案,因此,绝对不能心急,不明白的地我们一组同学进行分析、研究,毕竟群策力办法要多些,让每个人也多个机会,碰上是在不能解决的问题,就去找辅导老师,用过老师的指点,把问题彻底搞清楚并加以掌握。另外,在这次的设计过程中,我们还查阅了很多相关设计的资料,通过参考和研究别人的一些设计,使得我们的设计思路更加清晰和密,从而使设计出来的产品也更加完善和高质量。 尽管这次设计中遇到了很多问题,但是也都一一得以解决,比如软件设计时,遇到了很多问题,但是经过我们的讨教及想老师询问,静下心来思考,慢慢就理清了思路
28、。通过这次设计,也使我们了解到无论做任事情,都要有一颗平常心,不要急着想要成功、走捷径,要一步一个脚印,把每一部都认认真真的做好来,才能取得最后的成功,同时也练就了我们的耐心,做什么事情都要有耐心,不要遇到困难就退缩,而是要静下心来去寻找解决的法,否则很难有最后的成功。在此过程中,充分发挥人的主观能动性,自主学习,学到了很多没有学到过的知识,另一面,碰到问题注意与同学和老师写作、讨论、寻求解决的案,最终完成作品,达到预期的目的。虽然这次设计的课题有些简单,但是要真的做进去还是有一定的困难的,但是经过自己的努力,得出最后的作品,我们还是蛮有成就感的,更重要的是学到了平时没有学到的知识。因此,我们
29、觉得这次的课程设计对自己而言算的上是一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我们有了全位的提高和进步。 参考文献1 楼然苗, 光飞。 单片机课程设计指导,航空航天大学。2 友德,志英,涂时亮。单片机原理、应用与实验(第五版),复旦大 学。 3 佚名。单片机电子数字钟论文,豆丁网文档在线, .docin./p-35240247.html 4 永枫。单片机应用实训教程,电子科技大学。5 定华单片机原理及接口技术实验,北交通大学。6 天峰。单片机应用系统设计与仿真调试,航空航天大学。7 佚名。毕业论文基于AT89C51单片机的数字时钟,豆丁网文档在线, .docin./p-4235
30、1239.html8 白美电子线路设计实验测试华中理工大学1992. 9 立民单片机应用系统设计,航空航天大学1993.10付家才单片机控制工程实践技术,化学工业 2004.3. 11光才单片机课程设计 实例指导,航空航天大学。附录附录一 程序清单*include *define uchar unsigned char*define uint unsigned intuchar code table=0*C0,0*f9,0*a4,0*b0,0*99,0*92,0*82,0*f8,0*80,0*90,0*88,0*83,0*c6,0*a1,0*86,0*8e,0*ff,0*0c,0*bf; /*
31、数码管编码表0-F、灭(16)、P.-*/uchar t0,t1,sec,min,hour,function,a0,a1,a2,a3,a4,a5,a6,a7;bit shan;void delay(uint count) ;uchar keychuli();uchar key();void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);/函数申明void send();void ini();void chuli();void main() /主函数ini();while(1)display(16, 16, 18, 16, 16
32、, 18, 16, 16); /没有键按下是显示P.if(key()=1) /当k1按下后则定时器驱动时钟开始走 TR0=1; function=1; shan=0;while(1)send(); / 送数display(a0, a1, a2, a3, a4, a5, a6, a7); / 显示chuli(); /处理voidini() /初始化TMOD=0*01,TH0=0*3c,TL0=0*b0;TH1=0*3c,TL1=0*b0; / 定时50ms中断一次EA=1,ET0=1,TR0=0;ET1=1;TR1=0; /开中断void chuli() /键值处理程序switch(key()c
33、ase 0:break;case 1:/ 当按键k1按下后function+;/ 判断按下的次数switch(function)case 1:TR0=1;TR1=0;shan=0;break;/一次条秒同时闪烁case 2:/两次调分同时闪烁case 3:/三次调分同时闪烁case 4:TR0=0;TR1=1;shan=1;break;/四次跳出调整状态时钟继续走时case 5:function=1;TR0=1;TR1=0;shan=0;break;/轮流循环break;case 2: /k2键上调switch(function) case 1:break;case 2:sec+;if(sec
34、=60)sec=0;break;case 3:min+;if(min=60)min=0;break;case 4:hour+;if(hour=24) hour=0;break;break; case 4: switch(function)case 1:break;case 2:sec-;if(sec=255) sec=59;break;case 3:min-;if(min=255) min=59;break;case 4:hour-;if(hour=255) hour=23;break;break;void timer0() interrupt 1 /定时器0的中断服务程序TH0=0*3c,T
35、L0=0*b0;t0+;if(t0=20)t0=0;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;void timer1() interrupt 3 /定时器1的中数服务程序,对shan取反,以使灯闪烁TH0=0*3c,TL0=0*b0;t1+;if(t1=40)t1=0;shan=shan;uchar keychuli() uchar k; k=P1; /P1口容送K k=k; /取反 k=(k&0*ff); /屏蔽高4位,如果扫描8键,屏蔽该句。 return(k); /返回键值 uchar key()
36、/键盘扫描程序 uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); if(keyzhi!=0) send(); display(a0, a1, a2, a3, a4, a5, a6, a7); display(a0, a1, a2, a3, a4, a5, a6, a7); keyzhi=keychuli(); if(keyzhi!=0) keyzhii=keyzhi; while(keyzhi!=0) send(); display(a0, a1, a2, a3, a4, a5, a6, a7); display(a0, a1, a
37、2, a3, a4, a5, a6, a7); keyzhi=keychuli(); keyzhi=keyzhii; return(keyzhi); void display(uchar a7,uchar a6,uchar a5,uchar a4,uchar a3,uchar a2,uchar a1,uchar a0)P0=tablea7;P2=0*fe;delay(1);P0=tablea6;P2=0*fd;delay(1); P0=tablea5;P2=0*fb;delay(1);P0=tablea4;P2=0*f7;delay(1);P0=tablea3;P2=0*ef;delay(1)
38、P0=tablea2;P2=0*df;delay(1);P0=tablea1;P2=0*bf;delay(1);P0=tablea0;P2=0*7f;delay(1);/将数送至缓冲单元,当shan的标志位为1时,再根据此时的此时的功能标示,对该位熄灭void send()a0=sec%10;a1=sec/10;a2=18;a3=min%10;a4=min/10;a5=18;a6=hour%10;a7=hour/10;if(shan=1)switch(function)case 2:a0=16,a1=16;break;case 3:a3=16,a4=16;break;case 4:a6=16,a7=16;break;void delay(uint count) /延时子程序基数为1毫秒 uint j; while(count-!=0) for(j=0;j80;j+); 附录二 元件清单元件参数数量电阻10k1个按钮开关/4个AT89C51芯片/1个TTL管(74HC573)/1个发光二极管/1个蜂鸣器/1个8位数码管/1个晶振/1个电容33pF2个上拉电阻10k8个. z.