《基于单片机的时钟电路的设计毕业论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的时钟电路的设计毕业论文.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 基于单片机的时钟电路的设计毕业论文目 录1 引言12 以AT89C51单片机为核心的时钟电路结构和工作原理22.1 AT89C51的结构组成与引脚功能22.1.1 AT89C51的结构组成22.1.2 AT89C51的引脚功能32.2 时钟电路工作原理与原理图62.4 时钟电路的消除震荡设计92.5 时钟电路的误差分析与功耗103 以AT89C51单片机为核心的时钟电路的程序设计123.1主程序设计与系统主流程图123.2 时钟电路的时钟和闹铃程序设计与流程图133.3 时钟电路的显示程序设计与流程图143.4 时钟电路的键盘程序设计与流程图154 Keil 与Proteus软件的联调仿真1
2、64.1 Keil Software与Proteus 简介164.2 时钟电路的仿真图如下175 完毕语19参考文献20附录21致谢3333 / 341 引 言单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活
3、带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟与扩大其应用,有着非常现实的意义。现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文主要采用AT98c51单片机最小化应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P1.0-P1.2口作扫描输出,P0.1P0.4口接按钮开关S1,S2,S3,S4,S5,rest
4、 接S6复位按键。下面我主要从硬件、程序、软件联调3方面来设计。2 以AT89C51单片机为核心的时钟电路结构和工作原理2.1 AT89C51的结构组成与引脚功能2.1.1 AT89C51的结构组成AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS
5、-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形与引脚排列如下图。图1 89C51管脚图2.1.2 AT89C51的引脚功能 兼容MCS51指令系统 32可编程I/O线 两个16位可编程定时/计数器 全静态工作:0-24MHz 两个外部中断源 数据保留时间:10年 低功耗睡眠功能 可编程串行通道 低功耗的闲置和掉电模式 寿命:1000写/擦循环 三级程序存储器锁定 片振荡器和时钟电路 128x8bit部RAM 2.7-6.V的宽工作电压围6
6、个中断源4K字节可编程闪烁存储器表2.1 89C51功能列表AT89C51芯片的管脚说明:1. VCC:供电电压。2. GND:接地。3. P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。4. P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时
7、,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 5. P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。6. P3口:P3口管
8、脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3引脚兼用功能P3.0串行通讯输入(RXD)P3.1串行通讯输出(TXD)P3.2外部中断0( INT0)P3.3外部中断1(INT1)P3.4定时器0输入(T0)P3.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通RDP3口同时为闪烁编程和编程校验接收一些控制信号。表2.2 P3功能列表LEBIAO7.RST:复位输入。当振荡器复位器件时,要保持RST脚两个机
9、器周期的高电平时间。图3 复位电路8. ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。9. /PSEN:外部程序存储器的选通信号。在由外部程序存储器
10、取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。10. /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。11. XTAL1:反向振荡放大器的输入与部时钟工作电路的输入。12. XTAL2:来自反向振荡器的输出。图4 时钟源驱动电路振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片振荡器
11、。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.2 时钟电路工作原理与原理图电路特点 :这里介绍的电子钟,电路可称得上极简,它仅使用单片很少引脚完成电子钟的全部功能。一片40引脚的单片机AT89C51为电子钟主体,其显示笔画数据从P0口分时输出,P1口则输出对应的3位选通信号.由于LED数码管点亮时耗电较大,故使用89C51单片机来完成 。本电子钟程序设计时只使用了一个定时数T0,其它的中断全部关断,定时器工作在两个8位自动加载初始值状态.这是保证走
12、时精确稳定的重要方法.很多书本教材上都让大家用定时器中断来执行动态显示程序和按键扫描程序,我自己认为这是一种很不好的方法(但是这种方法是初学者必须掌握的基础),除了浪费硬件资源以外,还会增加程序复杂性,还会影响其它程序运行。系统框图:图5 系统框图校时定时电路整点报时显示电路实时控制单片机一、 电子时钟的技术指标显示围:时间采用12/24小时制显示格式:时间按时分秒排列,显示如00点01分22秒显示为000122显示位数:8位8段LED数码管作正常、调时和节电显示时钟误差:24小时误差35秒二、 硬件电路的选择1、单片机的选择 选用AT89C51单片机,配备11.0592MHz晶振,复位电路采
13、用上电复位。2、显示电路选择 采用软件译码动态显示。3、电源选择 采用直流5V电源供电。电路图如下:图6 时钟电路原理图2.3时钟电路的显示单元动态显示技术:在多位LED显示时,由一个8位口控制,由另一个端口进行显示位的控制。但是,由于段选是公用的,要让各位数码管显示不同的字符,就必须采用扫描方式,即动态扫描显示方式。首先从段选线上送出字段码,再控制位选线,字符就显示在指定位置上,持续15ms时间,然后关闭所有显示;接下来又送出新的字段码,按照上述过程又显示在新的位置上,直到每一位数码管都扫描完为止,即为一个扫描周期。由于人的视觉停留效应,因此当扫描周期小到一定程度时,人就感觉不出字符的移动或
14、闪烁,觉得每位数码管到一直在显示,达到一种稳定的视觉效果。动态扫描显示的扫描方式有程序控制和定时中断扫描两种。程序控制扫描方式要占用许多CPU时间,在计算机的任务较重时,难以得到好的效果,所以在实际中常采用定时中断扫描方式,这种方式是每隔一定时间(如1ms)显示一位数码管,假设有8位数码管,显示扫描周期为2ms,显示效果十分良好。本次设计采用这种方法。图7 显示电路主要采用595来驱动,74HC595的管教如下:图8 595管脚图【1】74595的数据端:1. Q0Q7: 八位并行输出端,可以直接控制数码管的8个段。2. Q7: 级联输出端。我将它接下一个595的SI端。3. SI: 串行数据
15、输入端。【2】74595的控制端说明:1. /SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。2. SCK(11脚):上升沿时数据寄存器的数据移位。QA-QB-QC-.-QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)3. RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位完毕后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。4. /G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧,用一个引脚控制它
16、,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。2.4 时钟电路的消除震荡设计在单片机应用系统中,消除抖动有硬件和软件两种方法。硬件去抖动方法主要有利用R-S触发器和滤波器电路,,由于按键消除抖动时,按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动过程,所以键闭合与断开会产生如附图所示的电压波形,抖动时间一般在510ms。这个抖动对判断键是否按下或释放有较大影响,因此必需消除键的抖动,只有这样,才能可靠地判断键的状态。软件去抖动通常是程序检测到键被按下时,延时10ms后再检测键是否仍然闭合,若是则确认是一次真正的闭合,否则就忽略
17、次此按键。本次设计时采用的软件消抖程序。2.5 时钟电路的误差分析与功耗【1】主要误差来源与补偿 :1、硬件电路在线路手工焊接时可能存在虚焊,或者有接触不良的情况,以与外界环境的影响,通过使用印刷电路板机器焊接,可以减少硬件误差影响。2、采用11.0592MHz晶振计算定时计数初值时存在小数舍入误差公式: ,定时器/计数器采用工作方式1,定时器T0、T1溢出周期为50ms,计算得到N=19456=4C00H,TH0=4CH,TL0=00H.若仍采用理论上的12MHz计算初值,则有:N1=3CB0H,那么用11.0592MHz,N1不变,益出周期约为54.25ms,每次溢出比实际的要慢4.3ms
18、,那么一秒钟要慢85ms,从而影响24h比实际的要慢122min。修正后误差处理通过软件实现,最终的时钟误差测得值3-5s。功耗问题:【2】许多实时时钟都采用电池供电,典型应用是利用一块小的锂电池在主电源掉电时直接驱动振荡器和时钟电路。为有效延长电池的使用寿命,振荡器必需消耗尽可能少的能量。为了保证这一点,应谨慎考虑振荡器的设计。典型的高频振荡电路ESR较低,但设计中一般会留出5倍、甚至10倍的ESR裕量,而低频晶振则具有较高的ESR。对于一个RTC振荡器,或许留出2倍的负阻裕量即可,振荡器的负阻裕量越小、耗电越低,但是,这种电路对寄生参数、噪声非常敏感。此外,振荡电路的负载电容对功耗也有一定
19、影响,虽然125pF部负载的RTC的耗电要比6pF负载的RTC大,但是,它通常具有更高的抗干扰能力。在有些应用中(如VCR),时钟和日期信息在系统掉电时将会丢失,而在大多数应用中要求系统主电源断电时仍保持时钟和日期有效。为保持时钟振荡器持续运转,可采用主辅电池结构或大电容配合主电源为时钟电路供电,这样,RTC芯片部还必须提供两组电源的切换电路。如果用电池(如Li电池)作为备份电源,RTC设计还应该注重低功耗指标,以使其在电池供电时具有尽可能低的功耗。电源切换控制电路通常由主电源供电,需要时可切换到电池供电,并将RTC置为低功耗模式,电池供电时,可禁止微处理器与RTC之间的通信(通常被称为写保护
20、),以使电池电流降至最小,同时避免数据 被破坏。在采用电池为电路系统供电时,时钟电路耗电最大的部件是振荡器,对于那些嵌入了晶振和电池的时钟模块(如DS12C887),由于振荡器在出厂时处于禁止状态,因此电池的损耗电流主要是电池的自放电,室温下,电池自放电每年的消耗能量大约占电池容量的05。有些时间保持NVRAM模块利用时钟来控制IC和SRAM,出厂时,振荡器处于禁止状态、SRAM与电池断开,只有模块在主电源供电并第一次与时钟电路断开时,电池才与SRAM接通。这一功能常被称作电池保鲜。Dallas Semiconductor的绝大多数RTC都提供有一个电池输入引脚和一个部反向充电保护电路。由于L
21、i电池的额定温度是4085,因此,使用时应确保环境温度不要超出85。图9 晶振与温度关系3 以AT89C51单片机为核心的时钟电路的程序设计3.1主程序设计与系统主流程图初始化LED主程序中断初始化时间显示在LED上打开定时器主程序 :设计中采用定时器T0中断完成,其余状态循环调用显示子程序。系统主流程图如下图:图10 主程序流程图3.2 时钟电路的时钟和闹铃程序设计与流程图 时钟采用11.0256MHZ的脉冲控制, 闹铃采用整点报时功能。开定时器开始初始化时钟显示1S定时器计数判断是否达到整点报时图11 时钟闹铃程序流程图3.3 时钟电路的显示程序设计与流程图显示子程序:数码管显示的数据存放
22、在存单元70H-75H中,其中70H71H存放秒数据,72H73H存放分数据,74H75H存放时数据,每一地址单元均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出70H75H某一地址中的数据,然后查的对应的显示段码从P1口输出。P3口将对应的数码管选中,就是显示该地址单元的数据值,每个LED数码管亮1MS时间再逐位循环。给595传送位码进入中断读取存储区内数据判断8位数据是否传送完毕给595传送断码开显示返回中断图12 显示程序流程图3.4 时钟电路的键盘程序设计与流程图P0口输出段码数据,P1.0-P1.2口作扫描输
23、出,P0.1P0.4口接按钮开关S1,S2,S3,S4,S5,rest 接S6复位按键。P0.0控制秒的调整,每按一次加1秒;P0.1控制分的调整,每按一次加1分;P0.2控制时的调整,每按一次加1个小时。判断键盘序号进入中断扫描键盘调节分钟执行相关按键程序调节小时返回中断12/24小时切换调节星期辅助功能标识图13 键盘程序流程图4 Keil 与Proteus软件的联调仿真4.1 Keil Software与Proteus 简介在这里我们对KEIL和PROTEUS简单介绍下:1 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言
24、在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能表达高级语言的优势。Keil C51单片机软件开发系统的整体结构 :C51工具包的整体结构中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个
25、开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51与A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。2 Proteus软件是来自英国Labcenter electronics公司的EDA工具软件。Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图
26、、PCB自动或人工布线与电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示与输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,您不需要别的,Proteus为您建立了完备的电子设计开发环境!尤其重要的是Proteus Lite可以完全免费,也可以花微不足道的费用注册达到更好的效果;功能最强的Proteus专业版也非常便宜,人人用得起,对高校还有更多优惠。 Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以与自动布线来实现一个完整的电子设计系统
27、。此系统受益于15年来的持续开发,被电子世界在其对PCB设计系统的比较文章中评为最好产品“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。其功能模块:个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真; ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软
28、件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。4.2 时钟电路的仿真图如下用proteus仿真的电路图14 时钟仿真电路在keil编写的时钟程序:图15 时钟仿真程序5 完毕语本次设计采用单片机作为核心控制器,实现具有定时、校时功能的数字钟。随着人们生活水平的提高,人们对数字钟的要求越来越高,有单一的计时功能到发展到现在有温度检测、湿度检测等多功能数字钟。这些多功能数字钟多用在工业里作为检测元件,因此需要能够在恶劣的环境下工作。利用单片机作为数字钟的控制核心可以做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减少因元器件精度不够引起的误差。设计中了解
29、到数字钟的迅猛发展,它已经普遍应用到人们日常生产和生活之中了。数字钟有很强的发展空间,因此我们有理由相信将来数字钟会与我们的生产和生活更加紧密相连。参考文献1汪德彪.MCS-51单片机原理与接口技术M.:电子工业,2003.8.2丁元杰.单片微机原理与应用M.:机械工业,2005.1.3聂毅.单片机定时器中断时间误差的分析与补偿J. 微计算机信息,2002.18(4):3738.4楼然苗,光飞.51系列单片机设计实例M.:航空航天大学,2003.3.5谢自美.电子线路设计、实验、测试 M.:华中理工大学,2000.6何书森,何华斌.实用数字电路原理与设计速成M.:科学技术,2000.6.7白驹
30、衍.单片计算机与应用M.:电子工业, 1999.2.8谭浩强 .C语言程序设计教程M .:清化大学出版,2000.1.9周润景,丽娜,印群.Keil 与Proteus联调教程M.:机械工业,2007.9.1.10付家才.单片机控制工程实践技术M.:化学工业,2004.11育才,王荣兴等.新型AT89S52系列单片机与其应用M.:清华大学,2005.12朱定华.单片机原理与接口技术实验M.:北方交通大学,2002.13汉才.单片机原理与其接口技术(第2版)M.:清华大学,2003.14蒋延彪.单片机原理与应用(MCS-51)M.:大学,2003.15Yang. Y., Yi. J., Woo,
31、Y.Y. Optimum design for linearity and efficiency of microwave Doherty amplifier using a new load matching technique, Microw. J., 2001, 44, (12), pp. 2036.16R. Dye, “Visual Object-Orientated Programming,” Dr. Dobbs Macintosh Journal J, Sept. 1st ( 1991).17Intel Corporation.MCS-51 Microcontroller fami
32、ly uers manualM.1994.附 录A:以单片机为系统的总体设计方案开始确定任务、功能和技术指标选择机型,软硬件功能划分硬件逻辑框图设计选择器件、完成逻辑设计确定算法,程序流程设计软件结构设计编写程序程序编写部分软件功能调试硬件仿真调试软件联调仿真调试排除硬件错误完善软件功能系统设计完成图16系统设计总流程图B: 时钟电路的时钟程序void WR_595(unsigned char data num2 ) unsigned char data count1; for(count1=0;count1=7;count1+) if(num2&0x80)=0x80) /最高位为1,则向SD
33、ATA_595发送1 SDATA_595=1; /发出数据的最高位else SDATA_595=0; num2=1; /右移位 SCLK_595=0; /产生上生沿 _nop_(); _nop_(); SCLK_595=1; void Out_595(void) RCK_595=0; _nop_(); _nop_(); RCK_595=1; /*上升沿锁存数据*/ /*void Led_Init(void) WR_595(0xff); WR_595(0xff); Out_595(); */C: 时钟电路的显示程序/*-07.6.30共阳数码管接法见资料本,暂为整理添加-*/ #include
34、#include / 数码管驱动相关接口 sbit SDATA_595 = P10 ; /*串行数据输入*/ sbit SCLK_595 = P11; /*移位时钟脉冲*/ sbit RCK_595 = P12; /*输出锁存器控制脉冲*/unsigned char code LED_Tab9=0xFF, /灭灯 0xfd,0xBF,0xfb,0x7f,0xF7,0xef,0xfe,0xdf; /从低到高指示1-8级/共阴数码管段码表,连线如上所注释 unsigned char code Duan_Tab11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x
35、7f,0x6f,0x00;/0-9/待显示容的位码表 unsigned char code Wei_Tab8=0x08,0x04,0x02,0x01,0x80,0x40,0x20,0x10; /*- 向74595输出一字节数据子程序-*/ void WR_595(unsigned char data num2 ) unsigned char data count1; for(count1=0;count1=7;count1+) if(num2&0x80)=0x80) /最高位为1,则向SDATA_595发送1 SDATA_595=1; /发出数据的最高位 else SDATA_595=0; n
36、um2=8)count=0;D: 时钟电路的键盘程序#include sbit minute_temper= P00 ; /*串行数据输入*/ sbit hour_temper= P01; /*移位时钟脉冲*/sbit week_temper= P02; /*输出锁存器控制脉冲*/sbit de_flog= P03; sbit key_flog_time12= P04;extern unsigned char week;extern unsigned char hour;extern unsigned char minute;extern bit flog_time12;void Scan_K
37、ey(void) static bit Pre_State_Key1=1; /按键的上一次状态 static bit Last_State_Key1=1; /按键的当前状态 static bit Pre_State_Key2=1; static bit Last_State_Key2=1; static bit Pre_State_Key3=1; static bit Last_State_Key3=1; static bit Pre_State_Key4=1; static bit Last_State_Key4=1; Pre_State_Key1=Last_State_Key1; /保存上
38、次按键状态 Last_State_Key1=minute_temper; /读入当前按键状态 Pre_State_Key2=Last_State_Key2; Last_State_Key2=hour_temper; Pre_State_Key3=Last_State_Key3; Last_State_Key3=week_temper; Pre_State_Key4=Last_State_Key4; Last_State_Key4=key_flog_time12; if(Pre_State_Key1=1&Last_State_Key1=0) if(de_flog=0) minute-; if(minute65)minute=59; else minute+; if(minute59)minute=0; if(Pre_State_Key2=1&Last_State_Key2=0) if(de_flog=0) hour-; if(hour65)hour=23; else