按键精灵9怎么用一个脚本同时运行2个子程序

按键精灵9怎么用一个脚本同时运行2个子程序,第1张

用多线程

BeginThread 一

BeginThread 二

Sub 一

TracePrint "运行子程序一"

End Sub

Sub 二

TracePrint "运行子程序二"

End Sub

在自定义界面,创建一个按钮后,复制这段代码运行就知道了

Event Form1Button1Click

Call 我是一个子程序()'这是单线程方式

线程ID= BeginThread(我是一个子程序)'这是多线程阿方式

End Event

Sub 我是一个子程序()

MessageBox "我是子程序里面的命令,d出信息窗口"

End Sub

e=0]版本 2

支持库 shellEx

子程序 _编辑框1_按下某键, 逻辑型

参数 键代码, 整数型

参数 功能键状态, 整数型

如果真 (选择框1选中)

集_Q = 注册热键 (_启动窗口取窗口句柄 (), 标签1取窗口句柄 (), 0, 键代码)

[/e]

;实用单片机电子钟的制作

;主程序(MAIN),如下:

ORG

0000H

AJMP

MAIN

ORG

000BH

AJMP

TIME

ORG

0300H

MAIN:

mov

20h,#00h

MOV

21H,#00H

MOV

22H,#00H

MOV

23H,#00H

MOV

IP,#02H

;IP,IE初始化

MOV

IE,#82H

MOV

TMOD,#01H

;设定定时器工作方式

MOV

TL0,#0B0H

MOV

TH0,#3CH

SETB

TR0

;启动定时

MOV

SP,#40H

;重设堆栈指针

NEXT:

LCALL

DISP

;调用显示子程序

LCALL

KEY

;调用按键检测子程序

JZ

NEXT

;

LCALL

ANKEY

;调用按键处理子程序

SJMP

NEXT

;重新循环

NOP

NOP

NOP

;定时中断处理程序:

TIME:

PUSH

ACC

;保护现场

PUSH

PSW

MOV

TL0,#0B4H

;赋定时初值

MOV

TH0,#3CH

INC

20H

;

MOV

A,20H

CJNE

A,#20,RETI1

MOV

20H,#00H

;一秒钟时间到

MOV

A,21H

ADD

A,#01H

DA

A

MOV

21H,A

CJNE

A,#60H,RETI1

MOV

21H,#00H

;一分钟时间到

MOV

A,22H

ADD

A,#01H

DA

A

MOV

22H,A

CJNE

A,#60H,RETI1

MOV

22H,#00H

;一小时时间到

MOV

A,23H

ADD

A,#01H

DA

A

MOV

23H,A

CJNE

A,#24H,RETI1

MOV

23H,#00H

;到时间达到24小时,清零

RETI1:

POP

PSW

;恢复现场

POP

ACC

RETI

;中断返回

NOP

NOP

;显示子程序

DISP:

ANL

2FH,#10H

;处理小数点

MOV

A,21H

;处理秒21H-->2DH,2EH

ANL

A,#0FH

ORL

A,2FH

MOV

2FH,A

MOV

A,21H

ANL

A,#0F0H

SWAP

A

MOV

2EH,A

ANL

2DH,#10H

MOV

A,22H

;处理分钟22H-->2CH,2DH

ANL

A,#0FH

ORL

A,2DH

MOV

2DH,A

MOV

A,22H

ANL

A,#0F0H

SWAP

A

MOV

2CH,A

ANL

2BH,#10H

MOV

A,23H

;处理小时23H-->2AH,2BH

ANL

A,#0FH

ORL

A,2BH

MOV

2BH,A

MOV

A,23H

ANL

A,#0F0H

SWAP

A

MOV

2AH,A

MOV

R0,#2FH

;显示偏移量

MOV

R3,#06H

MOV

DPTR,#TABLE

MOV

A,#0BFH

LOOP1:

MOV

B,A

;

MOV

P2,a

MOV

A,@R0

MOVC

A,@A+DPTR

MOV

P0,a

;送显示

MOV

R2,#80H

;延时

DJNZ

R2,$

DEC

R0

MOV

A,B

RR

A

DJNZ

R3,LOOP1

;循环显示

RET

TABLE:

db

28h,7eh,0a2h,62h,74h,61h,21h

;不带小数点

DB

7ah,20h,60h,00,00,00,00,00,00

DB

8H,5eH,82H,42H,54H,41H,1H,5aH

;带小数点

DB

00H,40H,00,00,00,00,00,00

NOP

NOP

;按键判断程序

KEY:

MOV

P3,#0FFH

;

MOV

A,P3

CPL

A

ANL

A,#3CH

JZ

RETX

;无键按下则返回

LCALL

DISP

;

LCALL

DISP

MOV

A,P3

CPL

A

ANL

A,#3CH

JZ

RETX

;键盘去抖动。

MOV

R6,A

;将键值存入R6。

LOOP2:

LCALL

DISP

;

MOV

A,P3

CPL

A

ANL

A,#3CH

JNZ

LOOP2

;等待键释放

MOV

A,R6

RETX:

RET

NOP

NOP

;按键处理子程序

