怎样用VB编写电子时钟?还要带上秒表计时器!

怎样用VB编写电子时钟?还要带上秒表计时器!,第1张

第一步,打开vb

第二部,添加隐拿一个计时器timer,一个文字标胡携升签label

第三部,输入代裤老码,代码如下

Private Sub Form_Load()

picClock.Move (Me.ScaleWidth - 8 * 210) / 2, (Me.ScaleHeight - 315) / 2, 8 * 210, 315

Dim i&

For i = 0 To 7

picClock.PaintPicture picNumber.Picture, i * 210, 0, 210, 315, IIf((i = 2) Or (i = 5), 12, 10) * 210, 0, 210, 315

Next i

End Sub

Private Sub Timer1_Timer()

Dim cNow$, i&

cNow = Format(Now, "hh:mm:ss")

For i = 0 To 7

If Mid(cNow, i + 1, 1) <>":" Then

picClock.PaintPicture picNumber.Picture, i * 210, 0, 210, 315, Val(Mid(cNow, i + 1, 1)) * 210, 0, 210, 315

End If

Next i

End Sub

望采纳

上面的代码错了,下面是正确代码

Private Sub Form_Load()

Timer1.Enabled = True

Timer1.Interval = 300

End Sub

Private Sub Timer1_Timer()

Label1 = Now

End Sub

源程序如下: ORG 0000H 程序开始入口

LJMP START

ORG 0003H 外中断0中断程序入口

RETI

ORG 000BH 定升颤时器T0中断程序入口

LJMP INTT0 跳至INTTO执行

ORG 0013H 外中断1中断程序入口

RETI

ORG 001BH 定时器T1中断程序入口

LJMP INTT1

ORG 0023H 串行中断程序入口地址

RETI

---------------主程序----------------------

START:MOV R0,#70H 70给R0,清70-7FH显示内存

MOV R7,#0FH

CLEARDISP:MOV @R0,#00H0给R0中的数为地址的内存中存放(70H)

INC R0

DJNZR7,CLEARDISP

MOV 78H,#2 默认时间吵亮败为12:00,闹钟5:00

MOV 79H,#1

MOV 74H,#2 防止上电时数码管显示00小时

MOV 75H,#1

MOV 66H,#1 中断退出时66H为1时,分、时计时单元数据移入显存标志

MOV 68H,#1 上电默认闹钟开状态

MOV 7DH,#6 闹钟时十位

MOV 7CH,#3

MOV 69H,#0

MOV 7AH,#0AH放入"熄灭符"数据

MOV TMOD,#11H 设T0、T1为16位定时器

MOV TL0,#0B0H 50MS定时键脊初值(T0计时用)

MOV TH0,#3CH

SETBEA 总中断开放

SETBET0 允许T0中断

SETBTR0 T0定时器开始计时

MOV R4,#14H 1秒定时用初值(50MS×20)

START1:LCALL DISPLAY 显示子程序

LCALL BEEP闹钟查询

JNB P1.7,SETTIMEP1.7口为0时转时间调整程序

JMP START1 P1.7口为1时跳回START1

-----------------------时间闹钟调整系统--------------------------

NFLAG:MOV A,68H 设置闹钟开关状态

CJNE A,#1,BEE68

MOV 68H,#0

JMP E6

BEE68:MOV 68H,#1

E6:MOV 66H,#8 中断退出66H不为1时分、时计时单元数据移入显存标志

MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

LCALLDDL

LCALLDDL

MOV 72H,68H

MOV 73H,69H

MOV 74H,7AH

MOV 75H,7AH

LCALLDDL

LCALLDDL

MOV 66H,#1

LJMP START1

SETTIME:LCALLDDL

JB P1.7,NFLAG 键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

MOV TL1,#0B0H T1闪烁定时初值

MOV TH1,#3CH

MOV R2,#06H进入调时状态,赋闪烁定时初值

MOV 66H,#8 调闹钟时保持走时,关闭时钟显示数据

SETB ET1允许T1中断

SETB TR1开启定时器T1

SET1:LCALLDISPLAY调用显示,防止键按下无显示

JNB P1.7,SET1 P1.7口为0等待键释放

MOV R5,#00H清设置类型闪烁标志

SETN1:INC R5 闹钟分调整

SET5:LCALLDISPLAY

JB P1.7,SET5

SEETN1:LCALLDDL有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

