/*******************************************************************
功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节
时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一
个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为
调节秒钟状态),key4键为秒表功能键。
实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成
数码管时钟调节功能;第三步:完成数码管秒表显示功能。
*** 作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键
为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。
********************************************************************
********************************************************************/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3
sbit dula=P2^6
sbit wela=P2^7
uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}//数码管位选编码
uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71,0x00}
uchar temp //temp为按键变量
int light,flag//flag用来控制数码管显示的状态(显示时钟或者显示秒表),light用来控制时钟和秒表的led显示
uchar shi2,ge2,shi1,ge1 //这四个变量用来分离出实参的十位和个位
uchar num,num1,num2,num3 //num,num1用来计数,num2用来控制调节的时分秒,num3用来改变秒表状态下的显示状态
int miao,fen,shi //时钟变量
uchar mfen,mmiao,mmmiao //秒表变量
void delay(uint z)
{
uint i,j
for(i=0i<zi++)
for(j=0j<110j++)
}
void timeinit()
{
TMOD=0x11
TH0=(65536-46080)/256
TL0=(65536-46080)%256
TH1=(65536-4608)/256
TL1=(65536-4608)%256
EA=1
ET0=1
ET1=1
TR0=1
TR1=0
}
void timedisplay0() interrupt 1
{
TH0=(65536-46080)/256
TL0=(65536-46080)%256
num++
if(num==20)
{
num=0
miao++//开启时钟功能
if(miao==60)
{
miao=0
fen++
if(fen==60)
{
fen=0
shi++
if(shi==24)
shi=0
}
}
}
}
void timedisplay1() interrupt 3
{
TH1=(65536-4608)/256
TL1=(65536-4608)%256
num1++
if(num1==2)
{
num1=0
mmmiao++
if(mmmiao==100) //开启秒表功能
{
mmmiao=0
mmiao++
if(mmiao==60)
{
mmiao=0
mfen++
if(mfen==60)
mfen=0
}
}
}
}
void display(uchar add,uchar date) //数码管显示信息函数(带有小数点)
{
shi2=date/10
ge2=date%10
P0=0xff
wela=1
P0=table1[add]
wela=0
P0=0
dula=1
P0=table2[shi2]
dula=0
delay(1)
P0=0xff
wela=1
P0=table1[add+1]
wela=0
P0=0
dula=1
P0=table2[ge2]|0x80
dula=0
delay(1)
}
void display1(uchar add,uchar date) //数码管显示数据(不带有小数点)
{
shi1=date/10
ge1=date%10
P0=0xff
wela=1
P0=table1[add]
wela=0
P0=0
dula=1
P0=table2[shi1]
dula=0
delay(1)
P0=0xff
wela=1
P0=table1[add+1]
wela=0
P0=0
dula=1
P0=table2[ge1]
dula=0
delay(1)
}
void keyscan()
{
P3=0xfd
temp=P3 //第二行功能键
if(temp!=0xfd)
{
delay(5)
if(temp!=0xfd)
{
beep=0
switch(temp)
{
case 0xed: num2++ //第一个按键用来控制调节时,分,秒
TR0=0
light=1
if(num2==4)
{
num2=0
light=0
TR0=1
}
break
case 0xdd: if(num2==1) //第二键用来增加数据
{
shi++
if(shi==24)
shi=0
}
if(num2==2)
{
fen++
if(fen==60)
fen=0
}
if(num2==3)
{
miao++
if(miao==60)
miao=0
}
break
case 0xbd: if(num2==1) //第三个键用来减小数据
{
shi--
if(shi==-1)
shi=23
}
if(num2==2)
{
fen--
if(fen==-1)
fen=59
}
if(num2==3)
{
miao--
if(miao==-1)
miao=59
}
break
case 0x7d: flag=1 //第四个键用来开启秒表
num3++
TR1=1
if(num3==1)
mfen=mmiao=mmiao=0 //清除上次残留数据
if(num3==2)
TR1=0 //暂停秒表
if(num3==3)
{
mfen=mmiao=mmmiao=0 //秒表清零
TR1=0
}
if(num3==4)//重新开启秒表
TR1=1
if(num3==5)//暂停秒表
TR1=0
if(num3==6) //切换为显示时钟状态
{
flag=0
num3=0
}
break
}
while(temp!=0xfd)
{
temp=P3
}
beep=1
}
}
}
int main()
{
timeinit()
beep=1
while(1)
{
keyscan()
if(light==0)
{
if(miao%2==0) //当数码管显示时钟状态时,八个led将以亮一秒灭一秒的状态循环下去
P1=0
else
P1=0xff
}
else
{
if(num2==1)
P1=0xfe
if(num2==2)
P1=0xfd
if(num2==3)
P1=0xfb
}
if(flag==0) //显示时钟
{
display(1,shi)
display(3,fen)
display1(5,miao)
}
else //显示秒表
{
display(1,mfen)
display(3,mmiao)
display1(5,mmmiao)
}
}
return 0
}
13、记时器(Timer)
作用:通过定期激活Timer事件,使得Timer控件可以每隔一个时间段就执行一次Timer事件中的代码。
在Visual Basic中,可以使用定时器对象在指定的时间间隔中执行某组语句。定时器对象(Timer Object)是个看不见的秒表,利用它可以在程序中访问系统时钟。我们既可以把定时器对象用作一个煮蛋计时器从预定时刻计时,也可以用它实现程序中的某种延时功能,还可以在预定的时间间隔内重复执行某个动作。
在程序设计中,关于时间的处理是非常普遍的。对于年月、日期、时分等的时间处理可以使用时间函数,例如Year、Month、Day等。对于由系统时钟控制的定时响应处理,例如每隔一段时间就进行某种 *** 作,则可以使用定时器控件。
定时器控件的响应事件是时间。加入定时器控件后,在程序中可以通过按照一定的时间间隔执行 *** 作。定时器控件采用的方法是不断检查系统时钟,判断是否满足执行某项任务的要求。根据定时器的这种特性,我们可以进行后台处理工作。
Timer控件的大小固定无法调整,且在运行时不可见,所以在设计阶段不必顾及它的位置。
(1)属性
Interval属性——指定定时器事件发生的间隔毫秒数(可以通过EnabIed属性来禁止该属性生效)
语法结构:
object. Interval [ =milliseconds ]
其中:
object——对象表达式,其值是“应用于”列表中的一个对象;
milliseconds——数值表达式,指定毫秒数,milliseconds的设置值为:
0(缺省值):使Timer控件无效;
间隔的取值可在1—64,707之间(包括这两个数值,以毫秒计),即最长时间大约64.65秒
EnabIed属性——控制定时器是否生效
True——打开Timer控件,这时倒计时总是从其Interval属性的设置开始
False——关闭Timer控件
(2)Timer事件
它在一个Timer控件预定的时间间隔过去之后发生。
语法结构:
Private Sub object_ Timer ( [ index As Integer ])
创建Timer 事件程序用以告诉VB在Interval 到时该做什么。
(3)例子
例1:显示系统当前的时间和日期,并且可以随时改变系统的时间和日期。见教材P159。
界面:
Interval属性值为1000。
代码:
Private Sub Form_Load()
Text1.Text = Year(Date) '获取系统年份
Text2.Text = Month(Date) '获取系统月份
Text3.Text = Day(Date) '获取系统的日期
End Sub
--------------------------------------------------------------------------------
Private Sub Check1_Click()
If Check1.Value Then
Timer1.Enabled = True '当选中check1时,timer1控件起作用
Else
Timer1.Enabled = False
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
End Sub
--------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim mydate As Date
mydate = DateSerial(Text1.Text, Text2.Text, Text3.Text) 'dateserial()函数用于将变量类型转化为日期型
Date = mydate '给系统日期赋值,即更改系统日期
End Sub
--------------------------------------------------------------------------------
Private Sub Command2_Click()
Dim mytime As String
mytime = TimeSerial(Text4.Text, Text5.Text, Text6.Text)'timeserial()函数用于将变量类型转化为时间型
Time = mytime '更改系统时间
End Sub
--------------------------------------------------------------------------------
Private Sub Timer1_Timer()
Text4.Text = Hour(Time)
Text5.Text = Minute(Time)
Text6.Text = Second(Time)'获取系统时间
End Sub
[程序演示][程序下载]
例2:设计一个显示计时的程序。
界面:
定时器的Enabled属性设置为False,Interval=300。
代码:
Private Sub Command1_Click()
Timer1.Enabled = True '使定时器有效
End Sub
--------------------------------------------------------------------------------
Private Sub Command2_Click()
Timer1.Enabled = False '使定时器无效
End Sub
--------------------------------------------------------------------------------
Private Sub Command3_Click()
Label1.Caption = "0"'清0
End Sub
--------------------------------------------------------------------------------
Private Sub Command4_Click()
End
End Sub
--------------------------------------------------------------------------------
Private Sub Form_Load()
Me.Caption = Format(Now, "hh:mm:ss")
End Sub
--------------------------------------------------------------------------------
Private Sub Timer1_Timer()
Dim count As Long
count = Label1.Caption
count = count + 1 '累加
Label1.Caption = count
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)