js-506秒表的闹钟怎么调啊 还有时间怎么调?

JavaScript016

js-506秒表的闹钟怎么调啊 还有时间怎么调?,第1张

连按中键3#1次,按左键2#选择要调节的对象(时、分、格式),按左键1#调节后再按左键3#.

在正常时间显示界面,同时按下2#、1#键取消或保持闹钟功能,右上角显示或不显示闹钟图像。

以下是个JS做的秒表 空格开始 再空格结束

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">

<title>秒表 Stopwatch for Rubik's Cube China</title>

</head>

<style>

td,input,div,th{font:9pt verdana}

p {line-height:60%}

</style>

<body onkeyup="begin(event)" onkeydown="stop(event)" onload=rndCube()>

<script type=text/javascript>

var Max=25

var bestAve

var then

var nowDec

var nowBest

var nowWorst

var runing=0

var timeint

var i=0

var totalsec

var sec

var min

var subsec

var secdis

var mindis

var subsecdis

var datas=new Array()

var nowSecondes

function getAv(st,ed)

{

for(i=sti<=edi++)

{

datas.join(" ")

}

}

function stop(evt)

{

if (runing==1 &&evt.keyCode==32)

clearTimeout(timeint)

}

function toSeconds(dec)

{ var Ms,sec

var tmpDec=dec.split(":")

if(tmpDec[0]*10/10>0)

{

Ms=tmpDec[0]*60

return(Ms+tmpDec[1]*10/10)

}else{

return(tmpDec[1]*10/10)

}

}

function begin(evt)

{

if (evt.keyCode==32)

{

if (runing==0){

then=new Date()

runing=1

show()

}

else if (runing==1)

{

runing=2

}

else

{

ShowDatas(toSeconds(nowSeconds))

document.getElementById("watch").innerHTML="00:00.00"

runing=0

}

}

}

var a=0

function ShowDatas(dec)

{

if(dec==0){return false}

var newDec=get2(dec)

datas.push(newDec) //添加记录

SortDatas() //排序得到最大最小值

ShowDetails()

spanBest.innerHTML="<b style=color:red>"+sec2minsec(nowBest)+"</b>"

spanWorst.innerHTML="<b>"+sec2minsec(nowWorst)+"</b>"

var tmp1=0

for(i=0i<datas.lengthi++)

{

tmp1+=datas[i]

}

spanAv.innerHTML="<b>"+sec2minsec(get2(tmp1/datas.length))+"</b>"

}

var bestAve=new Array()

function sec2minsec(n)

{ if (n>60)

{

var tmpmins=Math.floor(n/60)

var tmpseconds=get2(n-tmpmins*60)

var tmpstring

if (tmpseconds<10)

{ tmpstring=tmpmins+":0"+tmpseconds

}

else tmpstring=tmpmins+":"+tmpseconds

return tmpstring

}

else return n

}

function ShowDetails()

{

if(datas.length>12){a=datas.length -12}

var tmpTd="<table cellspacing=1 bgcolor=olive><tr align=center bgcolor=EEEEEE><th width=50>1<th width=50>2<th width=50>3<th width=50>4<th width=50>"

tmpTd+="5<td width=50>6<th width=50>7<th width=50>8<th width=50>9<th width=50>10<th width=50>11<th width=50>12</tr><tr bgcolor=white>"

for(i=ai<(12+a)i++)

{

bestAve[i-a]=datas[i]//将当前12局成绩存入数组

tmpTd+="<td align=center>"

if(datas[i]==undefined){tmpTd+="-"}

else

{

if(datas[i]==nowBest || datas[i]==nowWorst)

{

tmpTd+=sec2minsec(datas[i])+"*"

}else

{

tmpTd+=sec2minsec(datas[i])

}

}

tmpTd+="</td>"

}

tmpTd+="</tr></table>"

//alert(datas.join(","))

div1.innerHTML=""

div1.innerHTML=tmpTd

rndCube()

document.focus()

}

function show()

{ var now=new Date()

diff=now.getTime()-then.getTime()

totalsec=Math.floor(diff/1000)

sec=totalsec%60

if(sec<10)

{

secdis="0"+sec

}

else

{

secdis=sec

}

min=(totalsec-sec)/60

if (min<10)

{

mindis="0"+min

}

else

{

mindis=min

}

subsec=Math.floor((diff%1000)/10)

if (subsec<10)

{

subsecdis="0"+subsec

}

else

{

subsecdis=subsec

}

nowSeconds=mindis+":"+secdis+"."+subsecdis

document.getElementById("watch").innerHTML=nowSeconds

timeint=setTimeout("show()",50)

}

