电子时钟程序

电子时钟程序,第1张

//=======主函数==================================

ORG 0000H

LJMP MAIN

ORG000BH

LJMP T00

//ORG001BH

//LJMP T11

ORG 0030H

//=======程序初始化=============================

MAIN:

MOV TMOD,#11H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV TH1,#0F0H

MOV TL1,#0B0H

SETB EA

SETB ET0

// SETB ET1

SETB TR0

//橘段配 SETB TR1

CLR P3.4

MOV R7,#00H 秒值

MOV 30H,#00H 秒个位

MOV 31H,#00H 秒十位值

MOV 32H,#00H 分个位

MOV 33H,#00H 分十位

MOV 34H,#00H 时个位

MOV 35H,#00H 时十位

MOV 44H,#00H 秒表毫秒十燃纳位

MOV 45H,#00H 秒表秒毫秒百位

MOV 46H,#00H 秒表秒个位

MOV 47H,#00H 秒表秒十位

MOV 48H,#00H 秒表分个位

MOV 49H,#00H 秒表分十位

MOV P2,#0F0H P2口按键初始化

MOV 40H,#01H 数码管休眠值 /流水灯/秒表开关数

MOV 41H,#08H 流水灯循环值

MOV 42H,#00H 秒表暂停

// ACALL T11

//-----------------------------------------------

MAIN1:

MOV P0,#0FFH

MOV P1,#0FFH

MOV R0,40H

CJNE R0,#01H,ACL1

ACALL MAIN2时钟显示

ACL1:CJNE R0,#02H,ACL2

ACALL MAIN3秒表

ACL2:CJNE R0,#03H,ACL3

ACALL LED流水灯

ACL3:ACALL KEY 按键扫描

/圆指/ ACALL BAO定时报警

LJMP MAIN1

//=======报警子程序============================

BAO:MOV R4,33H

CJNE R4,#03H,YY1

CLR P3.2

ACALL KEY

LJMP YY2

YY1:CJNE R4,#05H,YY2

SETB P3.2

ACALL KEY

YY2:RET

//======时钟扫描子程序=======================

MAIN2:

MOV A,30H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.0

ACALL DELAY

MOV A,31H

MOV DPTR,#TAB

MOVC A,@A+ DPTR

MOV P0,A

CLR P1.1

SETB P1.0

ACALL DELAY

MOV A,32H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.2

SETB P1.1

ACALL DELAY

MOV A,33H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.3

SETB P1.2

ACALL DELAY

MOV A,34H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.4

SETB P1.3

ACALL DELAY

MOV A,35H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.5

SETB P1.4

ACALL DELAY

MOV P0,#7FH

MOV P1,#0EBH

ACALL DELAY

MOV P1,#0FFH

RET

//========秒表扫描子程序=========================

MAIN3:

MOV A,44H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.0

ACALL DELAY

MOV A,45H

MOV DPTR,#TAB

MOVC A,@A+ DPTR

MOV P0,A

CLR P1.1

SETB P1.0

ACALL DELAY

MOV A,46H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.2

SETB P1.1

ACALL DELAY

MOV A,47H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.3

SETB P1.2

ACALL DELAY

MOV A,48H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.4

SETB P1.3

ACALL DELAY

MOV A,49H

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

CLR P1.5

SETB P1.4

ACALL DELAY

MOV P0,#7FH

MOV P1,#0EBH

ACALL DELAY

MOV P1,#0FFH

RET

//=======定时器T0中断服务========================

T00:MOV TH0,#0D8H

MOV TL0,#0F0H

INC R7

CJNE R7,#64H,AA

MOV R7,#00H

//-------时钟跑值--------------------------------

TK1:INC 30H 每秒钟秒个位增一

MOV R6,30H

CJNE R6,#0AH,AA

MOV 30H,#00H

TK2:INC 31H

MOV R6,31H

CJNE R6,#06H,AA

MOV 31H,#00H

TK3:INC 32H

MOVR6,32H

CJNE R6,#0AH,AA

MOV32H,#00H

