电子钟怎么调时间

电子钟怎么调时间,第1张

电子钟调时间步骤:

材料准备:电子钟。

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

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

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

4、最后按复位。

应用与优点:

1、应用:

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

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

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

2、优点:

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

ms50 DATA 31H ;50ms计数内存地址sec DATA 32H ;秒计数内存地址min DATA 33H ;分计数内存地址hour DATA 34H ;时计数内存地址buffer DATA 35H ;显示十进制内存起始地址EXTRN CODE(Display8) ;外部显示子程序(跟硬件设计有关,原文未列出) ORG 0000H ; LJMP STAR ;转主程序 ORG 000BH ; LJMP INT_Timer0 ;转50ms定时器中断处理程序ORG 0100H ;STAR: MOV SP,#60H ;主程序 MOV ms50,A ;50ms计数器初始化到0 MOV hour,#12 ;小时初始化为12 MOV min,#59 ;分钟初始化为59 MOV sec,#50 ;秒初始化为50 MOV TH0,#60 ;初始化定时器T0为50ms的数据(跟时钟频率和定时器模式有关) MOV TL0,#176 ; MOV TMOD,#1 ;初始化定时器模式 MOV IE,#82H ;设定中断 SETB TR0 ;开定时器0STAR1: LCALL Display ;调用显示转换程序(先将16进制转为BCD码再显示) JNB F0,$ ;等待中断处理完成标志 CLR F0 ;复位中断处理完成标志

SJMP STAR1 ;循环显示;中断服务程序 INT_Timer0:

MOV TL0,#176-5 ;50ms定时器计数器初始值再装入(-5为微调,含响应中断用时) MOV TH0,#60 ; PUSH 01H ;压入堆栈 MOV R1,#ms50 ;装入50ms计数内存地址数31H INC @R1 ;50ms计数内存加1

CJNE @R1,#20,ExitInt ;不够1秒,退出 MOV @R1,#0 ;50ms计数内存复位为0(31H)

INC R1 ;转为秒内存地址(32H)

INC @R1 ;秒计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60秒,退出 MOV @R1,#0 ;够60秒,秒计数复位为0 INC R1 ;转为分计数内存地址(33H)

INC @R1 ;分计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60分,退出 MOV @R1,#0 ;够60分,分复位为0 INC R1 ;转为时内存地址(34H) INC @R1 ;时计数内存加1 CJNE @R1,#24,ExitInt1 ;不够24时,退出 MOV @R1,#0 ;时计数内存复位为0ExitInt1:

SETB F0 ;置位中断处理完成标志ExitInt:

POP 01H ; 恢复现场 RETI ;退出中断

HexToBCD: ;16进制转BCD码

MOV B,#10 ; DIV AB ; MOV @R0,B ;存余数(10进制个位) INC R0 ;转伤地址 MOV @R0,A ;存伤(10进制十位) INC R0 ;转下一次余数地址 RET ;

Display: ;显示转换与调用显示程序

MOV R0,#buffer ;10进制BCD秒显示缓存地址(35H) MOV A,sec ; ACALL HexToBCD ;十进制秒转换后存在(35H)、(36H) MOV @R0,#10H ;(37H)=#10H,秒与分之间的间隔,无实际意义,或与dispaly8有关

INC R0 ;10进制BCD分显示缓存地址(38H)

MOV A,min ; ACALL HexToBCD ;十进制分转换后存在(38H)、(39H)

MOV @R0,#10H ;(3AH)=#10H,分与时之间的间隔,无实际意义,或与dispaly8有关

INC R0 ;10进制BCD时显示缓存地址(3BH)

MOV A,hour ; ACALL HexToBCD ;十进制时转换后存在(3CH)、(3DH)

MOV R0,#buffer ;恢复显示缓存地址(35H),为dispaly8置初始显示地址 LCALL Display8 ;调用实际显示程序 RET ; END

label字体什么的自己改吧,主要功能实现了

Private Sub Form_Load()

Timer1Enabled = True

Timer1Interval = 1000

Timer2Enabled = False

Timer2Interval = 500

End Sub

Private Sub Timer1_Timer()

Label1Caption = Time

End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 13 Then

If Not IsDate(Text1Text) Then

MsgBox "时间格式错误,正确应为HH:MM:SS"

Else

Text1Locked = True

Timer2Enabled = True

End If

End If

End Sub

Private Sub Timer2_Timer()

Dim lTime As Integer

Static LblColor As Boolean

lTime = DateDiff("s", Time, Text1Text)

If lTime <= 0 Then

If LblColor = True Then

Label1BackColor = vbRed

LblColor = False

Else