function get2(dec) //取两位小数点

{

return Math.round(dec*100)/100

}

function SortDatas()//最大最小值

{

var tmpArr=new Array()

for(i=0i<datas.lengthi++)

{

tmpArr[i]=datas[i]

}

tmpArr.sort(function(a,b){ return a-b})

nowBest=tmpArr[0]

nowWorst=tmpArr[tmpArr.length-1]

ShowBestAv()

}

function mycls()

{

clearTimeout(timeint)

nowSeconds="00:00:00"

runing=0

datas=new Array()

ShowDatas(0)

ShowDetails()

document.getElementById("watch").innerHTML="00:00.00"

btn1.focus()

}

function ShowBestAv()

{

var av=0

bestAve.sort()

if(bestAve[11]==undefined){return false}

for(i=1i<bestAve.length-1i++)

{

av+=bestAve[i]

}

spanBestAv.innerHTML=get2(av/10)

//alert(bestAve)

}

</script>

<script>

function cancel()

{ clearTimeout(timeint)

nowSeconds="00:00:00"

runing=0

btn1.focus()

rndCube()

document.getElementById("watch").innerHTML="00:00.00"

}

function rndCube()

{

var move=""

var rndMove=new Array("R","L","F","B","U","D")

var add=0

var tmpRnd

var arr=new Array()

while(true)

{

if(add>=Max){break}

//tmpRnd=Math.round(Math.random()*5)

if(tmpRnd==arr[arr.length -1])

{ tmpRnd=Math.floor(Math.random()*6)

}

else

{ arr.push(tmpRnd)

add++

}

}

for(i=0i<arr.lengthi++)

{

var tmp=Math.floor(Math.random()*5)

if(tmp==4)

{ move+=rndMove[arr[i]]+"2"}

else if(tmp==2 || tmp==3)

{ move+=rndMove[arr[i]]+"'"}

else

{ move+=rndMove[arr[i]]}

move+=" "

}

rndDiv.innerHTML=move

}

</script>

<center>

<div id="watch" style="filter:shadraw(x=1,y=1,color=black)position:relativewidth: 359pxheight: 80px font-size:48ptfont-family:Arialfont-weight:boldcolor:navytext-align:center" >00:00.00</div>

<p>

<font size="2">用<font color="#000080"><b>空格</b></font>键<b>开始</b>(松开时触发)、<b>停止</b>(按下时触发)、<b>复位</b>(同时记录成绩),enjoy:)</font></p>

<p><b><font size="2" color="#FF0000">注意:</font></b><font size="2">请先最大化窗口或拉伸窗口使右边的滚动条不出现,否则空格键会让窗口滚动。</font></p>

<p><font size="2">下面的记录系统是魔方吧的MAN大侠编写。</font>

</p>

<div id=rndDiv style="font:12pt Arialfont-weight:bold"></div>

<input type=button value="清除所有记录" onclick=mycls()><input type=button value="不记录此次成绩" type=button onclick=cancel()div1.focus()>

<input type=button value="" style="width:0pxheight:0px" onclick="document.focus" id=btn1>

<div id=div1>

<table cellspacing=1 bgcolor=olive>

<tr bgcolor=#EEEEEE align=center>

<td width=50>1

<td width=50>2

<td width=50>3

<td width=50>4

<td width=50>5

<td width=50>6

<td width=50>7

<td width=50>8

<td width=50>9

<td width=50>10

<td width=50>11

<td width=50>12

</tr>

<tr bgcolor=white align=center>

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

<td width=50>-

</tr>

</table>

</div>

</center>

<table align=center>

<tr><td>最快:</td><td><span id=spanBest></span></td></tr>

<tr><td>最慢:</td><td><span id=spanWorst></span></td></tr>

<tr><td>平均:</td><td><span id=spanAv></span></td></tr>

<tr><td>最好平均:</td><td><span id=spanBestAv></span></td></tr>

</table>

</body>

</html>

秒表的设计程序

用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。

三、程序代码:

A_BIT EQU 20H 数码管个位数存放内存位置

B_BIT EQU 21H 数码管十位数存放内存位置

TEMP EQU 22H 计数器数值存放内存位置 开机初始化

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#0FFH使显示时间数码管熄灭