TK4:INC33H

MOVR6,33H

CJNE R6,#06H,AA

MOV33H,#00H

TK5:INC34H

MOVR5,34H

MOVR6,35H

CJNE R5,#04H,TK6

CJNE R6,#02H,TK6

MOV34H,#00H

MOV35H,#00H

TK6:CJNE R5,#0AH,AA

MOV34H,#00H

INC35H

//-------秒表跑值----------------------

AA:

MOV R5,42H

CJNE R5,#01H,TK7

INC 44H

TK7:MOV R5,44H

CJNE R5,#0AH,AA1

MOV 44H,#00H

INC 45H

MOV R5,45H

CJNE R5,#0AH,AA1

MOV 45H,#00H

INC 46H

MOV R5,46H

CJNE R5,#0AH,AA1

MOV 46H,#00H

INC 47H

MOV R5,47H

CJNE R5,#06H,AA1

MOV 47H,#00H

INC 48H

MOV R5,48H

CJNE R5,#0AH,AA1

MOV 48H,#00H

INC 49H

MOV R5,49H

CJNE R5,#06H,AA1

MOV 49H,#00H

AA1:RETI

//====定时器T1中断服务子程序====================

//T11:MOV TH1,#0F0H

// MOV TL1,#0B0H

// RETI

//******定时时间调整子程序*************************//

TBAO:

MOV 50H,#00H

MOV 51H,#00H

MOV 52H,#00H

MOV 53H,#00H

MOV 54H,#00H

MOV 55H,#00H

MOV R3,50H

DJNZ 30H,RET1

RET1: RET

//======键盘扫描子程序==========================

KEY:MOV P2,#0F0H

MOV R3,P2

CJNE R3,#0F0H,KE0

LJMP KK13

KE0:CJNE R3,#0E0H,KE1 P2.4行

MOV P2,#0EFH

JB P2.3,KK1 //用作调定时时间 K13 秒个位增一

ACALL DELAY1

ACALL TK1

KK1:JB P2.2,KK2 K14 秒十增一

ACALL DELAY1

ACALL TK2

KK2:JB P2.1,KK3 K15 分个位增一

ACALL DELAY1

ACALL TK3

KK3:JB P2.0,KE1 K16 分十位增一

ACALL DELAY1

ACALL TK4

KE1:MOV P2,#0DFH P2.5行

JB P2.3,KK4 K9 时个位增一

ACALL DELAY1

ACALL TK5

KK4:JB P2.2,KK5 K10 时十位增一

ACALL DELAY1

INC 35H

MOV R3,35H

CJNE R3,#03H,HH0

MOV 35H,#00H

LJMP KK5

HH0:CJNE R3,#02H,HH1

LJMP KK5

HH1:CJNE R3,#01H,HH2

LJMP KK5

HH2:MOV 35H,#00H

KK5:JB P2.1,KK6

ACALL DELAY1 K11开/关蜂鸣器

CPL P3.2

KK6:JB P2.0,KE2 K12 秒表暂停

MOV 42H,#00H

KE2:MOV P2,#0BFH P.6行

JB P2.3,KK7K5 时钟暂停/取消暂停

ACALL DELAY1

CPL ET0

KK7:JB P2.2,KK8 K6 显示/休眠/流水灯

ACALL DELAY2

INC 40H

MOV R3,40H

CJNE R3,#04H,KK8

MOV 40H,#01H

KK8:JB P2.1,KK9

// ACALL DELAY3 K7 秒表清0

MOV 44H,#00H

MOV 45H,#00H

MOV 46H,#00H

MOV 47H,#00H

MOV 48H,#00H

MOV 49H,#00H

KK9:JB P2.0,KE3 K8 秒表开始跑

MOV 42H,#01H

KE3:MOV P2,#7FH P2.7行

JB P2.3,KK10 K1 秒十位减一

ACALL DELAY1

MOV R3,31H

CJNE R3,#00H,JA1

LJMP KK10

JA1:DEC 31H

KK10:JB P2.2,KK11K2分个位减一

