电子钟调时间步骤:
材料准备:电子钟。
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程序设计一个电子时钟等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)