Label1BackColor = vbWhite

LblColor = True

End If

End If

End Sub

#include<reg51h>

#include<intrinsh>

void DoKey();

unsigned char numcode[]={0xc0,0xf9,0xa4,0x0b0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char buf[8];

unsigned char g_timer;

unsigned char keyvalue;

struct Clock

{

unsigned char hour;

unsigned char minute;

unsigned char second;

} CurrentClock,BeepClock;

unsigned char ProgramStatus;

/

ProgramStatus =0--Current Clock Run ;

ProgramStatus =1--Change Current Clock minute

ProgramStatus =2--Change Current Clock hour

ProgramStatus =3--Change Beep Clock minute

ProgramStatus =4--Change Beep Clock hour

/

//定义各个键值

#define UPKEY 6

#define DOWNKEY 5

#define MODEKEY 3

void InitSystem()

{

CurrentClockhour = 11;

CurrentClockminute = 59;

CurrentClocksecond = 55;

BeepClockhour = 12;

BeepClockminute = 0;

BeepClocksecond = 0;

//initial T0

TMOD = 0x01;

TH0 = 0xE0;

TL0 = 0x20;

g_timer = 100;

EA = 1;

ET0 = 1;

TR0 = 1;

//initial INT1

IT1 = 1;

EX1 = 1;

ProgramStatus = 0;

}

void ClockRun()

{

CurrentClocksecond ++ ;

if(CurrentClocksecond>=60)

{

CurrentClocksecond = 0 ;

CurrentClockminute ++;

if(CurrentClockminute>=60)

{

CurrentClockminute = 0;

CurrentClockhour++;

if(CurrentClockhour>=24)

CurrentClockhour = 0;

}

}

g_timer = 100 ;

}

void Delay( )

{

int i = 10;

for(;i>0;i--)

;

}

void ShowClock(struct Clock DisplayClock)

{

unsigned char i;

buf[0] = numcode[DisplayClockhour/10];

buf[1] = numcode[DisplayClockhour%10];

buf[2] = 0xbf;

buf[3] = numcode[DisplayClockminute/10];

buf[4] = numcode[DisplayClockminute%10];

buf[5] = 0xbf;

buf[6] = numcode[DisplayClocksecond/10];

buf[7] = numcode[DisplayClocksecond%10];

P0 = 0xfe;

for(i=0;i<=7;i++)

{

P1 = buf[i];

Delay();

P1 = 0xff;

Delay();

P0=_crol_(P0,1);

}

}

void T0_ISR ()interrupt 1

{

TR0 = 0 ;

TH0 = 0xE0;

TL0 = 0x20;

if(g_timer)

g_timer--;

else

ClockRun();

TR0 = 1;

}

void INT1_ISR() interrupt 2 //检测到有键按下,(不考虑按键抖动)

{

keyvalue = P3&0x07;

if(keyvalue!=0x07)

DoKey();

}

void DoKey()

{

if(keyvalue==MODEKEY) //修改走时的分针状态

{

ProgramStatus++;

if(ProgramStatus==5)

ProgramStatus=0;}

if(keyvalue==UPKEY)

{

if(ProgramStatus==1)

CurrentClockminute++;

if(CurrentClockminute>=60)

CurrentClockminute=0;}

if( keyvalue==DOWNKEY)

{

if(ProgramStatus==1&&CurrentClockminute>=1)

CurrentClockminute--;

else

CurrentClockminute=59;

}

if(keyvalue==UPKEY) //修改走时的时针状态

{

if(ProgramStatus==2)

CurrentClockhour++;

if(CurrentClockhour>=24)

CurrentClockhour=0;}

if(ProgramStatus==2&&keyvalue==DOWNKEY)

{

if(CurrentClockhour>=1)

CurrentClockhour--;

else

CurrentClockhour=23;

}

if(keyvalue==UPKEY) //修改闹时分针的状态

{if(ProgramStatus==3)

BeepClockminute++;

if(BeepClockminute>=60)

BeepClockminute=0;}

if(ProgramStatus==3&&keyvalue==DOWNKEY)

{

if(BeepClockminute>=1)

BeepClockminute--;

else

BeepClockminute=59;

}

if(keyvalue==UPKEY) //修改闹时的时针状态

{

if(ProgramStatus==4)

BeepClockhour++;

if(BeepClockhour>=24)

BeepClockhour=0;}

if(ProgramStatus==4&&keyvalue==DOWNKEY)

{

if(BeepClockhour>=1)

BeepClockhour--;

else

BeepClockhour=23;

}

/ MODEKEY按键处理

当 ProgramStatus = 0 时,按下MODEKEY后,ProgramStatus = 1,系统进入修改走时的分针状态

当 ProgramStatus = 1 时,按下MODEKEY后,ProgramStatus = 2,系统进入修改走时的时针状态

当 ProgramStatus = 2 时,按下MODEKEY后,ProgramStatus = 3,系统进入修改闹时的分针状态

当 ProgramStatus = 3 时,按下MODEKEY后,ProgramStatus = 4,系统进入修改闹时的时针状态

当 ProgramStatus = 4 时,按下MODEKEY后,ProgramStatus = 0,系统进入正常的走时状态

UPKEY处理

当ProgramStatus = 1,走时的分针加1

当ProgramStatus = 2,走时的时针加1

当ProgramStatus = 3,闹时的分针加1

当ProgramStatus = 4,闹时的时针加1

DOWNKEY处理

当ProgramStatus = 1,走时的分针减1

当ProgramStatus = 2,走时的时针减1

当ProgramStatus = 3,闹时的分针减1

当ProgramStatus = 4,闹时的时针减1

/

keyvalue = 0;

}

void main()

{

InitSystem();

while(1)

{ if(BeepClockhour==CurrentClockhour&&CurrentClockminute==BeepClockminute)

P3_5=0;

else

P3_5=1;

if(ProgramStatus <=2)

ShowClock(CurrentClock);

else

ShowClock(BeepClock);

}

}

用C语言实现的闹钟程序

#include

#include

#include

#include

#include

void

main()

{

int

gd=DETECT,gm;

int

x=320,y=240,r=200,i,h,m,s,thetamin,thetasec;

struct

time

t;

char

n[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"};

initgraph(&gd,&gm,"g:\\tc\\bgi");//图形驱动器路径,根据自己的系统更换。

circle(x,y,210);

setcolor(4);

settextstyle(4,0,5);

for(i=0;i<12;i++)

{

if(i!=3)

outtextxy(x+(r-14)cos(M_PI/6i)-10,y-(r-14)sin(M_PI/6i)-26,n[i]);

else

outtextxy(x+(r-14)cos(M_PI/6i)-20,y-(r-14)sin(M_PI/6i)-26,n[i]);

}

gettime(&t);

printf("The

current

time

is:

%2d:%02d:%02d%02d\n",tti_hour,

tti_min,

tti_sec,

tti_hund);

while(!kbhit())

{

setcolor(5);

setfillstyle(1,5);

circle(x,y,10);

floodfill(x,y,5);

gettime(&t);

if(tti_min!=m)

{

setcolor(0);

line(x,y,x+(r-60)cos(thetamin(M_PI/180)),y-(r-60)sin(thetamin(M_PI/180

)));

circle(x+(r-80)cos(thetamin(M_PI/180)),y-(r-80)sin(thetamin(M_PI/180))

,10);

line(x,y,x+(r-110)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-110)sin(M_PI/6h

-((m/2)(M_PI/180))));

circle(x+(r-130)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-130)sin(M_PI/6h-(

(m/2)(M_PI/180))),10);

}

if(tti_hour>12)

tti_hour=tti_hour-12;

if(tti_hour<4)

h=abs(tti_hour-3);

else&n

bsp;

h=15-tti_hour;

m=tti_min;

if(tti_min<=15)

thetamin=(15-tti_min)6;

else

thetamin=450-tti_min6;

if(tti_sec<=15)

thetasec=(15-tti_sec)6;

else

thetasec=450-tti_sec6;

setcolor(4);

line(x,y,x+(r-110)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-110)sin(M_PI/6h

-((m/2)(M_PI/180))));

circle(x+(r-130)cos(M_PI/6h-((m/2)(M_PI/180))),y-(r-130)sin(M_PI/6h-(

(m/2)(M_PI/180))),10);

line(x,y,x+(r-60)cos(thetamin(M_PI/180)),y-(r-60)sin(thetamin(M_PI/180

)));

circle(x+(r-80)cos(thetamin(M_PI/180)),y-(r-80)sin(thetamin(M_PI/180))

,10);

setcolor(15);

line(x,y,x+(r-70)cos(thetasec(M_PI/180)),y-(r-70)sin(thetasec(M_PI/180

)));

delay(1000);

setcolor(0);

line(x,y,x+(r-70)cos(thetasec(M_PI/180)),y-(r-70)sin(thetasec(M_PI/180

)));

}

}

该程序已在Turbo

C++30中通过编译

以上就是关于电子钟怎么调时间全部的内容,包括:电子钟怎么调时间、求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)、用vb程序设计一个电子时钟等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9379147.html

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

发表评论

登录后才能评论

评论列表(0条)

保存