JB P1.7,SET6 键释放查询,键释放自动转调时

MOV R0,#7CH

LCALL ADD1

MOV A,R3

CLR C

CJNEA,#60H,HHN1

HHN1:JCSEETN1

LCALL CLR0

JMP SEETN1

SET6:INC R5 闹钟时调整

SEET6:LCALLDISPLAY

JB P1.7,SEET6

SEETNH1:LCALLDDL

JB P1.7,SETF

MOV R0,#7EH

LCALLADD1

MOV A,R3

CLR C

CJNEA,#24H,HOUU1

HOUU1:JC SEETNH1

LCALL CLR0

JMP SEETNH1

SETF:LCALLDISPLAY

JB P1.7,SETF

LCALLDDL

JNB P1.7,SETOUT 短按调时,长按退出

CLR ET0

CLR TR0

MOV 70H,#00H设定后的时间从00秒开始走时

MOV 71H,#00H

INC R5

SET3:LCALLDISPLAY

JB P1.7,SET3

SETMM:LCALLDDL

JB P1.7,SET4

MOV R0,#77H

LCALL ADD1

MOV A,R3

CLR C

CJNEA,#60H,MMH

MMH:JC SETMM

LCALL CLR0

AJMP SETMM

SET4:INC R5

SEET4:LCALLDISPLAY

JB P1.7,SEET4

SETHH:LCALLDDL

JB P1.7,SETOUT1

MOV R0,#79H

LCALLADD1

MOV A,R3

CLR C

CJNEA,#24H,HOUU

HOUU:JC SETHH

LCALL CLR0

AJMP SETHH

SETOUT1:SETB ET0

SETB TR0 计时开始

SETOUT:MOV R5,#00H 清设置类型闪烁标志

CLRTR1 关闭T1

CLRET1 关T1中断

MOV 66H,#1

SETOUT2:LCALLDISPLAY

JNB P1.7,SETOUT2

LJMPSTART1

--------------------------延时1秒钟-----------------------

DDL:MOV 18H,#36

DDL0:MOV 17H,#239

DDL1:LCALLDISPLAY

DJNZ 17H,DDL1

DJNZ 18H,DDL0

RET

----------------------------T0中断程序------------------------

INTT0: PUSH ACC 打包

PUSH PSW

CLR ET0

CLR TR0

MOV A,#0B7H

ADD A,TL0

MOV TL0,A

MOV A,#3CH

ADDC A,TH0

MOV TH0,A

SETB TR0

DJNZ R4, OUTT0 20次中断未到中断退出

ADDSS: MOV R4,#14H 20次中断到(1秒)重赋初值

MOV R0,#71H 指向秒计时单元(70-71H)

ACALL ADD1 调用加1程序(加1秒 *** 作)

MOV A,R3 秒数据放入A(R3为2位十进制数组合)

CLR C 清进位标志

CJNE A,#60H,ADDMM

ADDMM: JC OUTT01小于60秒退出

ACALL CLR0 等于或大于60秒清0

MOV R0,#77H 指向分计时单元(76H-77H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#60H,ADDHH

ADDHH: JC OUTT0

ACALL CLR0

MOV R0,#79H 指向小时计时单元(78H-79H)

ACALL ADD1

MOV A,R3

CLR C

CJNE A,#24H,HOUR

HOUR: JCOUTT0

ACALL CLR0

OUTT0: MOV A,66H 查询标志

CJNE A,#1,OUTT01

MOV 72H,76H 中断退出时将分、时计时单元数据移入对应显示单元

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

OUTT01:POP PSW 出栈

POP ACC

SETB ET0 开放T0

RETI中断返回

---------------------------加1程序--------------------------

ADD1: MOV A,@R0 取当前计时单元数据到A

DEC R0 指向前一地址

SWAP A A中数据高四位与低四位交换

ORL A,@R0 前一地址中数据放入A中低四位

ADD A,#01H A加1 *** 作

DA A 十进制调整

MOV R3,A 移入R3寄存器

ANL A,#0FH 高四位变0

MOV@R0,A 放回前一地址单元

MOV A,R3 取回R3中暂存数据

INCR0 指向当前地址单元

SWAP A A中数据高四位与低四位交换

ANL A,#0FH 高四位变0

MOV @R0,A 数据放入当削地址单元中

RET

CLR0: CLR C

CLR A 清累加器

MOV @R0,A 清当前地址单元

DEC R0 指向前一地址