CLR F0

CLR F1

MOV DPTR,#NUMTAB 指定查表启始地址

等待按键输入

根据按键的输入判断执行什么功能按键1按下则执行功能1

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#0FFH使显示时间数码管熄灭

START:JB P3.6,START1循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,START如果是干扰就返回

JNB P3.6,$等待按键松开

LJMP GN1 按键2按下则执行功能2START1: JB P3.7,START循环判断开始按钮K2是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.7,START1如果是干扰就返回

JNB P3.7,$

LJMP GN2数码管显示秒表时间的程序

GN1:先初始化

S1:MOV A,#0

MOV TEMP,A

GOON1: MOV R2,#2

JS1: MOV R3,#250

TIME1: MOV A,TEMP 将TEMP中的十六进制数转换成10进制

MOV B,#10 10进制/10=10进制

DIV AB

MOV B_BIT,A 十位在A

MOV A_BIT,B 个位在B LCALL DPLOP1插入一段判断定时过程中是否有按键输入的程序段

C1: JB P3.6,B1

ACALL DELAY10延时10毫秒消抖

JB P3.6,C1

JNB P3.6,$等待按键松开

CPL F0

ZT1: MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

JB P3.6,$循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,ZT1如果是干扰就返回

JNB P3.6,$等待按键松开

LCALL DPLOP1

B1: JB P3.7,LOOP1

ACALL DELAY10延时10毫秒消抖

JB P3.7,B1

JNB P3.7,$等待按键松开

AJMP OVERLOOP1: DJNZ R3,TIME1 2毫秒循环执行250次,时间约0.5秒

DJNZ R2,JS1 循环执行2次,时间为1 秒钟INC TEMP满一秒钟对时间加1

MOV A,TEMP

CLR C

SUBB A,#60

JNZ GOON1判断TEMP的数值是否为60?不为60循环

ACALL OVER

RET

GN2: MOV A,#14H 设定倒计时的时间20S

MOV TEMP,A数码管显示倒计时时间的程序

初始化

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#14H使显示时间为设定的倒计时时间 GOON2: MOV R2,#2

JS2: MOV R3,#250

TIME2: MOV A,TEMP 将TEMP中的十六进制数转换成10进制

MOV B,#10 10进制/10=10进制

DIV AB

MOV B_BIT,A 十位在A

MOV A_BIT,B 个位在BMOV DPTR,#NUMTAB 指定查表启始地址

DPLOP2: MOV A,A_BIT 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

MOV P0,A 送出个位的7段代码

CLR P2.5 开个位显示

ACALL DELY1显示1毫秒

SETB P2.5关闭个位显示,防止鬼影

MOV A,B_BIT 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

MOV P0,A 送出十位的7段代码

CLR P2.6 开十位显示

ACALL DELY1显示1毫秒

SETB P2.6关闭十位显示,防止鬼影插入一段判断定时过程中是否有按键输入的程序段

C2: JB P3.6,B2

ACALL DELAY10延时10毫秒消抖

JB P3.6,C2

JNB P3.6,$等待按键松开

ZT2:MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

JB P3.6,$循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,ZT2如果是干扰就返回

JNB P3.6,$等待按键松开

B2: JB P3.7,LOOP2

ACALL DELAY10延时10毫秒消抖

JB P3.7,B1

JNB P3.7,$等待按键松开

AJMP OVERLOOP2: DJNZ R3,TIME2 2毫秒循环执行250次,时间约0.5秒

DJNZ R2,JS2 循环执行2次,时间为1 秒钟DEC TEMP满一秒钟对时间减1

MOV A,TEMP

JNZ GOON2判断TEMP的数值是否为0?不为0循环

ACALL OVER

RET

结束定时

OVER: AJMP START退到开机初始化状态1毫秒延时子程序

DELY1: MOV R4,#2

D1:MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

RET10毫秒延时子程序

DELAY10: MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET实验板上的两位一体的数码管0~9各数字的显示代码

NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

DPLOP1: MOV A,A_BIT 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

MOV P0,A 送出个位的7段代码

CLR P2.5 开个位显示

ACALL DELY1显示1毫秒

SETB P2.5关闭个位显示,防止鬼影

MOV A,B_BIT 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

MOV P0,A 送出十位的7段代码

CLR P2.6 开十位显示

ACALL DELY1显示1毫秒

SETB P2.6关闭十位显示,防止鬼影

RET

END