做一个电子钟,利用六个数码管显示分、秒。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
要求: 做成一个电子钟,利用实验箱上的六个数码管显示分、秒,做成一个电子钟。跪求:277508614@qq.com

你搞个1302的时钟芯片 找个1302的程序稍加改动 就可以用了

#include
#define uchar unsigned char
#define uint unsigned int
#define ON 0
#define OFF 1
#define LEDBus P0
sbit MIAO =P0^5;
sbit HOU_S=P1^0;
sbit HOU_G=P1^1;
sbit MIN_S=P1^2;
sbit MIN_G=P1^3;
sbit H_KEY=P3^2;
sbit M_KEY=P3^3;
bit SHAN;
uchar second,minute,hour;
uchar code LEDTab[]={0x5f,0x0a,0x9d,0xd5,0xc6,0xd3,0xda,0x45,0xdf,0xc7};
void delay(uchar t);
void init();
void display();
void min_tiao();
void hou_tiao();
void main()
{
init();
while(1)
{
if(!H_KEY) hou_tiao();
if(!M_KEY) min_tiao();
display();
}
}

void init()
{
TMOD=1;TH0=0X3C;TL0=0XB0;
ET0=1;TR0=1;EA=1;
}

void display()
{
LEDBus=LEDTab[minute%10];
MIN_G=0;
delay(1);
MIN_G=1;

LEDBus=LEDTab[minute/10];
MIN_S=0;
delay(1);
MIN_S=1;

LEDBus=LEDTab[hour%10];
MIAO=SHAN;
HOU_G=0;
delay(1);
HOU_G=1;


LEDBus=LEDTab[hour/10];
HOU_S=0;
delay(1);
HOU_S=1;

}

void min_tiao()
{
while(!M_KEY) display();
second=0;minute++;
if(minute==60) minute=0;
}

void hou_tiao()
{
while(!H_KEY) display() ;
second=0;hour++;
if(hour==24) hour=0;
}

void delay(uchar t)
{
uchar i;
for(;t>0;t--)
for(i=124;i>0;i--);
}


void timer0() interrupt 1
{
uchar tim1,tim2;
TL0=TL0+0XB0;TH0=0X3C;
tim1++;
if(tim1==10)
{
SHAN=!SHAN;
tim1=0;tim2++;
if(tim2==2)
{
tim2=0;second++;
if(second==60)
{
second=0;minute++;
if(minute==60)
{
minute=0;hour++;
if(hour==24) hour=0;
}
}
}
}
}
芯片用51单片机

/*************************时钟程序**************************/
/*此程序为用采用51单片机实现的一个24小时循环显示程序*/
/*主要功能由时钟显示(00-00-00格式)、时间调整功能*/
/*程序采用定时查询方式实现时间更新,键盘查询方式实现时间调整*/
/********彭思良2008-12-27于长江大学电子创新实验室**********/
ORG 00H
AJMP MAIN
/*主程序开始,初始化、定义变量*/
MAIN:

MOV 30H,#00H ;按键缓冲区
MOV 40H,#00H ;1S标志缓冲
MOV 50H,#00H ;延时子程用
MOV 51H,#00H ;延时子程用

MOV 61H,#00H ;秒个位缓冲区
MOV 62H,#00H ;秒十位缓冲区
MOV 63H,#00H ;分个位缓冲区
MOV 64H,#00H ;分十位缓冲区
MOV 65H,#00H ;时个位缓冲区
MOV 66H,#00H ;时十位缓冲区

KEY EQU 30H ;按键
FLAG EQU 40H ;1S标志
SECL EQU 61H ;秒个位
SECH EQU 62H ;秒十位
MINL EQU 63H ;分个位
MINH EQU 64H ;分十位
HOUL EQU 65H ;时个位
HOUH EQU 66H ;时十位

MOV DPTR, #TBL ;查表指针
COUNT1 EQU 20 //20*50000uS
COUNT2 EQU -46000 //定时器预置数