ANKEY:

CLR

EA

;关中断

LX:

MOV

A,R6

JB

ACC2,L1

;是功能键转L1

JB

ACC3,L2

;是确认键转L2

JB

ACC4,L3

;是减1键转L3

JNB

ACC5,L12

;不是增1键,转L12

JB

2BH4,L6

;判断使哪一位(时、分、秒)的值加1

JB

2DH4,L8

JB

2FH4,L9

L12:

LCALL

DISP

LCALL

DISP

LCALL

KEY

;判断有无键按下。

JZ

L12

LJMP

LX

L2:

MOV

25H,#00H

;确认键处理程序

CLR

2BH4

CLR

2DH4

CLR

2FH4

SETB

EA

RET

L3:

JB

2BH4,L61

;增一键处理程序

JB

2DH4,L81

JB

2FH4,L91

AJMP

L12

L1:

MOV

A,25H

;功能键处理程序

JZ

LB1

JB

ACC0,LB2

JB

ACC1,LB3

JNB

ACC2,L12

LB1:

MOV

25H,#01H

;25H单元是标志位,(25H)=01H调节时单元的值

SETB

2BH4

CLR

2DH4

CLR

2FH4

AJMP

L12

LB3:

MOV

25H,#04H

;25H单元是标志位,(25H)=01H调节秒单元的值

SETB

2FH4

CLR

2DH4

CLR

2BH4

AJMP

L12

LB2:

MOV

25H,#02H

;25H单元是标志位,(25H)=01H调节分单元的值

SETB

2DH4

CLR

2BH4

CLR

2FH4

AJMP

L12

L61:

AJMP

L611

;

L81:

AJMP

L811

;

L91:

AJMP

L911

L6:

MOV

A,23H

;时加一

ADD

A,#01H

DA

A

MOV

23H,A

CJNE

A,#24H,L15

L15:

JC

L112

MOV

23H,#00H

L112:

AJMP

L12

L8:

MOV

A,22H

;分加一

ADD

A,#01H

DA

A

MOV

22H,A

CJNE

A,#60H,L16

L16:

JC

L112

MOV

22H,#00H

AJMP

L12

L9:

MOV

A,21H

;秒加一

ADD

A,#01H

DA

A

MOV

21H,A

CJNE

A,#60H,L17

L17:

JC

L112

MOV

21H,#00H

AJMP

L12

L611:

MOV

A,23H

;时减一

ADD

A,#99H

DA

A

MOV

23H,A

CJNE

A,#99H,L112

MOV

23H,#23H

AJMP

L12

L811:

MOV

A,22H

;分减一

ADD

A,#99H

DA

A

MOV

22H,A

CJNE

A,#99H,L112

MOV

22H,#59H

AJMP

L12

L911:

MOV

A,21H

;秒减一

ADD

A,#99H

DA

A

MOV

21H,A

CJNE

A,#99H,L112

MOV

21H,#59H

AJMP

L12

NOP

NOP

END

应该用一个标志位,如果你这种是普通的按键,即按下时是低电平,松开时是高电平的,大概这样写,在main声明一个变量,作为标志位

char Flag;

然后按键按下时,直到d起按键才改变Flag的状态。

if(!Key)

{

while(!Key);

Flag=~Flag;

}

if(Flag)

{

time = hour100 + min;

ShowTest(time);

delay();

}

else

{

gettempts();

display(t);

}

把这个放在while(1)中,就可以了。

希望我的回答对你有帮助,有什么问题欢迎一起探讨。

;P1口接键盘进行扫描,P2口接数码管的位码,P0口接数码管的段码

ORG 0000H

LJMP START

ORG 0030H

START:

MOV 30H,#10H ;第8个数码管显示数据缓存寄存器

MOV 31H,#10H ;第7个数码管显示数据缓存寄存器

MOV 32H,#10H ;第6个数码管显示数据缓存寄存器

MOV 33H,#10H ;第5个数码管显示数据缓存寄存器

MOV 34H,#10H ;第4个数码管显示数据缓存寄存器

MOV 35H,#10H ;第3个数码管显示数据缓存寄存器

MOV 36H,#10H ;第2个数码管显示数据缓存寄存器

MOV 37H,#10H ;第1个数码管显示数据缓存寄存器

MAIN:

LCALL SAOMIAO ;调用键盘扫描寄存器

LCALL DISPLAY ;调用显示寄存器

LJMP MAIN

SAOMIAO:

MOV P1,#11111110B ;将P14-P17口做为输入检测口,屏蔽P10-P13三行按键,扫描P00行的按键

JNB P14,A0 ;第一行第一个按键被按下,则跳至A0

JNB P15,A1 ;第一行第二个按键被按下,则跳至A1

JNB P16,A2 ;第一行第三个按键被按下,则跳至A2

JNB P17,A3 ;第一行第四个按键被按下,则跳至A3

MOV P1,#11111101B ;扫描P01接的第二行

JNB P14,A4 ;第二行第一个按键被按下,则跳至A4

JNB P15,A5

JNB P16,A6

JNB P17,A7

MOV P1,#11111011B

JNB P14,A8

