电子时钟(4个按键)

合集下载

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。

本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。

51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。

本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。

本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。

接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。

将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。

软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。

本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。

通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。

2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。

它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。

51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。

51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。

其存储器分为程序存储器(ROM)和数据存储器(RAM)。

程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。

51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。

51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

利用51单片机制作的电子时钟

利用51单片机制作的电子时钟

利用51单片机制作的电子时钟最近研究起来了单片机,用的是国产STC98C52 芯片。

STC89C52 是STC公司生产的一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编程Flash 存储器。

STC89C52 使用经典的MCS-51 内核,但做了很多的改进使得芯片具有传统51 单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

买了很长时间了可是一直在那里放着,今天重新拿出来写了一段电子时钟的C++程序,利用充电宝供电,当作电子时钟挺不错的。

功能:4 个七段数码管作为时钟显示的主体两个显示小时,两个显示分钟,8 个LED 灯作为秒数的闪烁,4 个独立按键分别为hour+1,hour+10,minute+1,minute+10。

查询LED 电路,接入端为P1到P1。

数码管采用了驱动芯片,接入端为P2到P2。

按键的接入端如图所示。

有了各种电路的接入端,我们利用keil 进行编程。

/* * Copyright (c) 2015,烟台大学计算机学院* All right reserved. * 作者:邵帅* 文件:temp.c* 完成时间:2015 年05 月29 日*/ #include #define uchar unsigned char sbit P2_0 = P2;sbit P2_1 = P2;sb it P2_2 = P2 ;sbit P2_3 = P2;sb it key1=P3 ;//按键sbit key2=P3;sb it key3=P3;sb it key4=P3 ;static unsigned char second,minute,hour;unsigned int tcount;unsigned char m;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay(uchar。

宜家电子钟说明书

宜家电子钟说明书

宜家电子钟说明书宜家电子钟有设定日期、时间、闹铃和背景灯光等功能。

除了闹铃功能外,你还能开启一个选项功能,设定闹钟每小时发出一个信号(钟乐)和催醒(snooze)的功能,使你能慢慢地醒来。

功能键请使用SET和MODE键,以设定闹钟的各种功能。

请看下面更为详尽的说明。

请使用LIGHT键以打开背景灯光。

怎样设定日期和时间1、按SET键四次,使MONTH显出。

使用MODE键以设定正确的月份。

2、再按一次SET键,使DAY显出。

使用MODE键以设定正确的日期。

3、再按一次SET键,使HOURS显出。

使用MODE键以设定正确的小时。

请注意A/P或H是在显示板的右边显出。

A=AM(上午)。

P=PM (下午)。

H=24小时时钟。

(请按MODE键以选择需要的格式。

)4、再按SET键,使MINUTES显出。

使用MODE键以设定正确的分钟数字。

5、如要储存已设定的数据,请按SET键,再按MODE键。

怎样查看现定的数据按MODE键可查看现定的数据。

按一次以显示现定的闹铃时间。

按两次以显示现定的日期。

按三次以显示现定的秒数(按SET键,把秒数设定在零)。

按四次以回到现在的时间。

闹铃和每小时的信号设定闹铃:1、按一次SET键,再按MODE键,即可启动闹铃功能。

再按一次SET键,用MODE键以设定闹铃信号的“小时”。

2、再次按SET键,并使用MODE键以设定闹铃信号的“分钟”。

3、按SET键以储存这些设定数据。

关闭闹铃信号1、闹铃响时,如要关掉它的信号,请按SET键。

你也可以选择将闹铃信号暂时关掉,可用MODE键。

如果你使用所谓的“催醒”(snooze)功能,闹铃则会每隔5分钟响一次,直到你按SET键将其完全关掉为止。

激活/关闭闹铃功能和整点提醒1、请按一次SET键,再按MODE键,以开启或关闭闹铃和每小时的信号功能;ALARMON,CHIMEON,ALARMOFF,CHIMEOFF。

2、再按三次SET键以回到现在的时间。

四位时钟设计方案

四位时钟设计方案

目录一.前言二.设计任务1.设计题目:4位数字时钟设计2.技术指标及设计要求3.给定条件及器件三.设计方案与实现1.硬件设计2.相关器件介绍3.数码管介绍4.数码管的驱动方式5.电路设计电路原理图如下,采用AT89C2051单片机制作,使用3~6V直流电源。

S1为复位按键,S2调时,S3调分;注意:1安装前检查元件,2元件安装极性和引脚方向。

此外J1 和J2是两根“飞线”,请先用电阻剪角焊接,然后焊接数码管。

四、总结五、附录元件清单六、参考文献一、前言当前,电子技术已经广泛应用于社会生活中,电子技术俨然成为了我们日常生活的必备技术,无论计算机、电视机、洗衣机还是手机、MP3播放器都不能缺少电子技术的支持。

电子技术综合课程设计是集电路分析、模拟电子技术、数字电子技术以及电路实验、模拟电子技术实验、数字电子技术实验等课程之后的一门理论与实践相结合的综合设计性课程。

