《基于51单片机的数字时钟的设计毕业论文.doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字时钟的设计毕业论文.doc(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 基于51单片机的数字时钟的设计毕业论文目录摘要:1ABSTRACT11 绪论12 硬件总体设计方案22.1 系统功能实现总体设计思路22.2 各部分功能实现22.3 系统工作原理22.4 电路功能使用说明32.5 系统的设计方案42.5.1 系统的电路图和原理图42.5.2 单片机概述62.5.3 键盘电路92.5.4 显示电路102.6 硬件焊接准备122.6.1电路板的布线122.6.2 硬件电路元件明细表133 软件总体设计方案143.1 程序流程图143.1.1主程序流程图143.1.2 按键处理流程图143.1.3 定时器中断流程图143.1.4 时间显示流程图153.2 调试结果
2、说明164总结18致谢19参考文献1附录2114 / 38基于51单片机的数字时钟的设计电子信息科学与技术专业彬指导教师车晓岩摘要: 自诞生以来,单片机的应用日趋广泛,应用领域日趋扩展,而MCS-51系列单片机是各单片机中最为典型的一种。这次毕业设计,以AT89C51芯片为核心,通过必要的电路,构成简单的电子时钟。数字时钟系统的主要任务是:采用单片机为核心器件产生24h(24小时)时间,并用LED显示器将他显示出来。另外本设计具有闹铃的功能,通过拉蜂鸣器来做提醒。这样简单的设计,直观反映单片机的应用。软件和硬件的开发是这次设计必不可少的。关键词:AT89C51;数字时钟;LED数码显示管;C语
3、言Design of Digital Clock System Based on MSC-51 SinglechipElectronic Information Science and TechnologySunBinTutorCheXiaoYanAbstract: The applications of single-chip have been spread widely,and the areas of its application have been expanding increasingly since its inception. and MCS-51 series singl
4、e-chip microcontroller is the most typical one. In the graduation-design , AT89C51 chip is the core of the necessary circuitry to form a simple electronic clock. Here are the main tasks of the digital clock system : as the core device ,Single-chip creates 24h (24 hour) time which will he displayed b
5、y the LED .In addition ,thisdesign has the function of alarmbymakingthe buzzerto do as a reminder. This simple design can reflect the intuitive applications of the microcontroller. Softwareand hardwaredevelopment isessential tothisdesign .Keywords: SCM; The LED display; A digital clock; Assembly lan
6、guage 1 绪论数字时钟作为人们日常生活中的必需品,给人们的学习、工作、生活带来极大的便利。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时与自动控制等各个领域1。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的专业知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。单片机具有体积小、功能强可靠性高、价格低廉、走时准确、性能稳定、携带方便等一系列优点,不仅已
7、成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。培养针对课题需要,选择和查阅有关手册、图表与文献资料的自学能力,提高组成系统、编程、调试的动手能力;巩固、加深和扩大单片机应用的知识面,提高综合与灵活运用所学知识解决工业控制的能力;过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、容与步骤。2 硬件总体设计方案本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒
8、,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、显示屏即可满足设计要求。2.1 系统功能实现总体设计思路此设计原理框图如图2-1所示,此电路包括以下四个部分:单片机,键盘,闹铃电路与显示电路。闹铃电路51单片机独立键盘数码管显示图2-1 设计原理框图2.2 各部分功能实现(1) 单片机发送的信号通过程序控制最终在数码管上显示出来。(2) 单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。(3) 为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。(4) 单片机通过控制闹铃电路来完成 定
9、时闹钟的功能。2.3 系统工作原理设计的电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以与校正电路。详细电路功能图以下图所示: 图2-2 详细电路功能图本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。2.4 电路功能使用说明(1) 各个控制键的功能:可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状
10、态,设置闹钟的时间;时加、分加键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。(2)AT89C51单片机,通过编写程序对数码显示进行控制。(3)八个7段数码管显示时钟和秒表信号。2.5 系统的设计方案2.5.1 系统的电路图和原理图图2-3 数字时钟电路图图2-4 数字时钟电路原理图2.5.2 单片机概述(1)单片机型号的选择:AT89C51图2-5 AT89C51引脚图(2)单片机的主要特点AT89C51是一种带4K字节FLASH存
11、储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机2。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 主
12、要特性:与MCS-51 兼容 4K字节可编程FLASH存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24MHz 三级程序存储器锁定 1288位部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片振荡器和时钟电路(3)管脚说明:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时
13、,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址
14、的高八位。在给出地址“1”时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 也可作为AT89C51的一些特殊口,如下表所示: 表2-1: P3口的功能口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断
15、1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE
16、只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入与部时钟工作电
17、路的输入。 XTAL2:来自反向振荡器的输出2.5.3 键盘电路(1)键盘电路的描述:作为整个系统中最简单的部分,可以根据功能要求,进行时间设置键、闹钟设置键、时间加键、时间减键等操作,并采用独立式按键。(2)键盘电路图:图2-6 键盘电路(3)键盘的工作原理:键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms3。独立式按键的软件常采用查询式结构。诸位查询每根I/O口线的输入状态,如某一
18、根I/O线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。 连击功能的实现 :按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。 (4)键盘电路应注意的问题:1) 开关状态的可靠输入,必须消除键抖动,可以采用硬件和软件两种方法,硬件方法就是在按键输入通道上贴加去抖动电路,软件方法采用延迟10-20MS。2) 键盘状态的检测方法中断方式还是查询方式。3) 键盘编码方法。4) 键盘控制程序的编制。2.5.4
19、显示电路(1) LED数码显示管简介数码管由7个发光二极管组成,行成一个日字形,它门可以共阴极,也可以共阳极。通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理。基本的半导体数码管是由7个条状的发光二极管(LED)排列而成的,可实现数字09与少量字符的显示。另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成5。(2) 数码管的分类:数码管按各发光二极管电极的连接方式分为共阳数码管和共阴数码管两种。7段共阳极LED数码管是由7个条形发光二极管和一个小数点位构成,其引脚配置,如下图,其部结构,如下图。从图中可以看出,其中7个发光二极管构成字形“8”
20、,可以用来显示数字,另一个发光二极管构成小数点。图2-7 共阳极7段LED引脚设置和部结构共阴极7段LED数码管和共阳极LED数码管结构类似,其引脚配置,如下图。从图中可以看出7段LED数码管同样由8个发光二极管组成,其中7个发光二极管构成字形“8”,另一个发光二极管构成小数点。共阴极7段LED数码管的部结构,如下图。其中所有发光二极管的阴极为公共端,接GND6。如果发光二极管的阳极极为高电平的时候,发光二极管导通,该字段发光;反之,如果发光二极管的阳极为低电平的时候,发光二极管截止,该字段不发光。图2-8共阴极7段LED引脚设置和部结构(3)数码管的显示方式:数码管要正常显示,就要用驱动电路
21、来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类7。1)动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的
22、的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象与发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。2)静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口
23、来驱动,要知道一个89S51单片机可用的I/O端口才32个。),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性8。(4)LED数码管的选择:四位一体共阴数码管。2.6 硬件焊接准备2.6.1 电路板的布线图2-9电路板的布线通过电路板的布线设计,初步掌握焊接硬件的必要准备,也能够在实际的数字时钟焊接中,做好元器件的布局,使更美观。2.6.2 硬件电路元件明细表表3-1 硬件电路原件编号元件参数 1单片机AT89C51 1只240PIC座1只3万用板7cm*9cm 1片4LED数码管四位一体共阴0.36寸 2只5排阻1K 1只6晶振12M 1只7电容22P 2只8蜂鸣器1个9三极管
24、S8550 1只10电阻4.7K 2只11按键5个12DC座1个13USB电源线1条13 软件总体设计方案单片机软件的设计也是工具系统功能的设计,对于数字时钟的实现和正常运行也是非常重要的9。为提高软件的可行性,可以根据各部分的功能件软件划分为若干相对独立的部分,使软件开发结构更合理,流程更清晰。建立正确的数学模型,绘制流程图对软件工程的实施会有很大帮助。3.1 程序流程图3.1.1 主程序流程图 主程序是先开始,然后启动定时器,再进行检测,完成之后,就能显示时间。 开始定时器与中断定时器初始化是否设定参数执行显示程序执行时钟闹铃设定程序NY图3-1主程序流程图3.1.2 按键处理流程图按键处
25、理时先检测秒按键是否按下,如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分加1;如果没有就检测时按键,如果按下就加1,如果没有,时间显示。流程图如图3-1所示。3.1.3 定时器中断流程图 定时器中断时是先检测1秒是否到,1秒如果到,秒单位就加1;如果没有到,就检测1分钟是否到,1分钟如果到,分单元就加1.如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。流程图如3-2示。NY开始秒按键按下?分按键按下?时按键按下?秒加1时加1显示时间分加1完毕NNYYNY开始1秒时间到?60秒时间到?60分钟到?秒单元加1分单位清零,时单元加1显示时间
26、秒单元清零,分单元加1中断返回NNYYN24小时到?时单元清零 图3-2按键处理流程图 图3-3 定时器中断流程图3.1.4 时间显示流程图 时间显示是先秒个位计算显示,然后是秒十位计算、依次分个位计算、分十位计算、时个位计算、时十位计算。开始结束秒 个 位 计 算 显 示秒十位计算显示时十位计算显示分个位计算显示分十位计算显示时个位计算显示图3-4 时间显示流程图3.2 调试结果说明在调试的过程中出现拉很多的问题,真对这些问题我进行拉系统的分析。(1)数据与代码转换。 由前述可知,从P2 口输出位选码,从P0 口输出段选码,LED 就会显示出数字来。但P0 口的输出的数据是要BCD 码,各存
27、储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0 口去驱动LED 数码管显示是不能正确表达的,必须在系统部将要显示的数据经过BCD 码行转换后,将各个单元数据的段选代码送入P0 口,给CD4511 译码后去驱动数码管显示10。 具体转换过程如下:先将要显示的数据装入累加器A 中,再将A 中的数据转换成高低两位的BCD 码, 再放回A 中,然后将A 中的值输出。如:有一个单元存储了45 这样一位数,则需转换成四位的BCD 码:(0100)(0101)然后放入A 中。 A 中BCD 码,高位四位代表4低四位代表5同时送给两个译码器中,译
28、码后45字就在两个LED 中显示出来。 (2)计时功能的实现与中断服务程序 时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0 打开后, 进入计时,满100 毫秒后,重装定时。中断一次,满一秒后秒进位,满60 秒后即为1 分钟, 分钟单元进位,60 分到了后,时单元进位,24 小时满后,天单元进位。这样然后根据进率, 得到时、分、秒存储单元的值,并经译码后,通过扫描程序送LED 中显示出来, 实现时钟计时功能。累加是用指令INC 来实现的。 进入中断服务程序以后,执行PUSH PSW 和PUSH A 将程序状态寄存器PSW 的容和累加器A 中的数据保存起来,这便是所谓的保护
29、现场, 以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片RAM 中的任一区间设定,而堆栈的数据存取与一般的RAM 存取又有区别,对它的操作要遵循后进先出的原则。 (3)时钟误差分析 开启定时器/计数器0,使之开始计时,中断后进入中断程序。自停止计数到、计数又开始,中间执行了7 条指令,也就是延迟了13 个单周期共用时间26us,这样,每个中断的总时间应为为100.026sm,而原来定时是100ms,所以,也就是说每次中断定时多了26um。 这样,可改变计数重装值,使每次中断定时时间为99.974sm,加上原来的7 条指令所用的时间,正好100sm.计数10 次得
30、1s.这样就可得到较精确的计时秒数,然后根据进率,得到时、分的值。 (4)时间控制功能与比较指令 系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入RAM 某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条 CLR 指令,将对应的那路P3 置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB 对应的P3 置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#direct, rel,其转移条件是累加器A 中的值与立即数不等则转移。 4 总结这次对数
31、字钟的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念。在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构与掌握了各芯片的工作原理和其具体的使用方法。在连接单片机与其他外部电路的实验中,要求熟悉逻辑电路与其芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并与时纠正了。在设计电路中,对单片机的编程的进一步的熟悉与学习让我明白拉许多自己没有掌握的功能,对单片机有拉更深刻的理解。再就是电路的连接中的一些小的的注意的问题像极性电容器其 “ ” 与 “ ” 极不能接错,例如电容器上的标记方向要易看可见。在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以与接
32、线的错误所引起的。接线的时候一定要细心,不要接错,同时也要学会如何判别芯片的好坏,要是芯片坏了即使接线再正确也出不来结果。对自己的设计图要仔细考虑,反复调试只有这样我们才能找到自己的不足从不足中学习。通过这次数字钟的设计,让我对各种电路都有了大概的了解,也学会了常用绘图软件的使用。所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解,才会有收获。当然我做出这样的文章也是离不开老师对我的细心指导的,所以在这里我感谢老师感谢帮助过我的所有的人。致谢 毕业设计是培养我们工作能力的最后一个实践性的学习环节。它不但是我们三年大学学习中所学知识的一次综合复习与考查,同时也是理论联系
33、实际的一个过程,为以后从事专业技术工作的一次准备。通过此次毕业设计,培养了我综合运用所学的基础理论课、技术基础课、专业课的知识和实践技能去分析和解决实际工作中的一般工程技术问题的能力,使我建立了正确的设计思想,学会了如何把三年所学的理论知识运用到实践当中去。掌握了单片机的数字时钟设计的一般程序、规和方法,并进一步巩固、扩大和深化了我所学的基本理论,基本知识和基本技能,提高了我设计计算、计算机制图、设计说明书、正确使用技术资料,标准手册等工具书的能力。在毕业设计的过程中,虽然本人在指导老师的帮助下对所设计的问题有初步的实习调研。但由于本人缺少实际工作经验,遇到了一些设计和实际加工中的问题,受到师
34、傅和指导老师的指导与帮助,从而得到了全面的解决同时也受到各位老师优良工作作风的影响,培养了我严肃认真、一丝不苟和实事求是的工作作风,并树立了正确的生产观、经济观和全局观。在设计中,由于个人能力有限,设计中漏洞和错误在所难免,敬请各位老师指正批评,以使我对自己的不足得到与时发现并修正。通过此次毕业设计,希望能把所学的知识有机的联系起来,培养自己分析问题,解决问题的能力,为充实自己,并在未来工作岗位上好好工作打下坚实的基础。在这里,向在这次毕业设计中给予过帮助我的老师表示衷心的谢意。参考文献1彭为,黄科.单片机典型系统设计实例精讲.电子工业,20062梅丽凤,王艳秋.单片机原理与接口技术(修订本)
35、.清华大学,20073毛敏.MCS-51系列单片机系统与应用实践教程.高等教育,20094杰,吴磊,鸣.51单片机C语言应用与开发. 航空航天大学,20085谭浩强. C程序设计(第二版)M. 清华大学,20036马轲瀛.八路数字抢答器系统J.,20077蔡.单片机控制实习与专题制作M.:航空航天大学,20068增生.对抢答器的改进J.电子制作,20009 高伟.AT89单片机原理与应用M.:国防工业,200810 Gordon McComb. Constructing Robot Bases.:机械工业,2006.附录控制电路的源程序#include#define tl 0xba;#defi
36、ne th 0x3c;sbit time=P10;/时间设置sbit timer=P11;/闹钟设置sbit add=P12;/加sbit dec=P13;/减sbit speaker=P35;/闹钟输出bit disp_sd;/数码管闪动显示标志位bit disp_ms;/数码管显示时间/闹钟标志位bit disp_sdt;/数码管闪动间隔反转标志位bit zhengdian=0;/整点报时标志位/unsigned char code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /数字0-9的编码unsigned char c
37、ode led=0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7,; /数字0-9的编码unsigned char time_cc,timer_cc;/调时计数器unsigned char count0,count1,second,minit,hour;/时间时分秒unsigned char second1,minit1,hour1;/闹钟时分秒unsigned char hour_zd;/整点小时记录void delay(void)unsigned int i;for(i=0;i100;i+);void display(void)if(dis
38、p_ms=0)if(disp_sd=0)P0=ledhour/10;P2=0xFE;delay();P2=0xFF;P0=ledhour%10;P2=0xFD;delay();P2=0xFF;P0=0x80;P2=0xFB;delay();P2=0xFF;P0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;P0=0x80;P2=0xDF;delay();P2=0xFF;P0=ledsecond/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond%10;P2=0x7
39、F;delay();P2=0xFF;elseif(time_cc=0x01)if(disp_sdt=1)P0=ledhour/10;elseP0=0x00;P2=0xFE;delay();P2=0xFF;if(disp_sdt=1)P0=ledhour%10;elseP0=0x00;P2=0xFD;delay();P2=0xFF;elseP0=ledhour/10;P2=0xFE;delay();P2=0xFF;P0=ledhour%10;P2=0xFD;delay();P2=0xFF;P0=0x80;P2=0xFB;delay();P2=0xFF;if(time_cc=0x02)if(dis
40、p_sdt=1)P0=ledminit/10;elseP0=0x00;P2=0xF7;delay();P2=0xFF;if(disp_sdt=1)P0=ledminit%10;elseP0=0x00;P2=0xEF;delay();P2=0xFF;elseP0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;P0=0x80;P2=0xDF;delay();P2=0xFF;if(time_cc=0x03)if(disp_sdt=1)P0=ledsecond/10;elseP0=0x00;P2=0
41、xBF;delay();P2=0xFF;if(disp_sdt=1)P0=ledsecond%10;elseP0=0x00;P2=0x7F;delay();P2=0xFF;elseP0=ledsecond/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond%10;P2=0x7F;delay();P2=0xFF;elseif(disp_sd=0)P0=ledhour1/10;P2=0xFE;delay();P2=0xFF;P0=ledhour1%10;P2=0xFD;delay();P2=0xFF;P0=0x80;P2=0xFB;delay();P2=0xFF;P0=
42、ledminit1/10;P2=0xF7;delay();P2=0xFF;P0=ledminit1%10;P2=0xEF;delay();P2=0xFF;P0=0x80;P2=0xDF;delay();P2=0xFF;P0=ledsecond1/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond1%10;P2=0x7F;delay();P2=0xFF;elseif(timer_cc=0x01)if(disp_sdt=1)P0=ledhour1/10;elseP0=0x00;P2=0xFE;delay();P2=0xFF;if(disp_sdt=1)P0=ledhour1%10;elseP0=0x00;P2=0xFD;delay();P2=0xFF;els