ACALL DELAY1

MOV R3,32H

CJNE R3,#00H,JA2

LJMP KK11

JA2: DEC 32H

KK11:JB P2.1,KK12 K3 分十位减一

ACALL DELAY1

MOV R3,33H

CJNE R3,#00H,JA3

LJMP KK12

JA3:DEC 33H

KK12:JB P2.0,KK13 K4 时个位减一

ACALL DELAY1

MOV R3,34H

CJNE R3,#00H,JA4

LJMP KK13

JA4:DEC 34H

KK13:RET

//=====流水灯子程序===========================

LED: MOV A,#0feH

MOV 41H,#08H

MOV P0,#0FFH

LED1:

MOV P1,A

MOV R3,#100

D0: ACALL DELAY

DJNZ R3,D0

MOV R3,41H

DJNZ R3,AAA

LJMP BB

AAA:RL A

MOV 41H,R3

ACALL KEY

LJMP LED1

BB:

MOV 41H,#07H

CC: MOV P1,A

MOV R3,#30

D1: ACALL DELAY

DJNZ R3,D1

MOV R3,41H

DJNZ R3,DD

LJMP LED0

DD:RR A

MOV 41H,R3

ACALL KEY

LJMP CC

LED0:RET

//=====延时子程序==============================

DELAY:MOV R1,#250

DEL1:NOP

NOP

NOP

NOP

DJNZ R1,DEL1

RET

//====调用时钟显示作延时========================

DELAY1:MOV R2,#20

DELA3: ACALL MAIN2

DJNZ R2,DELA3

RET

//====调用秒表显示作延时========================

DELAY3:MOV R2,#20

DELA5:ACALL MAIN3

DJNZ R2,DELA5

RET

//====调用延时子程序作延时======================

DELAY2:MOV R2,#100

DELA4:ACALL DELAY

DJNZ R2,DELA4

RET

//======共阳数码管段码表=================================

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,87H

END

电子钟调时间步骤:

材料准备:电子钟。

1、先按一下“调整”按钮,数字开始闪动。

2、想调哪一个数就多按几次,按到的瞎让这个数就会闪动。再用“上调”,或者“下调”来调整。

3、在正常显示下,按一宏巧下“闹钟”按钮,会在“开”和“关”之间转换。按一下“喇叭”按钮,会在“开”和“关”的功能切换。

4、最后按复位。

应用与优点:

1、应用:

目前,在国内,电子钟因LCD数字显示效用直接有效,所以大多运用在城市的主要营业场所,以及车站磨绝局、码头等公共场所。在对公共场所的电子钟设定的时候,使用者还可根据周边的气候、温度等对LCD屏进行设置。同时,因为LCD的显示耗电量很省,所以能够保持持续的工作效果。

夜间在睡觉的时候,床头如果放个带投影功能的电子钟,可以不用起床,直接让时间显示在天花板上,非常直观与有效。

现在生产的大部分汽车中,车内前方仪表盘旁边一般也都自带电子钟功能,采取蓝色背景光板成像效果,非常清晰。

2、优点:

与传统的机械钟相比,电子钟具有更突出的优点。由于电子钟采用数字集成电路的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点,电子钟用于定时自动报警、按时自动打铃、时间程序自动控制、定时广播及自动控制等各个领域。

学C不久。VC6写了一个控制台的,修改时个人时间不能后台走。你可以试试在mytime下面加多一个case到change()修改时也显嫌茄示档坦gomytime()的内容。

#include <stdio.h>

#include <time.h>

#include <windows.h>

#include <conio.h>

void systime()

void mytime()

void wel()

void gomytime()

void change()

int ye,mo,da,ho,mi,se

void main( )

{

wel()

}

//界面

void wel()

{

int k

printf( "电子时钟\n" )

printf( "\n" )

printf( "1新建我的时间,2为系统时间,3为修改时间,4去我的时间,5退出\n" )

printf( "\n" )

printf( "选择:" )

scanf( "%d", &k )

switch ( k )

{

case 1:

mytime()

break

case 2:

systime()

break

case 3:

change()

break

case 4:

gomytime()

break

case 5:

exit(0)

break

}

}