作为电子信息领域的一员,无疑电子技术对我们的专业课学习至关重要,通过对《数字电子技术基础》、《模拟电子技术基础》等课程的学习,经过不懈的探讨努力,最终完成设计任务制作。

本次课程设计我们将设计一个四位数字时钟。

本系统采用以A T89C2051为主控芯片,实现电子时钟的设计并考虑节约系统的硬件,而且达到时钟功能为24小时的设计方式,显示时、分;具有快速校准时、分的功能,实现时间的调整,然后输出四位的显示器显示出来。

二、设计任务1、题目:4位数字时钟的设计2、技术指标及设计要求(1)显示小时、分钟时间(2)实现秒的量化显示(3)具有调整时间功能(4)手动复位显示功能3、综合条件及器件(1)单片机及相关外围器件(2)直流稳压电源4V(3)万用电路板(4)4联共阳数码管4、器件介绍1)数码管介绍数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

基于C51单片机的数字时钟课程设计(C语言带闹钟)

基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

电子时钟使用说明

电子时钟使用说明

电子时钟使用说明书目录1电子时钟 (1)1.1电子时钟简介 (1)1.2 电子时钟的基本特点 (1)2作品构成 (1)3核心器件 (3)3.1 单片机(STC12C5A60S2) (3)3.2 时钟芯片(DS1302) (4)3.3液晶屏模块(LCD12864) (5)4 作品功能及操作说明 (6)4.1 功能介绍 (6)4.2操作说明 (7)5注意事项 (8)1 电子时钟1.1 电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时清零。

从而达到计时的功能,是人民日常生活补课缺少的工具。

1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

2 作品构成品名型号/规格数量(PCS)液晶屏模块LCD128641单片机STC12C5A60S21时钟芯片DS13021温度芯片DS18B201石英晶体12.00MHz1石英晶体32.768KHz1电容0.1μF2电容30pF2电容100μF 1 电阻1kΩ1扬声器无源1三极管85501微动开关12×12×6mm4钮扣电池3V锂电池1光敏电阻0~20KΩ1电源适配器5V 500mA13 核心器件3.1 单片机(STC12C5A60S2)STC12C5A60S2系列单片机管脚图该作品采用STC12C5A60S2单片机驱动程序,该单片机共包含40个可用引脚,完全可以应付时钟电路在接口电路上的要求。

[整理]LED 电子钟 显示时间.

[整理]LED 电子钟 显示时间.

《单片机技术》课程设计任务1、本课题任务如下:设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。

2、本课题要求如下:(1)在AT89S51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。

(2)、利用六个LED显示当前时间。

(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1。

方案四: 独立式按键,LED动态显示。

该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。

动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。

本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:时钟电路,复位电路,键盘以及显示电路。

时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。

本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。

muji电子钟四个按键说明书

muji电子钟四个按键说明书

muji电子钟四个按键说明书
一、电子钟功能介绍
可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。

(1)、“P.”状态,依靠上电或者复位键进入,在此状态下,按B、C、D键均无效,按A键有效,进入运行状态;
(2)、运行状态,按奇数次A键进入,在此状态下,按B、C、D键均无效,只有按A键有效,按下A键后,退出运行状态,进入调整状态;
(3)、调整状态,按偶数次A键进入,在此状态下,按B、C、D键均有效,如按下A键,则推出调整状态,进入运行状态;B、C、D分别为调时、分、秒,分别使之加1;调整后,按A键退出调整状态。

二、实现时钟计时的基本方法
(1)计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒。

假设使用T/CO,方式1,50ms定时,fosc=12MHz。

则初值X满足us us MHz X 5000012*12
1
*
)2(16=-H CB X***15536→→=
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);(3)从秒到分和从分到时是通过累计加和数值比较实现。

三、电子钟的时间显示
电子钟的时钟时间在六位数码管上显示,因此,在内部RAM中设置显示缓冲区共8个单元。

四、电子钟的启、停及时间调整
电子钟设置4个按键,通过程序控制来完成电子钟的启、停及时间调整。

A键控制电子钟的启、停;
B键调整时;
B键调整分;
B键调整秒。

数电实验 数字钟

数电实验  数字钟

数字钟简介:这是一个以EPM7128SLC84-15为软件载体,数码管作显示器件,蜂鸣器作提示器件,拥有4个按键的电子钟。

它能够正常计时,支持12小时和24小时两种计时方式,同时允许用户手动调时和设置整点报时。

在正常计时状态下,用户可以选择12或24小时的计时方式,也可以设置或取消整点报时的功能(蜂鸣器作整点报时的提示设备)。

同时,数码管会有相应的显示来指示当前电子钟的设置。

当用户通过按键进入校时状态时,闪烁的一位数便是当前调节的数;用户可以通过按键选择要调的位,并对选择位的数字进行修改。