//显示初始化00-00-00
START:
MOV R0, #07H ;秒个位偏移地址
MOV A, #00H ;0笔画在表中地址
LCALL DISPLAY ;显示秒个位
MOV A, #00H
LCALL DISPLAY
MOV A, #0BH
LCALL DISPLAY
MOV A, #00H
LCALL DISPLAY
MOV A, #00H
LCALL DISPLAY
MOV A, #0BH
LCALL DISPLAY
MOV A, #00H
LCALL DISPLAY
MOV A, #00H
LCALL DISPLAY

MOV TMOD, #01H ;使用计时器0,模式1
TIMER1: MOV FLAG, #01H ;清除1S标志,置为1,表示不到1S
TIMER2: MOV R7, #COUNT1 ;设置定时次数
AGAIN: MOV TH0, #HIGH COUNT2 ;定时器预置
MOV TL0, #LOW COUNT2
SETB TR0 ;计时开始

/*********键盘扫描模块**********/
/*K1是否按下*/

LCALL SCAN ;扫描0
MOV A, KEY
ANL A, #0FFH
ADD A, #02H
JZ SCAN1 ;按键K1按下,转到SCAN1
LJMP DIS ;没有按下,转到显示模块

/****************K1第一次按下,进入时间调整程序*************/
SCAN1:
;-----------以下实现秒闪烁两次
LCALL DIS02 ;秒显示一次
LCALL DEL ;延时
MOV A, #0AH ;秒个位黑屏
MOV R0, #07H
LCALL DISPLAY1
MOV A, #0AH ;秒十位黑屏
MOV R0, #06H
LCALL DISPLAY1
LCALL DEL
LCALL DIS02 ;秒再次显示
LCALL DEL

LCALL SCAN ;扫描1
MOV A, KEY
SECK2:
ANL A, #0FFH
CJNE A, #0FDH, SECK3 ;K2是否按下,没有则转到SECK3
;-----------K2按下,以下为秒+1更新显示
INC SECL ;秒+1
MOV A, SECL
LCALL CMP10
JZ SEC11
LJMP DIS001
SEC11:
MOV SECL, #00H
INC SECH
MOV A, SECH
LCALL CMP06
JZ SEC12
LJMP DIS002
SEC12:
MOV SECH, #00H
LJMP DIS002
SECK3:
CJNE A, #0FBH, MINK1 ;是否K3按下,没有则转到MINK1
;-----------K3按下,以下为秒-1更新显示
DEC SECL ;秒-1
MOV A, SECL
ADD A, #1
JZ SEC13
LJMP DIS001
SEC13:
MOV SECL, #09H
DEC SECH
MOV A, SECH
ADD A, #1
JZ SEC14
LJMP DIS002
SEC14:
MOV SECH, #05H
LJMP DIS002

MINK1:

CJNE A, #0FEH, SCAN1 ;按键K1是否第二次按下,没有继续扫描
;-------------------------------------------K1第二次按下
SCAN2:
LCALL DIS04 ;分显示一次
LCALL DEL ;延时
MOV A, #0AH ;分个位黑屏
MOV R0, #04H
LCALL DISPLAY1
MOV A, #0AH ;分十位黑屏
MOV R0, #03H
LCALL DISPLAY1
LCALL DEL
LCALL DIS04 ;分再次显示
LCALL DEL

LCALL SCAN ;扫描2
MOV A, KEY
MINK2:
ANL A, #0FFH
CJNE A, #0FDH, MINK3 ;K2是否按下 ,没有按下则转到MINK3
;-----------K2按下,以下为分+1更新显示
INC MINL
MOV A, MINL
LCALL CMP10
JZ MIN21
LJMP DIS003
MIN21:
MOV MINL, #00H
INC MINH
MOV A, MINH
LCALL CMP06
JZ MIN22
LJMP DIS004
MIN22:
MOV MINH, #00H
LJMP DIS004
MINK3:
CJNE A, #0FBH, HOUK1 ;K3是否按下 ,没有按下则转到HOUK1
;-----------K3按下,以下为分-1更新显示
DEC MINL
MOV A, MINL
ADD A, #1
JZ MIN23
LJMP DIS003
MIN23:
MOV MINL, #09H
DEC MINH
MOV A, MINH
ADD A, #1
JZ MIN24
LJMP DIS004
MIN24:
MOV MINH, #05H
LJMP DIS004