//个人设定的时间并行走

void mytime(){

int k

printf("输入年:")

scanf("%d",&ye)

printf("输入月:")

scanf("%d",&mo)

printf("输入日:")

scanf("%d",&da)

printf("输入时:")

scanf("%d",&ho)

printf("输入分:")

scanf("%d",&mi)

printf("输入秒:")

scanf("%d",&se)

while(1)

{

Sleep(1000)

system("cls")

se++

if(se>=60)

{

se-=60

mi++

if(mi>=60)

{

mi-=60

ho++

if(ho>=24)

{

da++

ho-=24

if(da>=30)

{

mo++

da-=30

if(mo>=12)

{

ye++

mo-=12

}

}

}

}

}

printf("电子时钟\n")

printf("\n")

printf("个人设定的时间:")

printf("%d年%d月%d日%d时%d分%d秒", ye,mo,da,ho, mi, se)

printf("\n")

printf("\n")

printf("1为返回,2为继续\n")

printf("选择:")

if(kbhit())

{

scanf("%d",&k)

break

}

}

switch(k){

case 1:

system("芹蠢察cls")

wel()

break

case 2:

gomytime()

break

}

}

//个人时间行走

void gomytime(){

int k

while(1)

{

Sleep(1000)

system("cls")

se++

if(se>=60)

{

se-=60

mi++

if(mi>=60)

{

mi-=60

ho++

if(ho>=24)

{

da++

ho-=24

if(da>=30)

{

mo++

da-=30

if(mo>=12)

{

ye++

mo-=12

}

}

}

}

}

printf("电子时钟\n")

printf("\n")

printf("个人设定的时间:")

printf("%d年%d月%d日%d时%d分%d秒", ye,mo,da,ho, mi, se)

printf("\n")

printf("\n")

printf("1为返回,2为继续\n")

printf("选择:")

if(kbhit())

{

scanf("%d",&k)

break

}

}

switch(k){

case 1:

system("cls")

wel()

break

case 2:

gomytime()

break

}

}

//系统时间

void systime(){

int k

int year, month, day,hour,min,sec

time_t nowtime

struct tm *timeinfo

while(1)

{

Sleep(1000)

system("cls")

time( &nowtime )

timeinfo = localtime( &nowtime )

year = timeinfo->tm_year + 1900

month = timeinfo->tm_mon + 1

day = timeinfo->tm_mday

hour = timeinfo->tm_hour

min = timeinfo->tm_min

sec = timeinfo->tm_sec

printf("电子时钟\n")

printf("\n")

printf("系统时间:%d年 %d月 %d日", year, month, day)

printf("%d时 %d分 %d秒\n", hour, min, sec)

printf("\n")

printf("1为返回,2为继续\n")

printf("选择:")

if(kbhit())

{

scanf("%d",&k)

break

}

}

switch(k){

case 1:

system("cls")

wel()

break

case 2:

systime()

break

}

}

//修改个人时间

void change()

{

int k

system( "cls" )

printf( "电子时钟\n" )

printf( "\n" )

printf( "修改我的时间\n" )

printf( "1为修改年,2为修改月,3为修改日,4为修改时,5为修改分,6为修改秒,7我的时间,8返回" )

printf( "\n" )

printf( "选择:" )

scanf( "%d", &k )

switch ( k )

{

case 1:

printf( "修改年:" )

scanf( "%d", &ye )

change()

break

case 2:

printf( "修改月:" )

scanf( "%d", &mo )

change()

break

case 3:

printf( "修改日:" )

scanf( "%d", &da )

change()

break

case 4:

printf( "修改时:" )

scanf( "%d", &ho )

change()

break

case 5:

printf( "修改分:" )

scanf( "%d", &mi )

change()

break

case 6:

printf( "修改秒:" )

scanf( "%d", &se )

change()

break

case 7:

gomytime()

break

case 8:

system( "cls" )

wel()

break

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12314473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存