(具体按键的功能说明请查阅软件编写部分三、2 )该电子钟的软件部分用VHDL编写,编译环境采用的是MAX+plus II.主要分为分频、按键防抖动、模式控制、计时校时、显示输出五个模块。

(具体设计见软件编写部分四)由于时间有限、作者才疏,纰漏在所难免,敬请老师指正。

关键字:显示模块的刷新率:=显示模块的输入时钟频率/数码管的个数;防抖动模块的基准频率:按键操作会产生上升沿,只有当两个上升沿发生在不同的基准周期时才被看作是两次按键;正常计时的基准频率:1Hz时钟状态:即mode,分为正常计时(mode=0)和校时(mode=1)两个状态;12/24 hour:即tm,tm=1为12小时制;tm=0为24小时制;选择位:在校时操作时,用户操作的当前位,可以是时分秒的低位或高位,从硬件显示上看,就是在校时状态下,闪烁的那一位。

硬件支持部分软件设计部分一、设计要求设计并制作一台能显示时、分、秒的数字钟。

1、可手动校时,能分别进行时、分的校正;2、12小时(含上下午显示)、24小时计时制可手动选择;3、选做:整点报时。

4、选做:闹铃功能,当计时计到预定时间时,蜂鸣器发出闹铃信号,闹铃时间为1秒,可提前终止闹铃。

5、选做:自拟其它功能。

二、程序编写方案比较与选择方案一:将所有功能设计好,程序结构制定完备后,将代码写入一个或几个文件里。

单片机原理及应用课程设计题目

单片机原理及应用课程设计题目

一、设计选题(三人一组,每组从以下题目中任选一题,一个题目最多只能由二组选):1、智能电子钟(LCD显示)的设计设计要求:制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、日、月、年、星期。

(2) 闰年自动判别。

(3) 时间、年、月、日、星期交替显示。

(5) 自定任意时刻自动开/关屏。

(6) 计时精度:误差≤1秒/月(具有微调设置)。

2、电子时钟(LCD显示)的设计设计要求在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。

显示格式为“时时:分分:秒秒”。

用4个功能键操作来设置当前时间。

功能键K1~K4功能如下。

●K1—进入设置现在的时间。

●K2—设置小时。

●K3—设置分钟。

●K4—确认完成设置。

作品用一个LED指示灯工作状态,闪动表示作品正在工作,LCD显示“00:00:00”,然后开始计时。

3、秒表的设计设计要求设计一个2位的LED数码显示的“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。

4、定时闹钟的设计设计要求使用字符型LCD显示器设计一个简易的定时闹钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。

定时闹钟的基本功能如下:显示格式为“时时:分分”。

由LED闪动来做秒计数表示。

一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。

作品工作后指示灯LED闪动,表示作品开始工作,LCD显示“00:00”,按下操作键K1~K4动作如下:(1) K1—设置现在的时间。

(2) K2—显示闹钟设置的时间。

(3) K3—设置闹铃的时间。