HOUK1:
CJNE A, #0FEH, SCAN2
;-------------------------------------------K1第二次按下
SCAN3:
LCALL DIS06 ;时显示一次
LCALL DEL ;延时
MOV A, #0AH ;时个位黑屏
MOV R0, #01H
LCALL DISPLAY1
MOV A, #0AH ;时十位黑屏
MOV R0, #00H
LCALL DISPLAY1
LCALL DEL
LCALL DIS06 ;时再次显示
LCALL DEL

LCALL SCAN ;扫描3
MOV A, KEY
HOUK2:
ANL A, #0FFH
CJNE A, #0FDH, HOUK3 ;K2是否按下 ,没有则转到HOUK3
;-----------K2按下,以下为时+1更新显示
INC HOUL
MOV A, HOUL
LCALL CMP04
JZ SCAN31 ;HOUL=4,转到HOUH=2?
LJMP CM110 ;HOUL!=4,转到HOUL=10?
SCAN31:
MOV A, HOUH
LCALL CMP02
JZ SCAN32 ;HOUH=2,转到SCAN32
LJMP DIS005 ;HOUH!=2,显示更新
SCAN32:
MOV HOUL, #00H
MOV HOUH, #00H
LJMP DIS006
CM110:
MOV A, HOUL
LCALL CMP10
JZ SCAN33 ;等于10,转到SCAN33
LJMP DIS005
SCAN33:
MOV HOUL, #00H
INC HOUH
LJMP DIS006
HOUK3:
CJNE A, #0FBH, EXITK1 ;K3是否按下 ,没有按下则转到EXITK1
;-----------K3按下,以下为时-1更新显示
DEC HOUL
MOV A, HOUL
ADD A, #1
JZ SCAN34 ;HOUL=FFH,
LJMP DIS005 ;HOUL!=FFH显示更新
SCAN34:
MOV HOUL, #09H
DEC HOUH
MOV A, HOUH
ADD A, #1
JZ SCAN35
LJMP DIS006
SCAN35:
MOV HOUL, #03H
MOV HOUH, #02H
LJMP DIS006

EXITK1:
CJNE A, #0FEH, SCAN3//按键K1是否第四次按下
//K1第四次按下
LCALL DEL

;............1S显示更新模块
DIS:
MOV A, FLAG
JNZ WAIT //检测1S标志显示处理
INC SECL //秒加1
MOV A, SECL
LCALL CMP10
JNZ DIS0001 //是否为0,为0则下一步秒处理,不为0则跳转
MOV SECL, #00H
INC SECH
MOV A, SECH
LCALL CMP06
JNZ DIS0002 //是否为0,为0则下一步分处理,不为0则跳转
MOV SECH, #00H
INC MINL
MOV A, MINL
LCALL CMP10
JNZ DIS0003 //是否为0,为0则下一步分处理,不为0则跳转
MOV MINL, #00H
INC MINH
MOV A, MINH
LCALL CMP06
JNZ DIS0004 //是否为0,为0则下一步时处理,不为0则跳转
MOV MINH, #00H
INC HOUL
MOV A, HOUL
LCALL CMP04
JNZ CM10 //是否为0,为0则下一步时处理,不为0则跳转
MOV A, HOUH
LCALL CMP02
JNZ DIS0005
AJMP MAIN

CM10:
MOV A, HOUL
LCALL CMP10
JNZ DIS0005 //是否为10,为10则下一步处理,不为10则跳转
MOV HOUL, #00H
INC HOUH
LJMP DIS0006 //跳转,更新所有位数

