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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)