MOV @R0,A 前一地址单元清0

RET 子程序返回

-------------------------调时闪烁程序----------------------

INTT1: PUSHACC

PUSHPSW

MOV TL1,#0B0H

MOV TH1,#3CH

DJNZR2,INTT1OUT0.3秒未到退出中断(50MS中断6次)

MOV R2,#06H 重装0.3秒定时用初值

CPL 02H0.3秒定时到对闪烁标志取反

JB 02H,FLASH1 02H位为1时显示单元"熄灭"

MOV A,R5

CJNEA,#01H,NL

JMP NNN1

NL:CJNEA,#02H,NL1

LJMPNNN1

NL1:CJNEA,#03H,NL2

LJMPNLL

NL2:CJNEA,#04H,INTT1OUT

LJMPNLL

NLL:MOV 72H,76H

MOV 73H,77H

MOV 74H,78H

MOV 75H,79H

AJMPINTT1OUT

NNN1:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7DH

MOV 75H,7EH

INTT1OUT:POP PSW 恢复现场

POP ACC

RETI 中断退出

FLASH1:MOV A,R5

CJNEA,#01H,ML

LJMPMNN1

ML:CJNEA,#02H,ML1

LJMPMNN2

ML1:CJNEA,#03H,MN

LJMPMLL

MN:CJNEA,#04H,INTT1OUT

LJMPMHL

MLL:MOV 72H,7AH

MOV 73H,7AH 显示单元(72-73H),将不显示分数据

MOV 74H,78H

MOV 75H,79H

AJMPINTT1OUT

MHL:MOV 72H,76H

MOV 73H,77H

MOV 74H,7AH 显示单元(74-75H),小时数据将不显示

MOV 75H,7AH

AJMPINTT1OUT

MNN1:MOV 72H,7AH

MOV 73H,7AH 显示单元(72-73H),将不显示闹钟分数据

MOV 74H,7DH

MOV 75H,7EH

AJMPINTT1OUT

MNN2:MOV 72H,7BH

MOV 73H,7CH

MOV 74H,7AH

MOV 75H,7AH 显示单元(74-75H),闹钟小时数据将不显示

AJMPINTT1OUT

-------------------------显示-------------------------------

DISPLAY:MOVDPTR,#DISDATA

MOVA,70H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.0

NOP

NOP

NOP

SETB P1.0

MOVA,71H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.1

NOP

NOP

NOP

SETB P1.1

MOVA,72H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.2

NOP

NOP

NOP

SETB P1.2

MOVA,73H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.3

NOP

NOP

NOP

SETB P1.3

MOVA,74H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.4

NOP

NOP

NOP

SETB P1.4

MOVA,75H

MOVC A,@A+DPTR

MOVP3,A

CLRP1.5

NOP

NOP

NOP

SETB P1.5

RET

BEEP:MOV A,68H 查询标志

CJNE A,#1,BEERE

MOV A,78H 查询闹钟时个位

CJNE A,7DH,BEERE

MOV A,79H 查询闹钟时十位

CJNE A,7EH,BEERE

MOV A,76H 查询闹钟分个位

CJNE A,7BH,BEERE

MOV A,77H 查询闹钟分十位

CJNE A,7CH,BEERE

BB:CLR P1.6

LCALL DDL

SETB P1.6

LCALL DDL

JNB P1.7,BEERR

BEERE:RET

BEERR:SETB P1.6

MOV 68H,#0

LCALL DISPLAY

JNB P1.7,BEERR

JMP BEERE

DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH 0123456789空白

END

     

     键咐掘 1、首先我们要把万年历翻过来,即是背面要对向自身。

      2、紧接着按一下“设置”键(进入时间设置状态,同时年份“闪烁”,可按“上调”或“流水(下调)”键修改年份。

      3、修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“流水(下调)”键修改月份。需要注意的是按钮上面简此是双箭头的,这时电子钟的年份数字就会开始闪烁稿核。

      4、然后我们再按一下就轮到月份的数字闪烁,像这样依次年月日时分选择。

      5、然后再按“+”的按钮,旁边写着“修改/闹铃”那个。(按“+”按钮只能是往上加,没有减的)。

      6、最后按一下“复位”按钮,最回到正常时间状态即可调好时间了。


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

原文地址: http://outofmemory.cn/yw/12331324.html

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

发表评论

登录后才能评论

评论列表(0条)

保存