/*等待计时器的一次循环是否完毕*/
WAIT:
JNB TF0, WAIT
CLR TF0
CLR TR0
DJNZ R7, AGAIN1
/*1S计时完毕,时间显示标志R0置0,进行加时处理*/
MOV FLAG, #00H
LJMP TIMER2

AGAIN1:
LJMP AGAIN

DIS0001:
LCAll DIS01
LJMP TIMER1
DIS0002:
LCALL DIS02
LJMP TIMER1

DIS0003:
LCALL DIS03
LJMP TIMER1
DIS0004:
LCALL DIS04
LJMP TIMER1
DIS0005:
LCALL DIS05
LJMP TIMER1
DIS0006:
LCALL DIS06
LJMP TIMER1

;------------- DIS001
DIS001:
LCALL DIS01
LJMP SCAN1

DIS002:
LCALL DIS02
LJMP SCAN1

DIS003:
LCALL DIS03
LJMP SCAN2

DIS004:
LCALL DIS04
LJMP SCAN2
DIS005:
LCALL DIS05
LJMP SCAN3

DIS006:
LCALL DIS06
LJMP SCAN3

;-------------
DIS01:
LCALL DIS1
RET

DIS02:
LCALL DIS1
LCALL DIS2
RET

DIS03:
LCALL DIS1
LCALL DIS2
LCALL DIS3
RET

DIS04:
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DIS4
RET
DIS05:
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DIS4
LCALL DIS5
RET

DIS06:
LCALL DIS1
LCALL DIS2
LCALL DIS3
LCALL DIS4
LCALL DIS5
LCALL DIS6
RET

DIS1:
MOV A, SECL //显示秒个位
MOV R0, #07H
LCALL DISPLAY1
RET
;-------------
DIS2:
MOV A, SECH //显示秒十位
MOV R0, #06H
LCALL DISPLAY1
RET
;-------------
DIS3:
MOV A, MINL //显示分个位
MOV R0, #04H
LCALL DISPLAY1
RET
;-------------
DIS4:
MOV A, MINH //显示分十位
MOV R0, #03H
LCALL DISPLAY1
RET
;-------------

DIS5:
MOV A, HOUL //显示时个位
MOV R0, #01H
LCALL DISPLAY1
RET
;-------------

DIS6:
MOV A, HOUH //显示时十位
MOV R0, #00H
LCALL DISPLAY1
RET

;-------------
DISPLAY: //显示初始化
MOVC A, @A+DPTR //查外存数据表中A+DPTR内容送A
MOV P2, #80H //立即数80H(10000000)送P2口,经U2译码后,使U13有效
MOVX @R0,A //累加器内容送外部R0存储地址单元,使相应数码管显
DEC R0
RET
;-------------显示查表数据
DISPLAY1:
MOVC A, @A+DPTR //查外存数据表中A+DPTR内容送A
MOV P2, #80H //立即数A0H(10100000)送P2口,经U2译码后,使U16有效
MOVX @R0,A //累加器内容送外部R0存储地址单元,使相应数码管显
RET
;-------------
CMP10: //比较A中的数是否等于10
ADD A, #0F6H
RET
;-------------
CMP06: //比较A中的数是否等于6
ADD A, #0FAH
RET
;-------------
CMP05: //比较A中的数是否等于5
ADD A, #0FBH
RET
;-------------
CMP04: //比较A中的数是否等于4
ADD A, #0FCH
RET
;-------------
CMP02: //比较A中的数是否等于2
ADD A, #0FEH
RET
;------------- 数码管笔画表
TBL:
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
DB 00H,40H ; -

;------------- 键盘扫描子程序
SCAN:
MOV P2,#0A0H
MOVX A,@R0
MOV KEY,A
RET

;-------------延时子程序

DEL:
DJNZ 50H,DEL
DJNZ 51H,DEL
RET

END

对呀,你想问什么?

你想问什么?

