用6位数码管显示时间
基于PLC日期显示及闹钟定时与报时

前言数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
可编程控制器(PLC)是以微处理为核心的通用工业控制装置,它将传统的继电器--接触器控制系统与计算机控制技术紧密结合,集计算机、控制、通信于一体,为工业自动化提供了几乎完美的现代化自动控制装置。
近几年,可编程控制器由于其优良的控制性能,极高的可靠性,在各行各业中的应用日益广泛普及。
为此,各高校的电器自动化、电气工程、供用电技术、机电一体化等相关专业相继开设了有关可编程控制器原理及应用的课程。
本设计以西门子公司的S7—200CN为基础,设计了PLC电子时钟的梯形图。
目录前言 (1)摘要 (3)第一章PLC的概要 (4)1.1课程设计准备知识 (4)1.11 PLC控制系统设计的基本原则 (4)1.12 PLC控制系统设计的基本内容 (4)1.13 PLC控制系统设计的一般步骤 (5)1.2 软件介绍 (6)1.21软件介绍 (6)第二章PLC控制电子钟设计 (8)2.1七段共阴数码管电子钟PLC程序设计原理 (8)2.11 控制要求: (8)2.12 总体设计思想 (8)2.13 具体设计过程 (8)2.2 编程元件地址分配 (10)2.3输入/输出继电器的地址分配 (13)2.31 输入/输出继电器的地址分配 (13)2.4数字电子钟控制系统的方案 (14)2.41 方案论证 (14)2.42 控制要求 (14)2.43 数码管显示原理 (15)2.44 数字电子钟的程序 (15)第三章数字电子钟梯形图程序 (16)第四章 PLC控制系统设计 (28)4.1. 1PLC控制系统设计的基本原则 (27)4.12PLC控制系统设计的一般步骤 (27)4.13PLC程序设计的一般步骤 (28)4.14PLC型号的选择 (28)4.15显示方式的方案比较 (29)4.16键盘 (29)4.2.1液晶显示器的特点 (30)4.221602字符型LCD简介 (31)4.231602LCD的基本参数及引脚功能 (33)4.3.1时间设定模块流程图 (35)重庆工业职业技术学院4.32闹铃功能的实现流程图 (36)4.33电子闹钟的显示电路设计 (37)4.34基本显示模块的实现流程图 (38)结束语 (39)致谢 (40)附录(1)参考文献 (41)附录(2) (42)摘要本系统采用计数器、显示器和校时电路组成。
VHDL数字时钟设计