JNB P15,A9

JNB P16,A10

JNB P17,A11

MOV P1,#11110111B

JNB P14,A12

JNB P15,A13

JNB P16,A14

JNB P17,A15

RET

A0:

LJMP AN0 ;由于JNB指令的跳转范围仅为8位,所以用LJMP跳入按键处理子程序

A1:

LJMP AN1

A2:

LJMP AN2

A3:

LJMP AN3

A4:

LJMP AN4

A5:

LJMP AN5

A6:

LJMP AN6

A7:

LJMP AN7

A8:

LJMP AN8

A9:

LJMP AN9

A10:

LJMP AN10

A11:

LJMP AN11

A12:

LJMP AN12

A13:

LJMP AN13

A14:

LJMP AN14

A15:

LJMP AN15

AN0:

LCALL DISPLAY

MOV P1,#11111110B

JNB P14,AN0 ;按键消抖

MOV 3FH,#0 ;将按键值送入按键缓存寄存器

LJMP YIDONG ;调用移动子程序

AN1:

LCALL DISPLAY

MOV P1,#11111110B

JNB P15,AN1

MOV 3FH,#1

LJMP YIDONG

AN2:

LCALL DISPLAY

MOV P1,#11111110B

JNB P16,AN2

MOV 3FH,#2

LJMP YIDONG

AN3:

LCALL DISPLAY

MOV P1,#11111110B

JNB P17,AN3

MOV 3FH,#3

LJMP YIDONG

AN4:

LCALL DISPLAY

MOV P1,#11111101B

JNB P14,AN4

MOV 3FH,#4

LJMP YIDONG

AN5:

LCALL DISPLAY

MOV P1,#11111101B

JNB P15,AN5

MOV 3FH,#5

LJMP YIDONG

AN6:

LCALL DISPLAY

MOV P1,#11111101B

JNB P16,AN6

MOV 3FH,#6

LJMP YIDONG

AN7:

LCALL DISPLAY

MOV P1,#11111101B

JNB P17,AN7

MOV 3FH,#7

LJMP YIDONG

AN8:

LCALL DISPLAY

MOV P1,#11111011B

JNB P14,AN8

MOV 3FH,#8

LJMP YIDONG

AN9:

LCALL DISPLAY

MOV P1,#11111011B

JNB P15,AN9

MOV 3FH,#9

LJMP YIDONG

AN10:

LCALL DISPLAY

MOV P1,#11111011B

JNB P16,AN10

MOV 3FH,#10

LJMP YIDONG

AN11:

LCALL DISPLAY

MOV P1,#11111011B

JNB P17,AN11

MOV 3FH,#11

LJMP YIDONG

AN12:

LCALL DISPLAY

MOV P1,#11110111B

JNB P14,AN12

MOV 3FH,#12

LJMP YIDONG

AN13:

LCALL DISPLAY

MOV P1,#11110111B

JNB P15,AN13

MOV 3FH,#13

LJMP YIDONG

AN14:

LCALL DISPLAY

MOV P1,#11110111B

JNB P16,AN14

MOV 3FH,#14

LJMP YIDONG

AN15:

LCALL DISPLAY

MOV P1,#11110111B

JNB P17,AN15

MOV 3FH,#15

LJMP YIDONG

YIDONG: ;移动子程序,将数码管数字向左移动一位

MOV 37H,36H

MOV 36H,35H

MOV 35H,34H

MOV 34H,33H

MOV 33H,32H

MOV 32H,31H

MOV 31H,30H

MOV 30H,3FH

RET

DISPLAY:

MOV DPTR,#TAB

MOV A,30H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11101111B

LCALL DELAY

MOV DPTR,#TAB

MOV A,31H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11011111B

LCALL DELAY

MOV DPTR,#TAB

MOV A,32H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#10111111B

LCALL DELAY

MOV DPTR,#TAB

MOV A,33H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#01111111B

LCALL DELAY

MOV DPTR,#TAB

MOV A,34H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11111110B

LCALL DELAY

MOV DPTR,#TAB

MOV A,35H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11111101B

LCALL DELAY

MOV DPTR,#TAB

MOV A,36H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11111011B

LCALL DELAY

MOV DPTR,#TAB

MOV A,37H

MOVC A,@A+DPTR

MOV P0,A

MOV P2,#11110111B

LCALL DELAY

RET

TAB:

DB 03H 9FH 25H 0DH 99H 49H 41H 1FH ;03H到071H是表示0到F

DB 01H 19H 11H 0C1H 0E5H 85H 21H 71H

DB 0FFH ;“0”——“F”再加上不显示,一共十七个代码

DELAY:

MOV R6,#5

D1:

MOV R7,#255

DJNZ R7,$

DJNZ R6,D1

RET

以上就是关于按键精灵9怎么用一个脚本同时运行2个子程序全部的内容,包括:按键精灵9怎么用一个脚本同时运行2个子程序、按键精灵怎么用按钮来启动sub子程序、易语言如何实现按住热键开启子程序功能松开热键关闭子程序功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10169779.html

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

发表评论

登录后才能评论

评论列表(0条)

保存