51单片机做的电子时钟
51单片机作的电子钟程序及电路图
51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。
常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。
10秒位到5后,即59秒,分钟加1,10秒位回0。
依次类推,时钟最大的显示值为23小时59分59秒。
这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。
开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。
以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序 ;; (仅供参考) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH;clr P3.7 ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50M S×20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0MOV R0,#79H ;指向小时计时单(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器RETI ;中断返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加1子程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADD1: MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 清零程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;............. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 时钟调整程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOV R2,#06H ;进入调时状态,赋闪烁定时初值SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。
基于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单片机的电子时钟
1、电子闹钟的硬件系统框架:设计出电子闹钟的基本整体框架。
2、电子闹钟的电源设计:采用交直流供电电源。
电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源。
3、电子闹钟的主机电路设计:主要有1)系统时钟电路设计:对时间要求不是很高,只要能使系统可靠起振并稳定运行就行。
2)系统复位电路设计:本系统采用的是RC复位方式3)按键与按钮电路设计:按键与按钮电路设计中关键要考虑的就是按键的去抖动问题。
本系统采用软件去抖。
考虑到对时和设定闹铃时间操作的使用频率不高,为了精简系统和降低成本,本系统只设置两个按键。
a)SET键,对应系统的不同工作状态,具有3个功能:在复位后的待机状态下,用于启动设定时间参数(对时或定闹);在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;在设定最低位(分个位)的状态下,用于结束本次时间设定。
b)+1键,用于对当前设定位进行加1操作。
4)闹铃声光指示电路设计:本系统采用声音指示,关键元件是蜂鸣器。
4、电子闹钟的显示电路设计:设计一个由LED数码管组成的显示电路,显示采用共阳极数码管,其目的是为了简化限流电路的设计和实现亮度可调的要求。
一功能模、设计指标:1. 显示时、分、秒。
2. 可以24小时制或12小时制。
3. 具有校时功能,可以对小时和分单独校时,对分校时的时候,停止分向小时进位。
校时时钟源可以手动输入或借用电路中的时钟。
4. 具有正点报时功能,正点前10秒开始,蜂鸣器1秒响1秒停地响5次。
5. 为了保证计时准确、稳定,由晶体振荡器提供标准时间的基准信号。
二、设计要求:1. 画出总体设计框图,以说明数字钟由哪些相对独立的块组成,标出各个模块之间互相联系,时钟信号传输路径、方向和频率变化。
并以文字对原理作辅助说明。
2. 设计各个功能模块的电路图,加上原理说明。
3. 选择合适的元器件,在面包上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在充分电路正确性同时,输入信号和输出方式要便于电路的测试和故障排除。
基于51单片机的电子时钟设计
基于51单片机的电子时钟设计
摘要:本文论述了基于51单片机的电子时钟设计,包括硬件设计与软件编程。
其中,硬件设计包括基本指示灯、DS1302时钟芯片等的选择与连接,时钟电路、晶振电路的设计等。
软件编程包括时钟显示的实现,时钟校准、闹钟等功能的实现等。
本设计具有精度高、操作简便、易于实现等特点,可广泛应用于各种场合。
关键词:51单片机;电子时钟;硬件设计;软件编程
前言
随着人们生活水平的提高,电子时钟已经成为人们生活中必不可少的物品,目前市场上各种类型的电子时钟层出不穷。
本文以51单片机为基础,设计了一款高精度、易于操作的电子时钟,采用DS1302时钟芯片作为时钟驱动芯片,实现了时钟的准确显示、校准、闹钟等功能。
硬件设计
硬件设计主要包括控制器、时钟驱动、显示装置以及电源。
本设计采用了AT89C51单片机作为控制器,一块DS1302时钟芯片作为时钟驱动,LED数字管作为显示装置。
同时,本设计采用了USB供电方式,其电源电压为5V。
软件编程
软件编程主要包括时钟显示、时钟校准、闹钟功能的实现等。
时钟显示采用了动态显示方式,实现了时间的精确定位。
同时,本设计还具有时钟校准功能,在程序接通时,可自动对时钟进行校准,保证时钟的精确度。
此外,本设计还具有设置闹钟的功能,用户可在指定时间响起闹钟。
结论本文以51单片机为基础,设计了一款高精度、易于操作的电子时钟。
通过对硬件设计、软件编程的设计与实现,使得该产品能够准确显示时间,保证了时钟的稳定性,满足了时间的要求,目前已
得到广泛应用。
基于51单片机的电子时钟设计
基于51单片机的电子时钟设计51单片机是一种广泛应用于嵌入式系统的微控制器,由于其性能稳定、易于编程和成本相对较低的特点,被广泛应用于各种电子设备中。
在现代社会,电子时钟已经成为人们日常生活中不可或缺的工具。
随着科技的不断发展,电子时钟在功能和外观上都得到了极大的提升,如今的电子时钟不仅可以显示时间,还能设置闹钟、定时、显示温湿度等功能。
本文通过对51单片机的应用和实践,设计了一款功能丰富的电子时钟,旨在探讨如何利用51单片机实现电子时钟的设计与制作过程。
首先,我们将介绍51单片机的基本原理和特点。
51单片机是一种8位微控制器,由Intel公司于1980年推出,至今已有数十年的历史。
它采用哈佛结构,具有较高的工作速度和稳定性,适合用于各种嵌入式系统。
51单片机的指令系统简单,易于学习和掌握,因此被广泛用于各种嵌入式应用中。
除此之外,51单片机的外围设备丰富,可以通过外部扩展模块实现各种功能,如串口通信、定时器、数模转换等,这也为我们设计电子时钟提供了便利。
其次,我们将详细介绍基于51单片机的电子时钟的设计和实现过程。
电子时钟主要由时钟模块、显示模块、闹钟模块等部分组成,通过合理的接线和程序设计实现各种功能。
首先,我们设计时钟模块,通过外部晶振产生时钟信号,并利用51单片机的定时器模块实现时间的精确计算和显示。
同时,我们还设计了显示模块,采用数码管或液晶屏显示时间和日期信息,通过数字或字符的组合,使信息直观清晰。
此外,闹钟模块也是电子时钟的重要功能之一,我们可以设置闹钟时间,并在设定时间触发闹钟功能,提醒用户。
通过合理的程序设计,我们可以实现电子时钟的各种功能,并提升用户体验。
最后,我们将讨论基于51单片机的电子时钟在实际生活中的应用前景和发展趋势。
随着智能家居的快速发展,电子时钟作为家庭必备的电子设备,其功能和外观需求也在不断提升。
未来,基于51单片机的电子时钟将会更加智能化,可以与手机、电视等智能设备联动,实现更多个性化的功能。
基于51单片机的电子时钟
闹钟提醒电路
本次设计是通过蜂鸣器来完成闹钟提醒的功能的,蜂鸣器与芯片的P2.0相连。
按键控制电路
键盘是最常用的输入设备,是实现人机对话的纽带,具体来说键盘接口应完成以下操作功能: (1)键盘扫描,以判定是否有键被按下; (2)键识别,以确定闭合键的位置; (3)排除多建、复键及去抖。 以上这些功能通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。
键盘显示方案
AT89C52的P0口和P1口外接八个LED数码管(LED7~LED0)构成显示 器 , 用 P0 口 LED 的 段 码 输 出 口 , P1 口 做 八 个 LED 数 码 管 的 位 选 输 出 口 , P3.0~P3.2外接三个按键K1、K2、K3构成键盘电路。
硬件电路
显示电路
void time() interrupt 1
//定时器中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{ tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
write_n_sfm(n_shi,n_fen,n_miao);
else
write_sfm(shi,fen,miao);
if(n_shi==shi&&n_fen==fen)
基于51单片机的简易电子钟设计
基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。
二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。
1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。
以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。
同时,根据用户按键的操作,可以调整时间的设定。
2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。
可以显示当前时间和设置的闹钟时间。
初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。
3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。
通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。
4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。
同时可以添加外部中断用于响应用户按键操作。
三、主要功能和实现步骤1.系统初始化。
2.设置定时器,每1秒产生一次中断。
3.初始化LCD显示屏,显示初始时间00:00:00。
4.查询键盘状态,判断是否有按键按下。
5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。
-数字键:根据键入的数字进行时间的调整和闹钟设定。
6.根据定时器的中断,更新时间的显示。
7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。
8.循环执行步骤4-7,实现连续的时间显示和按键操作。
四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。
但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。
51单片机电子时钟设计
51单片机电子时钟设计电子时钟是一种非常实用的电子设备,它可以准确地显示时间,并拥有一系列的功能,如闹钟、日历等。
使用51单片机设计电子时钟,可以实现这些功能,同时还能够进行功能扩展,更好地满足用户需求。
首先,我们需要硬件上的准备工作。
51单片机需要与时钟(晶振)和显示器(LCD模块)进行连接。
晶振是提供单片机时钟脉冲的源头,LCD模块用于显示时间和各种功能。
同时,在电路中还需要进行一些扩展,如实时时钟模块(RTC模块)、按键模块等。
在软件设计方面,主要需要考虑以下几个方面:1.时钟脉冲:通过配置晶振的频率,可以生成单片机所需的时钟脉冲。
这个脉冲控制了单片机的运行速度,从而影响到时钟的准确性。
需要根据晶振频率进行相关配置。
2.时间的获取和计算:通过RTC模块可以获取当前的时钟数据(包括年、月、日、时、分、秒)。
在程序中,需要通过相应的接口获取这些数据,并进行计算。
比如,在显示时钟的时候,可以通过获取秒数、分钟数和小时数,并将其转换为相应的字符串进行显示。
3.菜单和按键功能:为了实现更多的功能,我们可以通过按键来实现菜单切换和功能选择。
在程序中,需要对按键进行扫描,判断按键的状态,然后进行相应的操作。
比如,按下菜单键可以进入菜单界面,通过上下键选择不同的功能,再通过确定键进行确认。
4.闹钟功能:闹钟功能是电子时钟中常见的功能之一、通过设置闹钟时间,并进行闹钟的开启或关闭,可以在指定的时间点触发相应的报警动作。
在程序中,需要编写逻辑判断闹钟是否到达指定的时间,然后触发报警。
5.日历功能:除了显示时间,电子时钟还可以显示当前的日期,包括年、月、日。
在程序中,需要编写相关的逻辑来获取日期数据,并进行显示。
通过以上的步骤,我们可以基本实现一个简单的电子时钟功能。
当然,根据用户的需求,还可以进行更多的功能扩展,比如添加温湿度监测、自动调光等功能。
总结起来,51单片机电子时钟的设计主要包括硬件和软件两个方面。
51单片机电子时钟
一,总体方案设计数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和一些显示星期、报时、停电查看时间等附加功能。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。
干电路系统由秒信号发生器、“时、分、秒、星期”计数器、译码器及显示器、校时电路、整点报时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
每累计24小时,发出一个“星期脉冲”信号,该信号将被送到“星期计数器”,“星期计数器” 采用7进制计时器,可实现对一周7天的累计。
译码显示电路将“时”、“分”、“秒”、“星期”计数器的输出状态送到七段显示译码器译码,通过七位LED七段显示器显示出来。
整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。
校时电路时用来对“时”、“分”、“秒”、“星期”显示数字进行校对调整的。
但是基于我们是初学者,我们只做一些比较简单的设计,可以显示时分秒,可以计时,还有闹钟提示,还加上温度的测量,即焊接上温度传感器18DS120在P1口进行温度的测量。
数字电子钟主体电路应由以下几部分组成:通过分频器产生标准秒信号;60进制分秒计数器以及24小时计数器;分、时的译码显示部分;校时电路。
(电子钟的总体电路)二,单元模块设计1)晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz 的方波信号,此外还有一校正电容可以对温度进行补偿,以提高频率准确度和稳定度,使稳定度优于10-4,可保证数字钟的走时准确及稳定。
基于51单片机的电子时钟的设计
基于51单片机的电子时钟的设计电子时钟已经成为我们日常生活中不可或缺的设备之一。
随着科技的不断发展,电子时钟也越来越智能化,功能也越来越强大。
然而,简单的电子时钟也非常实用,可以帮助我们准确地把握时间,安排生活。
本文将基于51单片机,介绍一个简单的电子时钟的设计。
第一步,硬件设计。
要实现电子时钟,我们需要用到一个时钟模块,它可以为我们提供一个准确的时间基准。
同时,我们还需要将时间显示在一个数码管上,所以在硬件设计中我们需要使用数码管。
此外,为了方便调试,我们需要一个串口模块,它可以将调试信息输出到PC端,供我们观察。
具体的硬件设计如下:1.时钟模块我们使用的是DS1302时钟模块,它可以提供准确的时间计算。
DS1302时钟模块有六个引脚,分别是:VCC、GND、CLK、DAT、RST、DS。
其中,VCC和GND分别连接电源正负极,CLK是时钟,DAT是数据,RST是复位,DS是时钟数据存储器。
2.数码管我们使用共阴数码管,它有12个引脚,其中11个引脚是段选线,另外一个引脚是位选线。
为了方便连接,我们可以使用数码管驱动芯片,如74HC595。
它可以将51单片机的串行数据转为并行数据,以驱动数码管。
3.串口模块串口模块是用于通信的模块,它有4个引脚,分别是:VCC、GND、TX、RX。
其中,VCC 和GND连接电源正负极,TX是发送端口,RX是接收端口。
第二步,软件设计。
软件设计主要包括三个部分,分别是时钟模块的驱动程序、数码管的驱动程序和主程序。
我们需要编写一个DS1302时钟模块的驱动程序。
通过驱动程序,我们可以读取当前时间,并将其设置为时钟模块的初始时间。
同时,我们还需要实现定时器中断,以更新时钟显示。
数码管驱动程序是通过74HC595芯片实现的。
我们需要编写一个函数,将当前时间转换为段选数据,再通过74HC595芯片输出到数码管上。
3.主程序主程序主要包括时钟的初始化、时钟的设置、时钟的显示等功能。
51单片机的电子时钟设计
51单片机的电子时钟设计一、引言随着科技的发展和人们对时间的准确度的要求日益提高,电子时钟成为了人们生活中不可缺少的一部分。
本文将介绍一种基于51单片机的电子时钟设计。
二、硬件设计1.主控部分本设计使用了51单片机作为主控芯片,51单片机具有丰富的接口资源和强大的处理能力,非常适合用于电子时钟的设计。
2.显示部分采用了数码管显示屏作为显示部分。
为了提高显示的清晰度,我们选用了共阳数码管。
使用4位数码管即可显示时、分和秒。
3.时钟部分时钟部分由振荡器和RTC电路构成。
振荡器提供时钟脉冲信号,RTC 电路实现对时钟的准确计时。
4.按键部分按键部分采用矩阵按键,以实现对时间的设置和调整。
三、软件设计1.系统初始化在系统初始化阶段,需要对硬件进行初始化设置。
包括对I/O口的配置,定时器的初始化等。
2.时间设置用户可以通过按键设置当前的时间。
通过矩阵按键扫描,检测到用户按下了设置键后,进入时间设置模式。
通过按下加减键,可以增加或减少时、分、秒。
通过按下确认键,将设置的时间保存下来。
3.时间显示在正常运行模式下,系统将会不断检测当前的时间,并将其显示在数码管上。
通过对时钟模块的调用,可以获取当前的时、分、秒并将其显示出来。
4.闹钟功能在时间设置模式下,用户还可以设置提醒闹钟的功能。
在设定时间到来时,系统会发出蜂鸣器的声音,提醒用户。
四、测试与验证完成软硬件设计后,进行测试与验证是必不可少的一步。
通过对硬件的连线接触检查和软件的功能测试,可以确保整个设计的正确性和可靠性。
五、总结通过本次设计,我对51单片机的使用和原理有了更清晰的认识,同时也对电子时钟的设计和制作有了更深入的了解。
电子时钟作为一种常见的电子产品,在我们的日常生活中发挥了重要的作用。
这次设计过程中,我遇到了许多问题,但通过查阅资料并与同学一起探讨,最终解决了问题。
相信通过不断的学习和实践,我可以在未来的设计中取得更好的成果。
51单片机电子时钟设计
二、时钟的基本原理分析
利用单片机的定时器来完成定时功能。定时器0每隔0.01秒中断一次,并将其计为一个计数。一秒钟的中断计数初始值设为100,每次中断计数初始值减1。当它减少到0时,意味着它是1s,第二个变量增加1。同理判断是1min还是1h。
为了在LED数码管上显示时间,可以采用静态显示法和动态显示法。由于静态显示方法需要更多的硬件,如解码器和数据锁存器,动态显示方法可以用来实现LED显示。通过依次扫描每个数码管,相应的数码管被点亮,相应的字码被送到数码管显示数字。由于数码管的扫描周期短,加上人眼的余辉效应,数码管看起来总是很亮,从而实现各种显示。
AJMP MAIN
S_PD:
MOV A,R3;
JNZ MAINR4和R3的存储参数减少到0,并且计时长度已经达到。
JNB P0.6,升银2;当闹钟响铃功能开启时,进入闹钟程序。
AJMP TISHI如果闹铃没有再响,计时到了就跳转到提示程序。
转移到主程序
史策:
呼叫铃
转移到主程序
声引1号:;呼叫铃子程序
四个时钟的实现
A.电路设计
1.总设计
本设计主要利用单片机来设计电子钟。硬件部分主要分为以下几个电路模块:显示电路用8个普通阴极数码管分别显示周(年)、时、分(月)、秒(日),并通过动态扫描显示,避免了解码器的使用,节省了I/o口,使电路更加简单。采用AT89S51系列单片机,应用简单,适用于电子钟设计。
来电铃声
转移到主程序
声音2:
SETB F0;报警再响铃标志位的设置
LCALL RING门铃
CLR F0标志位复位
转移到主程序
NLTZZ:
AJMP NLTZ1进入警报调整程序
DSTZ:
基于51单片机的电子时钟的设计与实现综述
基于51单片机的电子时钟的设计与实现综述基于51单片机的电子时钟是一种常见的嵌入式系统设计项目。
它通过使用51单片机作为核心处理器,结合外部电路和显示设备,实现了时间的计时和显示功能。
本文将对基于51单片机的电子时钟的设计和实现进行综述,包括硬件设计和软件设计两个部分。
一、硬件设计1.时钟电路时钟电路是电子时钟的核心部分,它提供稳定的时钟信号供给单片机进行计时。
常用的时钟电路有晶振电路和RTC电路两种。
晶振电路通过外接晶体振荡器来提供时钟信号,具有较高的精度和稳定性;RTC电路则是通过实时时钟芯片来提供时钟信号,具有较高的时钟精度和长期稳定性。
2.显示电路显示电路用于将时钟系统计算得到的时间信息转换为人们可以直接观察到的显示结果。
常用的显示器有数码管、液晶显示屏、LED显示屏等。
显示电路还需要与单片机进行通讯,将计时的结果传输到显示器上显示出来。
3.按键电路按键电路用于实现对电子时钟进行设置和调节的功能。
通过设置按键可以实现修改时间、调节闹钟等功能。
按键电路需要与单片机进行接口连接,通过读取按键的输入信号来实现对时钟的操作。
4.供电电路供电电路为电子时钟提供电源,通常使用直流电源。
供电电路需要满足单片机和其他电路的电源需求,同时还需要考虑电源的稳定性和保护措施等。
二、软件设计1.系统初始化系统初始化主要包括对单片机进行外设初始化、时钟初始化和状态变量初始化等。
通过初始化将各个外设配置为适合电子时钟功能运行的状态,并设置系统初始时间、闹钟时间等。
2.计时功能计时功能是电子时钟的核心功能,通过使用定时器和中断技术来实现。
通过设置一个固定时间间隔的定时器中断,单片机在每次定时器中断时对计时寄存器进行增加,实现时间的累加。
同时可以将计时结果转化为小时、分钟、秒等形式。
3.显示功能显示功能通过将计时结果传输到显示器上,实现时间信息的显示。
通过设置显示器的控制信号,将时间信息依次发送到各个显示单元上,实现数字或字符的显示功能。
单片机汇编程序51电子时钟.doc
单片机汇编程序 51电子时钟电子钟设计实验报告一)实验目的:1、进一步掌握定时器的使用和编程方法。
2、进一步掌握中断处理程序的编程方法。
3、进一步掌握数码显示电路的驱动方法。
4、进一步掌握键盘电路的驱动方法。
5、进一步掌握软件数据处理的方法。
二)内容要求:1、利用CPU的定时器和数码显示电路,设计一个电子时钟。
格式如下:XX XX XX 由左向右分别为:时、分、秒。
2、电子时钟有秒表功能。
3、并能用键盘调整时钟时间。
4、电子时钟能整点报时、整点对时功能。
5、能设定电子时钟的闹铃。
三)主要元件:电阻4.7K 10个 2K 1个四位共阳数码管1个二位共阳数码管1个按钮开关4个万用板(中板)1个 9012PNP 7个排线排阵若干电线一捆蜂鸣器1个最小系统一个四)系统说明:按P1.0键,如果按下的时间小于1秒进入省电模式(数码管不显示,开T0计时器),如果按下的时间大于1秒则进入时间调整.。
在时间调整状态:再按P1.0,如果按下时间大于0.5秒转调小时状态,按下时间小于0.5秒加1分钟操作。
在小时调整状态再按P1.0键,如果按下时间大于0.5秒退出时间调整,如果按下时间小于0.5秒加1小时操作。
按P1.1键,进入闹铃调分状态,按P1.2分加1,按P1.0分减1。
若再按P1.3,则进入调整状态,按P1.2时加1,按P1.0分时。
按P1.1键,闹铃有效,显示式样变为00:00:—0;再按P1.1键,闹铃无效,显示式样变为00:00:—。
按P1.3键,调整闹钟时间结束。
按P1.2键,进入秒表计时功能,按P1.2键暂停或清零,按P1.1键退出秒表回到时钟状态。
而且本系统还有整点报时功能,以及按键伴有声音提示。
五)程序流程图:开始 TO中断初始化保护现场进入功能调用显示定时初值校正程序子程序N Y键按下, 1S到,Y N加1S处理整点到NY恢复现场,中断返回按时间鸣叫次数主程序流程图 T0中断计时程序流程图T1中断保护现场T1中断服务程序流程图秒表/闪烁,时钟调时闪烁加10MS处理闪烁处理恢复现场,中断返回六)电路图七)程序清单:中断入口程序 ;; DISPFIRST EQU 30H BELL EQU P1.4CONBS EQU 2FHOUTPX EQU P2 ;P2位选OUTPY EQU P0 ;P0段选INP0 BIT P1.0INP1 BIT P1.1INP2 BIT P1.2ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回;QQQQ:MOV A,#10HMOV B,79HMUL ABADD A,78HMOV CONBS,ABSLOOP:LCALL DS20MSLCALL DL1SLCALL DL1SLCALL DL1SDJNZ CONBS,BSLOOPCLR 08HAJMP START;; 主程序 ;;START:MOV R0,#00H ;清70H-7AH共11个内存单元MOV R7,#80H ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用) MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50MS×20)MOV DISPFIRST ,#70HSTART1: LCALL DISPLAY ;调用显示子程序JNB INP0,SETMM1 ;P1.0口为0时转时间调整程序JNB INP1,FUNSS ; 秒表功能,P1.1按键调时时作减1加能JNB INP2,FUNPT ;STOP,PUSE,CLRJNB P1.3,TSFUNSJMP START1 ;P1.0口为1时跳回START1SETMM1: LJMP SETMM ;转到时间调整程序SETMM FUNSS: LCALL DS20MSJB INP1,START1WAIT11: JNB INP1,WAIT11CPL 03HMOV DISPFIRST,#00H :显示秒表数据单元MOV 70H,#00HMOV 71H,#00HMOV 76H,#00HMOV 77H,#00HMOV 78H,#00HMOV 79H,#00HAJMP START1FUNPT: LCALL DS20MSJB INP2,START1WAIT22: JNB INP2,WAIT21CLR ET0CLR TR0WAIT33: JB INP2,WAIT31 LCALL DS20MSJB INP2,WAIT33WAIT66: JNB INP2,WAIT61 MOV R0,#70H ;清70H-79H共10 个内存单元MOV R7,#0AH ;CLEARP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARP ;WAIT44: JB INP2,WAIT41 LCALL DS20MSJB INP2,WAIT44WAIT55: JNB INP2,WAIT51 SETB ET0SETB TR0AJMP START1WAIT21: LCALL DISPLAY AJMP WAIT22WAIT31: LCALL DISPLAY AJMP WAIT33WAIT41: LCALL DISPLAYAJMP WAIT44WAIT51: LCALL DISPLAYAJMP WAIT55WAIT61: LCALL DISPLAYAJMP WAIT66 TSFUN:LCALL DS20MSWAIT113:JNB P1.3,WAIT113JB 05H,CLOSESPMOV DISPFIRST,#50HMOV 50H,#0CHMOV 51H,#0AHDSWAIT:SETB EALCALL DISPLAYJNB P1.2,DSFINCJNB P1.0,DSDECJNB P1.3,DSSFU AJMP DSWAITCLOSESP:CLR 05HCLR BELLAJMP START1 DSSFU:LCALL DS20MS JB P1.3,DSWAIT LJMP DSSFUNN DSFINC:LCALL DS20MS JB P1.2,DSWAIT DSWAIT12:LCALL DISPLAY JNB P1.2,DSWAIT12 CLR EAMOV R0,#53H LCALL ADD1MOV A,R3CLR CCJNE A,#60H,ADDHH22ADDHH22:JC DSWAITACALL CLR0AJMP DSWAITDSDEC:LCALL DS20MSLCALL DISPLAYDSWAITEE:LCALL DISPLAYJNB P1.0,DSWAITEECLR EAMOV R0,#53HLCALL SUB1LJMP DSWAIT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关T0中断允许CLR TR0 ;关闭定时器T0JB 03H,FSSMOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0MOV R0,#79H ;指向小时计时单元(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志JB 03H,OUTT0 ;秒表时最大数为99CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;LCALL BAOJPOP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断RETI ;中断返回 ;秒表计时程序(10MS加1),低2位为0.1、0.01秒,中间2位为秒,最高位为分。
基于51单片机电子时钟设计
基于51单片机电子时钟设计51单片机是一种非常常见的单片机,被广泛应用于各种电子设备中。
在本文中,我将基于51单片机设计一个电子时钟。
首先,我们需要收集各种元器件,包括51单片机、数码管显示模块、电容、电阻、晶体振荡器等。
接下来,我们将进行硬件连接。
首先,将数码管显示模块连接到单片机的相应引脚上。
数码管显示模块通常由多个七段数码管组成,每个七段数码管有共阴极和共阳极两种类型,根据具体的数码管型号选择适当的连接方式。
接下来,连接晶体振荡器到单片机上。
晶体振荡器通常用于提供时钟信号,给单片机提供准确的时钟频率。
选择适当的晶体振荡器频率,将其连接到单片机的相应引脚上。
同时,还需要连接其他的元件,如电容和电阻。
电容用于稳定电压,在电路中通常用作滤波器。
选择合适的电容,将其连接到电源引脚上。
电阻用于限制电流和调整电压,根据需要选择合适的电阻值,并将其连接到相应的引脚上。
接下来,我们将进行软件编程。
首先,我们需要在编程环境中选择适当的编程语言,比如C语言。
然后,我们需要编写代码来实现时钟的各种功能。
首先,我们需要初始化单片机的引脚。
这可以通过设置相应的寄存器来实现,以确保单片机正常工作。
接下来,我们需要编写代码来实现时钟的显示功能。
我们可以使用循环来不断刷新数码管显示,以确保显示的时钟数值实时更新。
可以通过读取单片机内部的计时器或使用外部的定时模块来获取当前的时间,并将其转换为数码管可以显示的格式。
除了显示功能之外,还可以添加其他功能,比如闹钟、定时器等。
闹钟功能可以通过检测当前时间和设置的闹钟时间来触发相应的提醒。
定时器功能可以用来设置特定的时间间隔,并在到达设定时间时触发相应的操作。
总结起来,基于51单片机设计一个电子时钟需要进行硬件连接和软件编程。
通过合理的硬件连接和编写精确的代码,我们可以实现一个功能齐全的电子时钟,满足各种需求。
基于51单片机的电子时钟设计
基于51单片机的电子时钟设计
电子时钟是一种使用电子元件和计算机技术制造的时计,它可以显示年、月、日、时、分、秒等时间信息,并且具有显示精确、功能齐全、操
作简便等特点。
本文将基于51单片机设计一个电子时钟。
一、硬件设计:
1.时钟模块:我们可以使用DS1302时钟模块作为实时时钟芯片,它
可以提供精确的时间信息,并且可以通过单片机与之进行通信。
2.显示模块:我们可以使用共阳数码管进行时间的显示,将时钟设计
成6位7段显示器。
3.按键模块:我们可以使用按键作为输入方式,通过按键调整时间信息。
二、软件设计:
1.初始化:首先,我们需要初始化时钟模块和显示模块,使它们正常
工作。
同时,设置时钟的初始时间为系统当前时间。
2.获取时间:通过与时钟模块的通信,获取当前的时间信息,包括年、月、日、时、分、秒等。
3.显示时间:将获取到的时间信息通过显示模块显示出来,分别显示
在6个数码管上。
4.时间调整:通过按键模块的输入,判断用户是否需要调整时间。
如
果需要,可以通过按键的不同组合来调整时、分、秒等时间信息。
5.刷新显示:通过不断更新显示模块的输入信号来实现时钟的流动性,保持秒针不断运动的效果。
6.时间保存:为了保证时钟断电后依然能够保持时间,我们需要将时
钟模块获取到的时间信息保存在特定的EEPROM中。
7.闹钟功能:可以通过按键设置闹钟,当到达闹钟时间时,会通过蜂
鸣器发出响声。
以上就是基于51单片机的电子时钟设计方案。
通过对硬件和软件的
综合设计,我们可以实现一个功能齐全的电子时钟。
基于51单片机定时器的电子时钟设计
基于51单片机定时器的电子时钟设计电子时钟是一种集计时、显示时间等功能于一体的电子设备。
它可以准确地显示当前的时间,并通过定时器控制乃至更新时间。
本文将介绍基于51单片机定时器的电子时钟设计。
设计步骤如下:步骤一:硬件设计首先,需要准备以下硬件元件:1.51单片机:作为主要控制单元;2.DS1302实时时钟芯片:用于计时和保存时间数据;3.16x2字符LCD显示屏:用于显示时间;4.4x4矩阵键盘:用于调整时间和设置闹钟;5.蜂鸣器:用于报时功能;6.电位器:用于调整LCD背光亮度。
将这些硬件元件按照电路图连接起来,注意正确连接引脚和电源。
步骤二:软件设计在51单片机上编写程序,实现以下功能:1.初始化:a.初始化DS1302实时时钟芯片,设置初始时间;b.初始化LCD显示屏;c.初始化矩阵键盘;2.获取时间:a.从DS1302芯片读取当前时间;3.显示时间:a.将时间数据转换为字符,并在LCD上显示出来;4.键盘输入:a.监测矩阵键盘输入,判断用户按下的是哪个键;b.根据不同的键,执行相应的操作,如设置时间、设置闹钟等;5.闹钟功能:a.设置闹钟时间,当当前时间与闹钟时间相同时,触发蜂鸣器报时;b.可以通过按键来设置闹钟时间和开启/关闭闹钟功能。
以上是基本的电子时钟功能,可以根据实际需求进行扩展和添加其他功能。
步骤三:测试与调试步骤四:优化与扩展在基本功能正常运行的基础上,可以对电子时钟进行优化和扩展。
添加一些实用的功能,如温湿度显示、日期显示、闹钟音乐选择等,以提高电子时钟的实用性和用户体验。
总结:本文介绍了基于51单片机定时器的电子时钟设计步骤,包括硬件设计和软件编程。
通过该设计,可以实现准确显示时间、调整时间、设置闹钟等功能。
为了使电子时钟更加实用,可以根据需要进行优化和扩展。
51单片机电子时钟(C语言)
#include <reg51.h>#include <intrins.h>#define uchar unsigned char //宏定义#define uint unsigned intuchar sec,min,hour,sec50,jishu,dtp2; //sec、min、hour、为显示单元,sec50为60秒计数单元,jishu为扫描数码管计数单元uchar sec1,min1,hour1; //时间中介单元uchar nzmin,nzhour,nzjishu=0,dispjishu=0; //闹钟分、时定义uchar data nzbit=0; //闹钟标志位,闹钟默认为开启uchar data dispbit=0; //显示标志位,默认显示当前时间uchar data disp[8]; //秒、分、时个位与十位存放数组及‘—’uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0-9sbit KEYmin=P3^2; //分加1按钮sbit KEYhour=P3^3; //时加1按钮sbit LABA=P1^0; //闹钟输出I/O口sbit NZdisplay=P3^4; //闹钟显示按钮,按住不放显示闹钟时间,放开则显示当前时间sbit KEYnzmin=P3^5; //闹钟分加1按钮sbit KEYnzhour=P3^6; //闹钟时加1按钮sbit KEYoff=P3^7; //关闭闹钟按钮,按第一次为关闭,第二次为开启void display(); //显示函数声明void keyscan(); //按键扫描函数声明void naozhong(); //闹钟判别函数声明void keynz(); //闹钟按键函数声明void main(){sec=0; //时间初始化为00—00—00min=0;hour=0;sec1=0; //显示单元初始化为00—00—00min1=0;hour1=0;nzmin=01; //闹钟初始时间为01:01nzhour=01;jishu=0;dtp2=0xfe;P0=0xff;TMOD=0x11; //设T0、T1为模式1IE=0x8a;TH0=0xb8; //T0定时20msTL0=0x0;TH1=0xfc; //T1定时1msTL1=0x66;TR0=1;TR1=1;while(1){display(); //调用显示子程序keyscan(); //调用按键子程序keynz(); //调用闹钟按键子程序}}void t0int() interrupt 1 //T0定时中断程序{TH0=0xb8;TL0=0x0;sec50++;if(sec50==50) //对20ms计数50次即1s{sec50=0; //清秒计数器,为下次做准备naozhong(); //调用闹钟判别子程序sec1++; //秒加1}if(sec1==60) //对秒计数60次即1min{sec1=0;min1++; //分加1}if(min1==60) //对分计数60次即1hour{min1=0;hour1++; //时加1}if(hour1==24){hour1=0;}if(dispbit==0) //判断显示标志位是否为0,为0显示当前时间{sec=sec1;min=min1;hour=hour1;}else //显示标志位为1,显示闹钟时间{min=nzmin; //将闹钟时间给显示单元hour=nzhour;}}void t1int() interrupt 3 //T1中断程序{TH1=0xfc;TL1=0x66;P2=0xff; //关闭所有数码管P2=dtp2;dtp2=_crol_(dtp2,1);P0=disp[jishu];jishu++;if(jishu==8) //扫描完8位数码管清0,重新从第一位开始扫描{jishu=0;}}void delay(uint x) //延时函数uchar i;while(x--){for(i=0;i<120;i++);}}void display() //显示子程序{disp[7]=table[sec%10]; //秒个位显示disp[6]=table[sec/10]; //秒十位显示disp[4]=table[min%10]; //分个位显示disp[3]=table[min/10]; //分十位显示disp[1]=table[hour%10]; //时个位显示disp[0]=table[hour/10]; //时十位显示disp[2]=0xbf; //显示‘_’disp[5]=0xbf;}void keyscan() //按键子程序{delay(20); //延时消抖if(KEYmin==0)//时间分加1按钮{min1++; //时间分加1if(min1==60){min1=0;hour1++; //分加到60对时加1}if(hour1==24){hour1=0;}while(!KEYmin); //等待按键放开}delay(20); //延时消抖if(KEYhour==0) //时间时加1按钮{hour1++; //时间时加1if(hour1==24){hour1=0;}while(!KEYhour); //等待按键放开}void naozhong() //闹钟判断{if(nzbit==0) //判断闹钟标志位,0为开启闹钟判断,1为关闭闹钟{if(min1==nzmin) //闹钟与时间分的判别if(hour1==nzhour) //闹钟与时间时的判别LABA=0; //时间分、时与闹钟分、时相等就打开蜂鸣器}elseLABA=1;}void keynz() //闹钟加、减及闹钟关闭、开启按键处理子程序{delay(20); //延时消抖if(KEYnzmin==0) //判别闹钟分加1按键{nzmin++; //闹钟分加1if(nzmin==60){nzmin=0;nzhour++; //闹钟分加到60对闹钟时加1if(nzhour==24)nzhour=0;}while(!KEYnzmin); //等待按键放开}delay(20); //延时消抖if(KEYnzhour==0) //判别闹钟时加1按键{nzhour++; //闹钟时加1if(nzhour==24)nzhour=0;while(!KEYnzhour); //等待按键放开}if(KEYoff==0)//判断关闭闹钟按键是否按下{delay(20); // 延时消抖nzjishu++;if(nzjishu==1) //判断是否为第一次按下{nzbit=1; //第一次按下关闭闹钟if(nzjishu==2) //判断是否为第二次按下{nzjishu=0; //第二次按下清计数单元nzbit=0; // 第二次按下开启闹钟判别}while(!KEYoff); //等待按键放开}if(NZdisplay==0) //判别显示切换闹钟按键是否按下{dispjishu++;if(dispjishu==1) //第一次按下显示闹钟时间{dispbit=1; //第一次按下,把标志位置1,显示切换为闹钟时间}if(dispjishu==2) //第二次按下显示为当前时间{dispjishu=0; //清零,重新计数dispbit=0; //第二次按下清零显示标志位,显示切换为当前时间}while(!NZdisplay); //等待按键放开}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P11=~P11;
}
}
/*************************************
定时器T1中断,nu3m为秒针,nu4m为分针
nu5m为时针,miaoshi就是秒针的十位,
miaoge就是秒针的个位;
fenshi分针的十位,
fenge分针的个位;
shishi时针的十位,
delay1ms(1);
P0=table[miaoge];
P2=0x7f;//打开数码管P23
delay1ms(1);
}
/*****************************************************
分针显示子函数
*****************************************************/
if(nu5m==24)
{
nu5m=0;
}
shishi=nu5m/10;
shige=nu5m%10;
}
}
unsigned int nu4m=0,nu5m=0;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
unsigned char code tabletwo[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
每按S2(P16)一次,秒针加一,加满60归0;
每安S3(P15)一次,分针加一,加满60归0;
每按S4(P14)一次,时针加一,加满60归0;
********************************************************/
void keyscan()
{
if(S1==0)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit S4=P3^2;
sbit S3=P3^3;
sbit S2=P3^4;
sbit S1=P3^5;
uchar t,fenshi,fenge,miaoshi,shishi,shige,miaoge,nu1m=0,nu2m=0,nu3m=0;
/************************************************
用定时器T0方式一控制P10,P11每250ms闪烁一次,
用定时器T1方式1控制时分秒,数码管前两个为时针(fe,fd)
中间为分针(f7,ef),最后两个为秒针(bf,7f)
*************************************************/
displayshi(shishi,shige);
keyscan();
}
}
void T0_time() interrupt 1 //T0中断
{ TH0=(65536-45872)/256;//t0装入初值
TL0=(65536-45872)%256;
nu1m++;
if(nu1m==5)
{ nu1m=0;
TL1=(65536-45872)%256;
EA=1;//打开总中断
ET0=1;//打开定时器0中断
ET1=1;//ET时器0
TR1=1;//启动定时器1
while(1)//等待中断
{displaymiao(miaoshi,miaoge);
displayfen(fenshi,fenge);
{P10=1;//初始LED关闭
P11=1;//初始LED关闭
TMOD=0x11;//T0,T1做定时器工作在工作方式1,00010001B
TH0=(65536-45872)/256;//T0装入初值
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;//T1装入初值
nu5m=0;//清0
}
while(!S4);//释放按键
}
}
}
/***************************************************
主函数
****************************************************/
void main()
void displayfen(uchar fenshi,uchar fenge) //分钟显示子函数
{P0=tabletwo[fenshi];
P2=0xf7;//打开数码管P24
delay1ms(1);
P0=tabletwo[fenge];
P2=0xef;//打开数码管P23
delay1ms(1);
}
}
}
if(S3==0)
{
delay1ms(10);//按键消抖
if(S3==0)
{
nu4m++;
if(nu4m==60)
{
nu4m=0;//清0
}
while(!S3);//释放按键
}
}
if(S4==0)
{
delay1ms(10);//消抖
if(S4==0)
{
nu5m++;
if(nu5m==24)
{
{P0=table[shige];
P2=0xfd;
delay1ms(1);
P0=table[shishi];
P2=0xfe;
delay1ms(1);
}
/********************************************************
按键控制函数,每按S1(P17)一次,T1开始或停止
秒针显示子函数
*******************************************************/
void displaymiao(uchar miaoshi,uchar miaoge) //秒针显示子函数
{P0=table[miaoshi];
P2=0xbf;//打开数码管P24
shige时针的个位;
o(︶︿︶)o唉,英语不好伤不起,用汉语拼音挺时尚的吧。
元芳,你怎么看?
*************************************/
void T1_time() interrupt 3
{ TH1=(65536-45872)/256;//T1装入初值
TL1=(65536-45872)%256;
/*******************************
1ms延时函数
*******************************/
void delay1ms(uint t)
{
uchar j;
while(t--)
{for(j=0;j<115;j++)//1ms基准延时程序
{;}
}
}
/******************************************************
nu2m++;
if(nu2m==20)
{nu2m=0;
nu3m++;
if(nu3m==60)
{nu3m=0;
nu4m++;
}
miaoshi=nu3m/10;
miaoge=nu3m%10;
if(nu4m==60)
{ nu4m=0;
nu5m++;
}
fenshi=nu4m/10;
fenge=nu4m%10;
{
delay1ms(10);
if(S1==0)
{
while(!S1);
{
TR1=~TR1; //启动或停止定时器T1,既时分秒
}
}
}
if(S2==0)
{
delay1ms(10);//按键消抖
if(S2==0)
{
while(!S2);//等待按键释放
nu3m++;
if(nu3m==60)
{
nu3m=0;//清0
}
/******************************************************
时针显示子函数
******************************************************/
void displayshi(uchar shishi,uchar shige)//时针显示子函数