你想问什么?

  • 六位数码管时钟
    答:68.点阵电子显示屏--毕业设计 69.电子电路的电子仿真实验研究 70.基于51单片机的多路温度采集控制系统 71.基于单片机的数字钟设计 72.小功率不间断电源(UPS)中变换器的原理与设计 73.自动存包柜的设计 74.空调器微电脑控制系统 75.全自动洗衣机控制器 76.电力线载波调制解调器毕业设计论文 77.图书馆...
  • 单片机六位数码管电子钟程序问题,请高手指点,分觉对给够
    答:我想问下,我用六位数码管设计的电子钟,别人给了个八位数码管的显示程序我,八位显示时间是:12-00-00(表示十二点整)但我用六位数码管仿真只能看到:12-00-(秒看不到了),请问知... 我想问下,我用六位数码管设计的电子钟,别人给了个八位数码管的显示程序我,八位显示时间是:12-00-00(表示十二点整)但...
  • 大学数字电子技术的课程设计:数字式电子钟的设计或交通灯控制电路设计...
    答:(1)设计一个有“时”、“分”、“秒”(12小时59分59秒)显示,且有校时功能的电子钟; (2)显示采用六只LED数码管分别显示时分秒; (3)时间的小时、分可手动调整; (4)采用+5V电源供电。三.题目分析: 根据题目,我们可以分析出:数字电子钟是由多块数字集成电路构成的,其中有振荡器,分频器,校时电路,计数器,...
  • AT89C52单片机六位数码管电子钟和8×8点阵显示屏组合程序
    答:能做到。用三个口,就可以轻松做到。见下图:
  • 51单片机做数字电子钟
    答:而具有时、分和秒的数字电子钟只能以1s定时,所以要实现实现1s定时,必须采用软件计数和定时器定时相结合的方法。每1s定时到,修改显示值,送6位LED显示。本课题需用6个LED数码管显示时间值,并且需调整键、加1键、确认键等控制键。在Dais-52PH+单片机实验箱中,6位LED数码显示器的字形口地址为0FFDCH,字位口地址为...
  • 急求一个基于AT89s51单片机的简易电子钟
    答:看看图片效果怎样,要的话发给 你分享^_^^_^^_^...已经发给你分享了,希望对你有所帮助
  • 帮忙解释下这个单片机电子钟原理图,谢谢。5分!
    答:这个电路是用6为数码管来显示数字的,复位电路是单片机能工作的比较重要的电路,主要是让单片机复位的,从原点开始运行,后面的两个74LX是两个锁存器,另外从这个图中可以看出是通过单片机内部进行定时,而不是用专用的时间芯片,利用单片机的定时器进行控制的 ...
  • 利用定时器定时方式,编写一个电子时钟的程序,要求在数码管上显示:时分...
    答:2011-12-16 用六个数码管编电子时钟程序,汇编程序是什么?要求:用定时器T... 2013-04-02 急求一个用AT89C52控制,2个4位数码管(用74HC59... 5 2010-12-26 求一个电子钟的程序,要求4位数码管显示时分秒,秒是功能转换,... 2 2009-11-29 做一个电子钟,利用六个数码管显示分、秒。 2 2010-12-...
  • 急!基于51单片机设计6位显示时分秒电子钟(求硬件电路图)
    答:这个很简单,你用一个51单片机最小系统,加上4x4矩阵键盘,8个数码管,一个蜂鸣器就OK了,自己写个键盘程序,利用定时器就可以了,这是数码管电路部分,加到最小系统中就行了,记的P0口加上拉电阻
  • 谁有数字电子技术课程设计关于电子钟的
    答:谁有数字电子技术课程设计关于电子钟的 100 设计和要求:设计一个能显示分、时并有闹钟的数字电子钟逻辑电路,要求如下:1.由石英多谐振荡器和分频器产生1/60Hz标准分脉冲。2.计时电路为“分电路”和“时电路”,“闹铃电路”只... 设计和要求:设计一个能显示分、时并有闹钟的数字电子钟逻辑电路,要求如下:1....