(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。

设置当前时间或闹铃时间如下。

(1) K1—时调整。

(2) K2—分调整。

(3) K3—设置完成。

(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

本项目的难点在于4个按键每个都具有两个功能,以最终实现菜单化的输入功能。

DS12C887电子时钟详细教程

DS12C887电子时钟详细教程

本人呕心沥血制作的一个基于ds12c887的电子钟的详细教程,程序已经在protues中仿真,仿真图在下方!!花了血本制作的,我花了将近一个月时间探索出来的电子钟(其间断断续续编),在这里给同学们一个好的案例,这个程序由用51,1602,ds12c887,4个按键,一个喇叭。

下面还介绍了总线的画法,以及实际中连接编程时的重要注意事项,附上了时序图,对程序的解释很是详细,看了好的帮我顶下,谢谢大家!------------------------血顶猎鹰D7D6D5D4D3D2D1DERWRSVSSVDDVEEs2,s3可以调整闹铃时间。

仿真时有一个小bug,当按下闹铃后再按s1,再退出时得再重新按一遍闹铃才可以正常运行,估计是软件的原因。

我用的是7.7的,所以有这个芯片,这是我从论坛上找的版本低的解决办法,大家可以看下仿真软件如果版本低可以这样将库文件和dll文件复制到7.5SP3的library和models,仿真时,每次一定要给寄存器初始化,否则时钟不能正常运行.正式硬件运行时仅初次化时使用一下,将以下内容屏蔽后重新编译,再下载程序到89C51.//初始化DS12C887工作方式write_ds(0x0A,0x20);//打开振荡器write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式,开启闹铃中断set_time();//设置上电默认时间,调试的时候用对这三个进行屏蔽,还有把set time()这个子函数屏蔽掉仿真软件中bus总线画法如下,拖出总线,点lbl给总线标上AD[0..7],再标细线时有没发现框里多了这些标号相同的电气连接相同,好了,去连吧。

下面是程序,主要参照郭天祥那本书的,关键地方加了很详细的注释#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit lcdrs=P2^4;sbit lcden=P2^6;sbit s1=P3^0; //功能键sbit s2=P3^1; //增大键sbit s3=P3^2; //减小键sbit s4=P3^6; //闹铃查看键sbit beep=P2^3;//蜂鸣器sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3; //中断bit flag1,flag_ri;//定义标志位flag1设置闹铃uchar count,s1num,flag,t0_num;char miao,shi,fen,year,month,day,week,amiao,afen,ashi;char code table[]=" 20 - - "; // 20 - -uchar code table1[]=" : : "; // : :void write_ds(uchar,uchar); uchar read_ds(uchar);void set_time();void read_alarm();void set_alarm(uchar,uchar,uchar);void delayms(uint z) //延时毫秒的程序{uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);}void di(){beep=0;delayms(100);beep=1;}void write_cmd(uchar cmd){lcden=0;lcdrs=0;P0=cmd;_nop_();lcden=1;delayms(1);lcden=0;_nop_();}void write_dat(uchar dat){lcden=0;lcdrs=1;P0=dat;_nop_();lcden=1;delayms(1);lcden=0;_nop_();}void lcdint(){lcden=0;write_cmd(0x38); // 显示模式设置write_cmd(0x0c); //开显示,不显示光标,不闪烁write_cmd(0x06); //写一个字符后地址加1,屏幕不移write_cmd(0x01); //清屏delayms(1);}void init(){uchar num;EA=1;//开总中断EX1=1;//开外部中断1IT1=1;//外部中断下降沿触发flag1=0; t0_num=0;s1num=0;week=1;write_ds(0x0A,0x20);//打开振荡器write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式,开启闹铃中断set_time();//设置上电默认时间,调试的时候用lcdint();write_cmd(0x80);for(num=0;num<15;num++){write_dat(table[num]);}write_cmd(0xc0);for(num=0;num<11;num++){write_dat(table1[num]);}}void write_sfm(uchar add,char date) //写时间,2位一起写{char shi,ge;shi=date/10;ge=date%10;write_cmd(0xc0+add);write_dat(0x30+shi);write_dat(0x30+ge);}void write_nyr(uchar add,char date)//年月日{char shi,ge;shi=date/10;ge=date%10;write_cmd(0x80+add);write_dat(0x30+shi);write_dat(0x30+ge);}void write_week(char we)//星期{write_cmd(0x80+12);switch(we){case 1: write_dat('M');write_dat('O');write_dat('N');break;case 2: write_dat('T');write_dat('U');write_dat('E');break;case 3: write_dat('W');write_dat('E');write_dat('D');break;case 4: write_dat('T');write_dat('H');write_dat('U');break;case 5: write_dat('F');write_dat('R');write_dat('I');break;case 6: write_dat('S');write_dat('A');write_dat('T');break;case 7: write_dat('S');write_dat('U');write_dat('N');break;}}void keyscan(){if(flag_ri==1){if((s1==0)||(s2==0)||(s3==0)||(s4==0))//按任意键取消闹钟报警{delayms(5);if((s1==0)||(s2==0)||(s3==0)||(s4==0)){while(!(s1&&s2&&s3&&s4));di();flag_ri=0;}}}if(s1==0) //如果功能按键1按下{delayms(5); //去抖动if(s1==0){while(!s1); //等待松手s1num++; //记下次数di(); //蜂鸣器响if(flag1==1) //设置闹铃为1时才对s1num调整,只调秒,分,时{if(s1num>3){s1num=1;}}flag=1; //在调整时间时标志位flag为1,不进行正常操作switch(s1num){case 1:write_cmd(0xc0+10); write_cmd(0x0f); break; //按一下秒钟指针显示闪烁case 2:write_cmd(0xc0+7); break;case 3:write_cmd(0xc0+4); break;case 4:write_cmd(0x80+12); break;case 5:write_cmd(0x80+9); break;case 6:write_cmd(0x80+6); break;case 7:write_cmd(0x80+3); break;default: //用default可以解决s1num跑飞s1num=0;write_cmd(0x0c); //按了8次关闪烁,flag=0,退出调整,显示时间flag=0;write_ds(0,miao); //将调整后的时间写入ds12c887write_ds(2,fen);write_ds(4,shi);write_ds(6,week);write_ds(7,day);write_ds(8,month);write_ds(9,year);break;}}}if(s1num!=0) //S1有按下过,检测S2,S3{if(s2==0) //如果按键2按下执行加{delayms(5);if(s2==0){while(!s2);di();switch(s1num){case 1:miao++;if(miao>59){miao=0;}write_sfm(10,miao);write_cmd(0x80+0x40+10);break;case 2:fen++;if(fen>59){fen=0;}write_sfm(7,fen);write_cmd(0x80+0x40+7);break;case 3:shi++;if(shi>23){shi=0;}write_sfm(4,shi);write_cmd(0x80+0x40+4);break;case 4:week++;if(week>7){week=1;}write_week(week);write_cmd(0x80+12);break;case 5:day++;if(day>31){day=1;}write_nyr(9,day);write_cmd(0x80+9);break;case 6:month++;if(month>12){month=1;}write_nyr(6,month);write_cmd(0x80+6);break;case 7:year++;if(year>99){year=0;}write_nyr(3,year);write_cmd(0x80+3);break;}}}if(s3==0){delayms(5);if(s3==0){while(!s3);di();switch(s1num){case 1:miao--;if(miao<0){miao=59;}write_sfm(10,miao);write_cmd(0x80+0x40+10);break;case 2:fen--;if(fen<0){fen=59;}write_sfm(7,fen);write_cmd(0x80+0x40+7);break;case 3:shi--;if(shi<0){shi=23;}write_sfm(4,shi);write_cmd(0x80+0x40+4);break;case 4:week--;if(week<1){week=7;}write_week(week);write_cmd(0x80+12);break;case 5:day--;if(day<1){day=31;}write_nyr(9,day);write_cmd(0x80+9);break;case 6:month--;if(month<1){month=12;}write_nyr(6,month);write_cmd(0x80+6);break;case 7:year--;if(year<0){year=99;}write_nyr(3,year);write_cmd(0x80+3);break;}}}}if(s4==0){delayms(5);if(s4==0){while(!s4);di(); flag1=~flag1; //闹铃调好后再按一次键返回if(flag1==0) //退出闹钟设置保存数值{flag=0; //启动时间显示write_cmd(0x80+0x40);write_dat(' ');write_dat(' ');write_cmd(0x0c); //清屏下,否则光标乱跳(闹铃调时间时)write_ds(1,miao);write_ds(3,fen);write_ds(5,shi);}else //设置闹钟{read_alarm(); //读原始数据miao=amiao;fen=afen;shi=ashi;write_cmd(0xc0);write_dat('R');write_dat('i');write_cmd(0x80+0x40);write_sfm(4,ashi);write_sfm(7,afen);write_sfm(10,amiao);}}}}void write_ds(uchar add,uchar date)//写12c887函数{dscs=0;dsas=1;dsds=1;dsrw=1;P0=add; //写地址dsas=0;dsrw=0;P0=date; //写数据dsrw=1;dsas=1;dscs=1;}uchar read_ds(uchar add) //读12c887{uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;dsas=0;dsds=0;P0=0xff;ds_date=P0;dsds=1;dsas=1;dscs=1;return ds_date;}void set_time() //初始化{write_ds(0,0); //秒write_ds(1,10); //秒闹铃write_ds(2,34); //分钟write_ds(3,34); //分钟闹铃write_ds(4,15); //小时write_ds(5,15); //小时闹铃write_ds(6,5); //星期write_ds(7,20); //日write_ds(8,5); //月write_ds(9,11); //年}void read_alarm(){amiao=read_ds(1);afen=read_ds(3);ashi=read_ds(5);}void main(){init();while(1){keyscan(); //键盘不断扫描if(flag_ri==1) //如果闹铃时间到{di();delayms(100);di();delayms(500);}if(flag==0&&flag1==0){keyscan();year=read_ds(9);month=read_ds(8);day=read_ds(7);week=read_ds(6);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);write_week(week);write_nyr(3,year);write_nyr(6,month);write_nyr(9,day);}}}void exter()interrupt 2 //闹铃外部中断1{uchar c; //闹铃时间到flag_ri=1;c=read_ds(0x0c); //读C寄存器表示响应中断}下面是管脚和时序图寄存器的定义如下我爱帮帮,啵!嘻嘻。

电子时钟原理

电子时钟原理

目录1.前言 (1)2单片机及其发展史 (1)2.1 单片机的发展史 (2)2.1.1 . 4位单片机 (2)2.1.2 . 8位单片机 (2)2.1.3 . 16位单片机 (2)2.1.4 . 32位单片机 (2)2.1.5 . 64位单片机 (3)3.方案设定 (3)3.1 电子时钟计时方案 (3)3.2 电子时钟键盘/显示方案 (3)3.3 电子时钟原理方框图,原理图 (4)3.3.1 电子时钟原理方框图 (4)3.3.2 电子时钟电路原理图 (4)4电子时钟整机电路原理 (5)5.电子时钟单元电路工作原理介绍 (6)5.1 源电路工作原理 (6)5.2 时钟电路工作原理 (6)5.3 电子时钟复位电路工作原理 (7)5.4 键盘工作原理 (7)5.5 显示器工作原理 (7)5.6 AT89S51芯片介绍 (10)5.7 S8550PNP三极管 (13)5.8 四位一体数码管 (13)6片机硬件资源的分配 (14)7程序流程图 (16)8电子时钟程序清单 (22)9 电子时钟使用说明 (30).总结 (31)参考文献 (31)致谢 (32)1.前言我们每一个人都有非常密切的关系,每个人都受到时间的影响。

为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。

钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表. 即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已。

国内外发展:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机具有体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。

随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。

课程设计电子时钟设计

课程设计电子时钟设计

微机原理及其接口技术课程设计题目: 8086电子时钟设计前言课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识解决实际工程设计和应用问题的能力的重要教学环节,它具有动乎、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。

《微机接口技术》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,学生就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。

所以通过有针对性的课程设计,使学生学会系统地综合运用所学的理论知识,提高学生在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。

时钟就是一种对时间进行累计的工具,即计时。

计时的本质就是计数,只不过这里的“数”的单位是时间单位,如果把一小片一小片计时单位累计起来,就可获得一段时间。

因此,使用计数器对时钟脉冲进行计数,就是时钟实现的基本原理;再用LED数码管显示出来,并设计出几个按键用于对时钟进行调整,这样,一个完整的时钟就设计完成了。

本次课程设计要求利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该键的时候,时钟从当前的设定值(可以在缓冲区中设置)开始走时。

同时,再定义三个按键,分别对时、分、秒进行校正。

目录目录---------------------------------------------------- 21、电子时钟功能介绍------------------------------------- 32、电子时钟系统总体方案设计----------------------------- 42.1方案比较------------------------------------------ 42.2方案选择------------------------------------------ 43、电子时钟的工作原理----------------------------------- 53.1实现时钟计时的基本方法---------------------------- 53.2电子钟的时间显示---------------------------------- 54、硬件设计---------------------------------------------- 64.1硬件设计电路图------------------------------------ 64.1.1主电路模块----------------------------------- 64.1.2 LED显示模块--------------------------------- 64.1.3按键模块------------------------------------- 64.1.4总体电路图----------------------------------- 64.2硬件设计所用芯片介绍------------------------------ 64.2.2 8253芯片的内部结构及引脚-------------------- 84.2.3 8255A芯片的内部结构及引脚------------------- 95、软件设计--------------------------------------------- 105.1电子时钟部分程序流程框图------------------------- 105.1.1主程序流程框图--------------------------------- 105.1.2键扫子程序流程框图----------------------------- 105.1.3中断处理程序流程框图--------------------------- 105.2电子时钟总体程序--------------------------------- 106、总结与体会------------------------------------------- 10参考文献----------------------------------------------- 11附录1-------------------------------------------------- 12附录2-------------------------------------------------- 121、电子时钟功能介绍可调整运行的电子钟具有三种工作状态:"P.”状态、运行状态、调整状态。

电子时钟使用说明

电子时钟使用说明

单片机电子时钟使用说明
如图所示从左至右,按键功能分别是:【调时】,【加】,【减】
主要功能包括:时间,闹钟,整点报时,温度
查看方法:
1、查看时间:
打开电源开关,即可看到时间显示
2、查看闹钟:
时间正常运行状态下,按一次【加】键,即可看到此时闹钟的时间,默认为7:00,再按一次【加】键,切换到时间显示。

3、查看温度:
时间正常运行状态下,按一次【减】键,即可看到此时的温度值,温度是实时变化的,再按一次【减】键,切换到时间显示。

调整方法:
1、调时间:
在时间运行状态下,按下【调时】键,此时,时间暂停,同时小时位闪烁显示,此时再按【加】,【减】键可以对小时进行加减调整,再按一下【调时】键,分钟位闪烁显示,
此时再按【加】,【减】键可以对分钟进行加减调整。

2、调闹钟:
在时间运行状态下,按下【加】键,此时,显示切换到闹钟时间,再按一次【调时】键,闹钟小时位闪烁显示,此时按【加】,【减】键可对闹钟小时进行加减调整,再按一次【调时】键,此时闹钟分钟位闪烁显示,此时按【加】,【减】键可对闹钟分钟位时行加减调整。

功能开启与关闭
1、闹钟开启与关闭
按下【调时】+【加】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示闹钟开启,两声表示闹钟关闭。

注:需要先按下【调时】键,再同时按下【减】键。

2、整点报时开启与关闭
按下【调时】+【减】键,可听到蜂鸣器提示音,当蜂鸣器提示一声表示整点报时开启,两声表示闹钟关闭。

注:需要先按下【调时】键,再同时按下【减】键。

(注:默认闹钟及整点报时都为关闭,需要开启时请按以上方法操作!!!)。

51电子时钟 说明书

51电子时钟   说明书

摘要现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。

对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。

本次设计主要对电子时钟进行设计,采用AT89C51单片机来保证电子时钟的工作,并用LED数码管时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。

在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。

AbstractModern life of people more and more attention to the concept of time, can be said to be the time and money is a sign. For those who hold the person or thing is very strict in time and accurately, the time of inaccurate will bring great trouble, so as to control the display of digital clock than the clock pointer showed a big advantage. The design of the main design of the electronic clock, use AT89C51 microcontroller to ensure the electronic clock, and the LED digital tube, FENs and MIAOs, 24 SHIs timer mode, according to digital control theory to dynamic display to display, use the 12MHz crystal oscillation pulse, the timer count. In this design, the circuit has its time the function, but also can achieve the adjustment of time.目录第一章绪论................................................ 错误!未定义书签。

【毕业设计】基于AT89C51单片机的电子时钟

【毕业设计】基于AT89C51单片机的电子时钟

昆明工业职业技术学院系统软件设计内容提要单片计算机即单片微型计算机。

由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本设计主要设计了一个基于AT89C51单片机的电子时钟。

应用定时器实现秒定时,在此基础上实现时钟的计时功能,并通过数码管输出时分秒信息,并设计按键调时功能。

关键字:单片机;电子时钟;键盘控制目录1绪论单片机在多功能数字钟中的应用已是非常普遍的,人们对电子时钟的功能及工作顺序都非常熟悉。

但是却很少知道它的内部结构以及工作原理。

由单片机作为电子时钟的核心控制器,可以通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。

通过键盘可以进行校时、定时等功能。

输出设备显示器可以用液晶显示技术或数码管来显示技术。

本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89S51为核心元件同时采用LED数码管显示器动态显示“时”,“分”,“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。

1.1所做题目的意义:数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。

由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。

在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。

多功能电子钟程序(完全好使)

多功能电子钟程序(完全好使)

/*设计功能:1.时钟功能(上排数码管)每秒更新一次时钟显示,显示方式为MM.SS,其中M为分钟,S为秒。

可以通过按键调整当前时间,调整时间时需要闪烁调整位置的数值。

2.秒表功能(下排数码管)按开始按键开始走秒,按停止按键停止走秒,按清除按键秒表归零,显示方式为:SSS.U,其中S为秒,U为0.1秒。

3.闹钟功能(下排数码管)用按键设置闹钟时间,显示格式为MM.SS。

闹钟时间到达后,闪烁一个指示灯。

可以用按键设置闹钟、取消闹钟。

各个按键功能可以自行定义,每按一次任何按键,D2灯会翻转一次状态*//*硬件连接:一个有上下两个4位共阳数码管,4个按键,2个LED指示灯P2高四位控制上排数码管位选,低4位控制下排数码管位选,P0控制段选四个按键为独立按键,与P2高4位相连,与数码管复用LED0接P34,LED1接P35*//*使用方法:第一步:设定系统时间,在上排的4位数码管显示,注意系统时间设定确认后就不得修改了第二步:选择秒表模式或闹钟模式,在下排的4位数码管显示。

两种模式只能选择一种,并且不能切换。

1.设定系统时间此时按键定义:S5 移位,S6 加,S7 减,S8确认一开始上电时数字全0不闪烁,默认从第一位开始设置,按下加减进行调节,如此要更换调节位置,每按一次S5会右移一位,移到第四位再按会重新移回第一位。

设置完系统时间,按下S8确认,跳出设定环节,进入秒表和闹钟模式选择环节。

2。

秒表和闹钟模式选择此时按键定义:S5 改变模式标志,S6 S7未用,S8确认进入该模式设置完系统时间,进入秒表和闹钟模式选择环节。

此时第一位为0 。

然后按S5,第一位会在1和2之间来回切换,在显示1时按S8进入秒表模式,在显示2时按S8进入闹钟模式,2.1秒表模式此时按键定义:S5 未用,S6 开始,S7停止,S8清除2.2闹钟模式此时按键定义:S5 移位,S6 加,S7 减,S8按一次确认,等报警到了,再按S8停止报警如设定系统时间的步骤,设定好闹钟时间,按S8确认设定(S8只能按一次哦),等时间到了D1灯会不断闪烁表示报警,按S8停止报警*/#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit keysource= P1^7;sbit S5= P2^4;sbit S6= P2^5;sbit S7= P2^6;sbit S8= P2^7;sbit led0=P3^4; //每按一次任何按键,D2灯会翻转一次状态sbit led1=P3^5; //闹钟报警用的灯uint shuju_1;uint shuju_2;uint count;uint stopwatch_count;int miao;int fen;int warn_miao;int warn_fen;uint shanshuo; //1 2 3 4bit shanshuo1,shanshuo2,shanshuo3,shanshuo4;uint num_settime_cnt; //标识按键5设置时间时,按下的次数uint num_setmode_cnt; //1 or 2uint stopwatch_miao;uint stopwatch_Umiao;uint stopwatch_miao_1;uint stopwatch_Umiao_1;uint mode_flag;uint warn_flag;uint stopflag = 1; //初始时先让秒表停止uchar code shuma[] = {0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/}; // 共阳数码管void delay(uint z) // 1ms{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display_1() // 上排{uchar qian,bai,shi,ge;qian = shuju_1/1000;bai = shuju_1%1000/100;shi = shuju_1%100/10;ge = shuju_1%10;////xianshi 1////P2 |= 0xf0; //高4位全部置1P2 &= 0xef; //改变高4位,低4位不变if(shanshuo1 == 1)P0= 0xff;elseP0= shuma[qian];delay(1);////xianshi 2////P2 |= 0xf0;P2 &= 0xdf;if(shanshuo2 == 1)P0= 0xff;elseP0=shuma[bai]&0x7f; //要点亮小数点delay(1);////xianshi 3////P2 |= 0xf0;P2 &= 0xbf;if(shanshuo3 == 1)P0= 0xff;elseP0=shuma[shi];delay(1);////xianshi 4////P2 |= 0xf0;P2 &= 0x7f;if(shanshuo4 == 1)P0= 0xff;elseP0=shuma[ge];delay(1);P2 = 0xff; //解除位选}void display_2() // 下排{uchar qian,bai,shi,ge;qian = shuju_2/1000;bai = shuju_2%1000/100;shi = shuju_2%100/10;ge = shuju_2%10;////xianshi 1////P2 |= 0x0f; //低4位全部置1P2 &= 0xfe; //改变低4位,高4位不变if(shanshuo1 == 1)P0= 0xff;elseP0= shuma[qian];delay(1);////xianshi 2////P2 |= 0x0f;P2 &= 0xfd;if(shanshuo2 == 1)P0= 0xff;else if (mode_flag == 2){P0=shuma[bai]&0x7f;}else{P0=shuma[bai] ;}delay(1);////xianshi 3////P2 |= 0x0f;P2 &= 0xfb;if(shanshuo3 == 1)P0= 0xff;else if (mode_flag == 1){P0=shuma[shi]&0x7f;}else{P0=shuma[shi] ;}delay(1);////xianshi 4////P2 |= 0x0f;P2 &= 0xf7;if(shanshuo4 == 1)P0= 0xff;elseP0=shuma[ge];delay(1);P2 = 0xff; //解除位选}void check_ledflash() //判断哪一位正在设置中,让该位闪烁{switch(shanshuo) //利用shanshuo标志来判断,当前正在在哪一位设定{case 1:shanshuo1 = ~shanshuo1; //如果为第一位,则第一位闪烁,其它位不闪烁shanshuo2 =0;shanshuo3 =0;shanshuo4 =0;break;case 2:shanshuo2 = ~shanshuo2;//如果为第二位,则第一位闪烁,其它位不闪烁shanshuo1 =0;shanshuo3 =0;shanshuo4 =0;break;case 3:shanshuo3 = ~shanshuo3;//如果为第三位,则第一位闪烁,其它位不闪烁shanshuo1 =0;shanshuo2 =0;shanshuo4 =0;break;case 4:shanshuo4 = ~shanshuo4;//如果为第四位,则第一位闪烁,其它位不闪烁shanshuo1 =0;shanshuo2 =0;shanshuo3 =0;break;default:shanshuo1 =0;shanshuo2 =0;shanshuo3 =0;shanshuo4 =0;break;}}void settime()//设定系统时间,时间格式:分-分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
wela=0;
P0=0Xf3;
dula=0;
wela=1;
P0=0Xfe;
wela=0;
second=0;
minute=0;
display3(hour);
}
minute++;
if(minute==60)
minute=0;
}
}
if(key4==0)
{
delayms(5);
if(key4 ==0)
{
while(!key4)
flag1++;
if(flag1%2==0)
flag2=1;
else flag2=0;
while(!key1)
{
display0();
display1(second);
display2(minute);
display3(hour);
P0=0xfe;
wela=0;
delayms(5);
P0=0x00;
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
P0=0x00;
}
void delayms(uint xms)
second=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3)
{
display0();
display1(second);
display2(minute);
dula=0;
P0=0xff;
wela=1;
P0=0x7f;
wela=0;
delayms(5);
P0=0x00;
}
void display2(uchar minute)
{
uchar shi,ge;
shi=minute/10;
ge=minute%10;
}
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar second,minute,hour,fenge,numt0,flag1,flag2,flag3;
}
second++;
if(second==60)
{
second=0;
}
TR0=~TR0;
}
}
if(flag2==1)
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
hour=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
void keyscan()
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
while(!key2)
{
display0();
display1(second);
display2(minute);
display3(hour);
}
second++;
if(second==60)
{
display0();
display1(second);
display2(minute);
display3(hour);
}
hour++;
if(hour==24)
hour=0;
}
}
}
{
secon3;;
{
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
wela=0;
delayms(5);
P0=0x00;
}
void display3(uchar hour)
{
uchar shi,ge;
shi=hour/10;
ge=hour%10;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
}
void main()
{
init();
while(1)
{
keyscan();
if(flag1>=1)
{
display0();
display1(second);
display2(minute);
display3(hour);
}
void display0 ()
{
dula=1;
P0=0x40;
dula=0;
P0=0xff;
wela=1;
P0=0xdb;
wela=0;
delayms(5);
P0=0x00;
}
void display1(uchar second)
{
uchar shi,ge;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(5);
P0=0x00;
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
shi=second/10;
ge=second%10;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xbf;
wela=0;
delayms(5);
P0=0x00;
dula=1;
P0=table[ge];
}
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(numt0==20)
{
numt0=0;
second++;
if(second==60)
相关文档
最新文档