新建一个EXE标准工程,
在FORM1里添加控件
命令按钮Command1(Caption属性为"开始")
命令按钮Command2(Caption属性为"停止")
文本框Text1
计时器Timer1(Interval属性为100,Enabled属性为False)
打开代码窗口,输入代码
Private
SS
As
Long,
S
As
Long,
M
As
Long,
H
As
Long
'S=秒,M=分,H=时
Private
Sub
Command1_Click()
S
=
0
M
=
0
H
=
0
SS
=
0
Text1Text
=
H
&
":"
&
M
&
":"
&
S
Timer1Enabled
=
True
End
Sub
Private
Sub
Command2_Click()
S
=
0
M
=
0
H
=
0
SS
=
0
Timer1Enabled
=
False
End
Sub
Private
Sub
Form_Load()
Timer1Interval
=
100
Timer1Enabled
=
False
End
Sub
Private
Sub
Timer1_Timer()
If
SS
<
9
Then
SS
=
SS
+
1
Else
SS
=
0
If
S
<
59
Then
S
=
S
+
1
Else
S
=
0
If
M
<
59
Then
M
=
M
+
1
Else
M
=
0
H
=
H
+
1
End
If
End
If
End
If
Text1Text
=
H
&
":"
&
M
&
":"
&
S
&
""
&
SS
End
Sub
用vhdl设计秒表全功略!
根据要求, 秒表的设计要有三个输入端:runstop,rst和clk runstop是开关, 按一下开始计时, 再按一下停止计时, 显示时间 可以使用一个T触发器来实现 当我们把T触发器的T端接高电平时, 它将实现翻转功能 然后用输入端口runstop 来控制, 当runstop 被按一下, 一个时钟到来, T触发器就进行一次翻转 我们也可以用D触发器来代替T触发器, 需要用一个反馈信号, 将输出的信号反馈到D端口 Rst 是复位, 当按下rst 时, 秒表的显示变为0 Clk是时钟, 实验中的时钟信号是250KHZ,为了实现秒表的正确计时功能, 需要进行2500分频 所以clk首先就应该接到一个分频器, 然后再为其他模块提供时钟 接着我们把秒表划分为以下几个模块:分频器, 计数器, T触发器, 扫描器, 八选一选择器, 七段译码器, 另外还有一个模块要在分, 秒和毫秒之间做一个划分(BAR) 计数器的功能是要实现毫秒,秒,分的计数,比较麻烦我们再将它分成几个模块, 可以是六进制的计数器和十进制的计数器进行级联来实现也可以是用100进制的计数器和60进制的计数器进行级联 我两种方法都尝试了一下发现后一种方法编程要复杂的多, 级联的时候可以稍微简单一些 因为D触发器,八选一选择器是程序包里有的,所以可以不编 把这些模块都编好了以后要做的就是把他们连在一起 有两种方法 一是用画图的方法, 二是用编程的方法, 用port map语句 同样, 这两种方法我也都尝试了 我觉得用画图的方法要简单一些
1程序如下:分频器: library ieee; use ieeestd_logic_1164all; use ieeestd_logic_unsignedall; entity df is port(clkin:in std_logic; dout:out std_logic);
end; architecture behavioral of df is begin process(clkin) variable df: std_logic_vector(7 downto 0):="00000000"; begin if (clkin'event and clkin='1')then if df/="11111010" then df:=df+1; else df:="00000001"; end if; end if; dout<=df(7); end process; end behavioral; 扫描器: library ieee; use ieeestd_logic_1164all; use ieeestd_logic_unsignedall;
entity scan is port(clk:in std_logic; s:out std_logic_vector(2 downto 0)); end scan;
architecture behavioral of scan is variable scan:std_logic_vector(2 downto 0); begin process(clk) begin if(clk'event and clk='1')then scan:=scan+1; end if; s<=scan; end process; end behavioral; 七段译码器: library ieee; use ieeestd_logic_1164all;
entity bcd is port(o:in std_logic_vector(3 downto 0); q:out std_logic_vector(6 downto 0)); end bcd ;
architecture behavioral of bcd is begin process(o) begin case o is when"0000"=>q<="0111111"; when"0001"=>q<="0000110"; when"0010"=>q<="1011011"; when"0011"=>q<="1001111"; when"0100"=>q<="1100110"; when"0101"=>q<="1101101"; when"0110"=>q<="1111101"; when"0111"=>q<="0100111"; when"1000"=>q<="1111111"; when"1001"=>q<="1101111"; when others=>q<="0000000"; end case; end process; end behavioral; 当然,以上的100进制和60进制计数器的设计过于复杂,可以由六进制和十进制的计数器级联代替,程序如下:六进制: library ieee; use ieeestd_logic_1164all; use ieeestd_logic_unsignedall; entity c6 is port(count:out std_logic_vector(3 downto 0); cout:out std_logic; cin,rst,clk:in std_logic); end c6; architecture behavioral of c6 is signal counter:std_logic_vector(2 downto 0); begin process(clk,rst) begin if rst='1'then counter<="000";cout<='0'; elsif clk'event and clk='1' then if cin='1' then if counter="101"then counter<="000";cout<='1'; else counter<=counter+"001"; cout<='0'; end if; end if; end if; end process; count(2 downto 0)<=counter; count(3)<='0'; end behavioral;
十进制: library ieee; use ieeestd_logic_1164all; use ieeestd_logic_unsignedall;
entity c10 is port(count:out std_logic_vector(3 downto 0); cout:out std_logic; cin,rst,clk:in std_logic); end c10;
architecture behavioral of c10 is signal counter:std_logic_vector(3 downto 0); begin process(clk,rst) begin if rst='1'then counter<="0000";cout<='0'; elsif clk'event and clk='1' then if cin='1' then if counter="1001"then counter<="0000";cout<='1'; else counter<=counter+"0001"; cout<='0'; end if; end if; end if; end process; count<=counter; end behavioral;
最后用画图讲这些模块连接起来
import javatextSimpleDateFormat;
import javautilDate;
import javautilTimer;
import javautilTimerTask;
public class Clock {
public static void main(String[] args) throws Exception{
time();
}
private static void time() throws Exception{
final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//定时任务
TimerTask task = new TimerTask() {
@Override
public void run() {
Systemoutprintln("当前时间:"+formatformat(new Date()));
}
};
//创建定时器
Timer timer = new Timer();
//开始时间
long delay = 0;
//延迟时间
long intevalPeriod = 1 1000;
//开始执行定时任务
timerscheduleAtFixedRate(task, delay, intevalPeriod);
}
}
用单片机的定时器T0定时,计时1秒,实现倒计时的秒表的功能。
程序如下
#include<reg51h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表
unsigned char second;//秒倒计时变量
unsigned char t0n;//T0中断次数计数
sbit k1=P3^2;//定义按键
void delay()
{
unsigned int j;
for(j=400;j>0;j--);
}
void display()//显示子程序
{
P2=0x01;
P0=tab[second/10];//显示十位
delay();
P2=0x02;
P0=tab[second%10];//显示个位
delay();
}
void main()
{
TMOD=0x01;//用T0定时,中断方式
TH0 =0x3C;//晶振12M,定时50ms
TL0 =0xB0;
IE =0x82;
while(1)
{
display();//调显示子程序
if(k1==0)//按键按下
{
if(TR0==0)
{
TR0=1;//启动开始计时
second=60;//从60秒开始倒计时
}
else
TR0=0;
while(k1==0);//等待按键释放
}
}
}
//T0中断程序
void T0_int() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
if(t0n>=20)//1秒到
{
t0n=0;
second--;//减1秒
if(second==0)TR0=0;
}
}
仿真图如下
int main()
{ char m;
struct tm time;
timehours=timeminutes=timeseconds=0;
printf("Now, press 's' key to begin the clock\n");
m=getch();
if(m=='s'||m=='S')
while(1)
{
while(!kbhit()) {
update(&time);
display(&time);}
m=getch();
if(m=='s'||m=='S')break;
else{ printf("Only 's' or 'S' can be inputed!!");}
}
}
把main函数改成这样看看行不行
这是一个秒表,有按键实现 启动、暂停核清零功能。
#include <reg51H>
sbit P3_5 =P3^5;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P1=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P1=dispcode[second/10];
P2=dispcode[second%10];
}
}
我写了个六位数码管的程序,放到这里让你参考一下,希望对你有用!
/
数码管时钟秒表篇
功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节
时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一
个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为
调节秒钟状态),key4键为秒表功能键。
实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成
数码管时钟调节功能;第三步:完成数码管秒表显示功能。
*** 作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键
为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。
/
#include <reg52h>
#include<intrinsh>
#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=0;i<z;i++)
for(j=0;j<110;j++);
}
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;
}
以上就是关于求用VB编一个秒表的程序谁能帮助解决一下啊全部的内容,包括:求用VB编一个秒表的程序谁能帮助解决一下啊、秒表的VHDL语言设计程序!、如何用JAVA编写一个秒表小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)