VHDL数字时钟设计序⾔这个是我在做FPGA界的HelloWorld——数字钟设计时随⼿写下的,再现了数字钟设计的过程⽬标分析1. 时钟具有时分秒的显⽰,需6个数码管。
为了减⼩功耗采⽤扫描法显⽰2. 按键设置时间,需要对按键进⾏消抖3. 时分秒即为2个60进制计数器,⼀个24进制计数器。
模块设计综上所述,我采⽤模块化设计⽅法进⾏设计,绘制框图如下。
1. 时钟分频产⽣各个模块所需频率时钟。
2. 按键处理模块对按键信号进⾏消抖、变长脉冲为短脉冲等处理。
3. 时间控制模块产⽣时间信号或对时间进⾏设置。
4. 数码管驱动模块负责对时间信号BCD码译码为数码管的段码并且扫描输出到数码管。
下⾯对各个模块分别详细叙述时钟分频模块我打算把时钟分频模块做成“数控N分频器”,通过给分频器传⼊数值N来对时钟信号进⾏N分频。
得到的信号频率为原时钟信号的频率/N,占空⽐为1/N。
稍微考虑下其他模块所需时钟:按键处理模块100Hz ,时间控制模块1Hz,数码管驱动50Hz。
⽽输⼊时钟为33.8688MHz。
我不想传⼊的N数值过⼤,我打算先对时钟进⾏两次:第⼀次调⽤时钟分频模块得到1Mhz,第⼆次得到1Khz。
这样N的位数为10可以满⾜需求。
代码如下library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity ClkDiv isport(clk_i:IN STD_LOGIC;N_i: IN STD_LOGIC_VECTOR(9 DOWNTO 0);clk_o:OUT STD_LOGIC);end ClkDiv;architecture behavior of ClkDiv issignal count:STD_LOGIC_VECTOR(9 DOWNTO 0):="0000000001";signal clk_temp:STD_LOGIC:='0';beginprocess(clk_i)beginif(clk_i'EVENT and clk_i='1')thenif (count=N_i)thencount<="0000000001";clk_temp<='1';elsecount<=count+1;clk_temp<='0';end if;end if;end process;clk_o<=clk_temp;end behavior;仿真结果如下:2分频:输出信号为f/2Hz,占空⽐1:23分频:输出信号为f/3Hz,占空⽐1:3按键处理模块去抖动根据以往的经验,按键按下弹起电平会有⼀⼩段⽑刺,可能会引起电路误操作,所以要对按键进⾏消抖处理使变为⼲净的矩形信号。
HV系列多功能时间控制器使用说明书

HV系列是本公司研发的多功能时间控制仪表,它以高性 能的MCU芯片为主控处理器,采用多重滤波及防干扰电路, 工作稳定可靠。仪表采用双排LED数码管显示定时值及预置 值,采用轻触按钮开关设定仪表参数,可广泛应用于化工、 机械、轻工、冶金、纺织等行业。
基本特点
共有八种定时范围: 0.01S~9999.99S 0.1S~99999.9S 1S~999999S 0.1M~99999.9M
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
7 MOD
8 HOL
9 CON
10 RAT
11 OUT
12 TIM
13 OT3
14 TM3
0.01S~9999.99S 0.1S~99999.9S 1S~999999S 0.1M~99999.9M
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
设定键
左移键 减少键 增加键
SET
型号说明
HV □- R □ □ □
MS
RST
空白:不带附加功能 T:带RS485通讯(Modbus-RTU) I :带 变 送 输 出( 4 ~ 2 0 m A , 0 ~ 1 0 V )
1:一段输出(OUT4) 2:两段输出(OUT3、OUT4) 3:三段输出(OUT2、OUT3、OUT4) 4: 四 段 输 出( O U T 1、O U T 2、O U T 3、O U T 4 )
★按键设定仪表参数,6位双排LED数码管显示;
基于51系列单片机与DS1302时钟芯片的电子时钟C语言Proteus仿真报告

基于单片机的电子时钟:班级:学号:指导教师:完成日期:I / 20目录摘要一、引言 (1)二、基于单片机的电子时钟硬件选择分析 (2)2.1主要IC芯片选择 (2)2.1.1微处理器选择 (2)2.1.2 DS1302简介 (4)2.1.3 DS1302引脚说明 (4)2.2电子时钟硬件电路设计 (5)2.2.1时钟电路设计 (6)2.2.2整点报时功能 (7)三、Protel软件画原理图 (8)3.1系统工作流程图 (8)3.2原理图 (9)四、proteus软件仿真与调试 (9)4.1电路板的仿真 (9)4.2软件调试 (9)五、源程序 (10)六、课设心得 (13)II / 20七、参考文献 (13)基于单片机电子时钟设计摘要电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。
本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。
本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词:电子时钟;多功能;AT89C52;时钟日历芯片III / 20一、引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。
从古代的水漏、十二天干地支,到后来的机械钟表以与当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。
致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。
第六章习题参考答案

第六章 MCS-51的定时/计数器1. 如果采用晶振的频率为3MHz ,定时器/计数器工作方式0、1、2下,其最大的定时时间为多少? 解答:因为机器周期)(410312126s f T OSC cy μ=⨯==, 所以定时器/计数器工作方式0下,其最大定时时间为)(768.321042261313ms T T C MAX =⨯⨯=⨯=-;同样可以求得方式1下的最大定时时间为262.144ms ;方式2下的最大定时时间为1.024ms 。
2. 定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。
定时时间与时钟频率和定时初值有关。
3. 定时/计数器用作定时器时,对外界计数频率有何限制?答:由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。
4.采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。
定时1ms 后,又转为计数方式,如此循环不止。
假定MCS-51单片机的晶体振荡器的频率为6MHz ,请使用方式1实现,要求编写出程序。
解:定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。
除了第一次计数工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器/计数器T0的工作方式。
编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: M OV TMOD,#06H ;定时器/计数器T0为计数方式2 MOV TL0,#156 ;计数100个脉冲的初值赋值MOV TH0,#156SETB GATE ;打开计数门SETB TR0 ;启动T0,开始计数SETB ET0 ;允许T0中断SETB EA ;CPU开中断CLR F0 ;设置下一轮为定时方式的标志位W AIT: AJMP W AITIT0P: CLR EA ;关中断JB F0,COUNT ;F0=1,转计数方式设置MOV TMOD,#00H ;定时器/计数器T0为定时方式0MOV TH0,#0FEH ;定时1ms初值赋值MOV TL0,#0CHSETB EA RETICOUNT: MOV TMOD,#06HMOV TL0,#156SETB EARETI5. 定时器/计数器的工作方式2有什么特点?适用于哪些应用场合? 答:定时器/计数器的工作方式2具有自动恢复初值的特点,适用于精确定时,比如波特率的产生。
数码管功能

数码管功能数码管是一种常见的显示元件,由许多发光二极管(LED)组成,常用于显示数字和字符等信息。
在我们的日常生活中,数码管被广泛应用于各种设备中,如电子钟、电子秤、温度计、计时器等。
数码管的功能主要体现在以下几个方面:1. 数字显示:数码管最基本的功能就是显示数字。
它由七个发光二极管组成,用来表示不同的数字。
每个发光二极管代表一个数字,通过控制电流的通断来显示特定的数字。
数码管可以显示0-9的数字,通过不同的组合方式还能显示英文字母和特殊字符。
2. 字符显示:除了显示数字,数码管还可以显示一些英文字母和特殊字符。
通过特定的电流通断组合,数码管可以显示A-F的英文字母,以及一些特殊字符如"-"、"."等。
这样就可以在数码管上显示更多的信息,方便用户获取更多的信息。
3. 多位显示:常见的数码管有单位数码管和多位数码管。
单位数码管只能显示一个数字或字符,而多位数码管可以同时显示多个数字或字符。
多位数码管通常由4位或6位单元组成,每个单元可以显示一个数字或字符。
通过控制不同单元的电流通断,多位数码管可以显示更多的数字或字符,提供更多的信息。
4. 时钟显示:数码管可以用于显示时间。
通过在数码管上显示不同的数字,就可以构成一个时钟。
通常使用4位数码管,前两位显示小时,后两位显示分钟。
通过不断刷新数码管上的数字,就可以实现实时的时钟显示。
5. 其他应用:除了上述常见的功能,数码管还可以用于其他许多应用。
比如在电子秤上,数码管可以显示重量;在温度计上,数码管可以显示温度;在计时器上,数码管可以显示计时的时间等等。
这些应用都将数码管的显示功能发挥到了极致,提供了更多的信息和便利。
总之,数码管作为一种常见的显示元件,具有多种功能。
它可以显示数字、字符和一些特殊字符,可以单独显示一个数字或字符,也可以通过多位数码管同时显示多个数字或字符。
数码管还可以用于显示时间、重量、温度等信息,满足不同设备的需求。
[整理]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。
数字电子时钟设计原理
毕业设计论文论文题目:数字电子时钟设计原理某职业技术学院电气工程系毕业设计任务书1.能够利用软件设计数字电子钟电路原理图。
2.要求熟悉集成芯片功能。
3.具有时、分、秒显示功能。
三、毕业设计进程表毕业设计进程表起止日期设计内容备注第1周资料准备,查阅相关文献第2周设计电路第3-4周编写说明书,交指导老师审阅第5周整理资料,准备答辩前言目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。
要知道当前的时间,必须先开灯,故较为不便。
现在市场上出现了这样一类的电子钟,它以六只LED数码管来显示时分秒,与传统的以指针显示秒的方式不同,超越了人们传统的习惯与理念。
数字电子钟是一种用数字显示秒、分、时的计时装置,与传统的机械钟相比,具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛的应用。
如,日常生活中的电子手表,车站、码头、机场等公共场所的大型数显电子钟。
要实现数字电子钟的设计可以由单片机控制或者由数字IC构成。
这里我们要做的是一个由数字IC构成的数字电子钟设计。
目录1 设计功能要求 (1)2 设计方案 (1)3设计中所用到的元器件 (2)3.1译码器 (2)3.2计数器 (4)3.3显示器 (4)3.4振荡器 (5)4 电路设计 (6)4.1时分秒计数器 (6)4.1.1秒计数器的设计 (6)4.1.2分计数器的设计 (8)4.1.3时计数器的设计 (8)4.2校时电路 (8)4.3译码显示电路 (10)4.4总体电路 (11)5器件清单 (13)结束语 (14)致谢 (15)参考文献 (16)附录A 数字电子钟整体体电路图 (17)1 设计功能要求设计一数字钟,该数字钟能够准确计时,以数字形式显示时、分、秒的时间和校时功能。
在电路中,振荡电路提供的1Hz脉冲信号。
在计时出现误差时电路还可以进行校时、校分和校秒的功能。
并且要用数码管显示时、分、秒,各位均为两位显示。
具体要求如下:1.时的计时要求为“23置0”,分和秒的计时要求为60进制。
模块四答案电气控制与PLC课后习题答案
模块四PLC应用指令的应用任务一8盏流水灯控制程序思考和练习1.什么是位元件?什么是字元件?两者有什么区别?答:只具有接通(ON或1)或断开(OFF或0)两种状态的元件称为位元件。
将多个位元件按一定的规律组合起来就称为字元件,也称位组件。
位元件只能单个取用,而字元件是位元件的组合所以只用一条指令即可同时对多个字元件进行操作。
2.位元件如何组成字元件?请举例说明。
答:位元件组合以KnP的形式表示,每组由4个连续的位元件组成,称为位元件,其中P 为位元件的首地址,n为组数(n=1~8)。
4个单元K4组成16位操作数,如K4M10表示由M25~ M10组成的16位数据。
3.数据寄存器有哪些类型?具有什么特点?试简要说明。
32位数据寄存器如何组成?答:数据寄存器可分为:通用数据寄存器、锁存数据寄存器、文件寄存器、特殊数据寄存器、变址寄存器。
锁存数据寄存器有断电保持功能,文件寄存器只能用外部设备进行写入操作,特殊数据寄存器用来监控PLC内部的各种工作方式和元件,例如电池电压、扫描时间等,变址寄存器(V、Z)除了和普通的数据寄存器有相同的使用方法外,还常用于修改器件的地址编号。
32位数据寄存器由两个16为数据寄存器组成。
4.应用指令的组成要素有几个?其执行方式有几种?其操作数有几类?答:应用指令的组成要素共有五个(1)应用指令编号(2)助记符(3)数据长度(4)执行形式(5)操作数。
应用指令有脉冲执行型和连续执行型两种。
操作数分为源操作数、目标操作数和其它操作数。
5. 试问如下软元件为何种软元件?由几位组成?X1、D20、S20、K4X0、V2、X10、K2Y0、M19答:X1、S20、X10、M19是位元件;D20、K4X0、V2、K2Y0是字元件;D20、V2是16位数据寄存器,K4X0是16位、K2Y0是8位。
6.执行指令语句“MOV K5 K1Y0”后,Y0~Y3的位状态是什么?答:Y0~Y3的状态是“0101”7.执行指令语句“DMOV H5AA55 D0”后,D0、D1中存储的数据各是多少?答:D1存储的数据是(0000 0000 0000 0101),D0存储的数据是(1010 1010 0101 0101)8.试用MOV指令编写电动机Y-△降压起动程序。
DGJ-2型电工电子实验台使用说明书3
TH-DD、TH-TDTH-DT、DGJ-2、DGJ-3型电工实验装置使用说明书天煌教仪浙江天煌科技实业有限公司一、概述电工实验装置是根据目前“电工技术”、“电工学”教学大纲和实验大纲的要求,广泛吸收各高等院校从事该课程教学和实验教学教师的建议,并综合了国内各类实验装置的特点而设计的最新产品。
全套设备能满足各类学校“电工学”、“电工技术”课程的实验要求。
本装置是由实验屏、实验桌和若干实验组件挂箱等组成。
二、实验屏操作、使用说明实验屏为铁质喷塑结构,铝质面板。
屏上固定装置着交流电源的起动控制装置,三相电源电压指示切换装置,低压直流稳压电源、恒流源、受控源、数控智能函数信号发生器、定时器兼报警记录仪和各种测量仪表等。
1、交流电源的启动(1)实验屏的左后侧有一根接有三相四芯插头的电源线.先在电源线下方的接线柱上接好机壳的接地线,然后将三相四芯插头接通三相四芯380V 交流市电。
这时,屏左侧的三相四芯插座即可输出三相380V交流电.必要时此插座上可插另一实验装置的电源线插头.但请注意,连同本装置在内,串接的实验装置不能多于三台.(2)将实验屏左侧面的三相自耦调压器的手柄调至零位,即逆时针旋到底。
(3)将“电压指示切换”开关置于“三相电网输入”侧。
(4)开启钥匙式电源总开关,停止按钮灯亮(红色),三只电压表,(0~450V)指示出输入三相电源线电压之值,此时,实验屏左侧面单相二芯220V 电源插座和右侧面的单相三芯220V处均有相应的交流电压输出。
(5)按下启动按钮(绿色),红色按钮灯灭,绿色按钮灯亮,同时可听到屏内交流接触器的瞬间吸合声,面板上与U1 、V1 和W1相对应的黄、绿、红三个LED指示灯亮。
至此,实验屏启动完毕。
2、三相可调交流电源输出电压的调节(1)将三相“电源指示切换”开关置于右侧(三相调压输出),三只电压表指针回到零位。
(2)按顺时针方向缓缓旋转三相自耦调压器的旋转手柄,三只电压表将随之偏转,即指示出屏上三相可调电压输出端U、V、W两两之间的线电压之值,直至调节到某实验内容所需的电压值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uchar num,num1,num2,num3,temp;
void init();
void keyscan();
//void jianpan();
void delay(uint a)
{
uint x,z;
for(x=a;x>0;x--)
for(z=10;z>0;z--);
}
{
if(key4==0)
{
delay(4);
if(key4==0)
TR0=~TR0;
}
}
}
}*/
void t0() interrupt 1 //定时器1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
0x87,0xff,0xef};
void display1(uchar numdi) //秒钟显示函数
{
uchar fen,miao;
fen=numdi/10;
miao=numdi%10;
dula=1;
P0=table[fen];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
}
/*void jianpan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
num++;
if(num==60)
num=0;
}
}
while(!key1);
delay(5);
while(!key1);
if(key2==0)
{
delay(5);
if(key2==0)
{
num--;
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
wela=1;
P0=0xfd;
wela=0;
delay(20);
}
void main()//主函数
{
init();
while(1)
{
display(num);
display1(num2);
display2(num3);
//jianpan();
keyscan();
fm=1;
if(num3==11)
{
if(num2==11)
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(20);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(20);
}
void display2(uchar numd2)//小时显示函数
{
uchar xshi,xfen;
xshi=numd2/10;
xfen=numd2%10;
dula=1;
P0=table[xshi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(20);
dula=1;
P0=table1[xfen];
dula=0;
P0=0xff;
if(num==0)
num=60;
}
}
while(!key2);
delay(5);
while(!key2);
if(key3==0)
{
delay(5);
if(key3==0)
num=0;
}
while(!key3);
delay(5);
while(!key3);
if(key4==0)
{
delay(5);
if(key4==0)
{
if(num==11)
TR0=0;
delay(10000);
TR0=1;
}
}
}
}
void init()//初始化函数
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
P3=0xff;
num=0;
num1=0;
num2=0;
if(num==60)
{
num=0;
num2++;
if(num2==60)
{
num2=0;
fm=0;
delay(1);
num3++ ;
if(num3==24)
{
num3=0;
}
}
}
}
}
void keyscan()//键盘扫描
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{temp=P3;
switch(temp)
{
case 0xee:num2++;
if(num2==60)
num2=0;
break;
case 0xde:num2--;
if(num2==0)
num2=60;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{temp=P3;
TR0=~TR0;
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
break;
case 0xbe:num3++;
if(num3==24)
num3=0;
break;
case 0x7e:num3--;
if(num3==0)
num3=24;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
delay(20);
dula=1;
P0=table1[miao];
dula=0;
P0=பைடு நூலகம்xff;
wela=1;
P0=0xf7;
wela=0;
delay(20);
}
void display(uchar numdis)//分钟显示函数
{
uchar shi,ge;
shi=numdis/10;
ge=numdis%10;