用多线程
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子程序、易语言如何实现按住热键开启子程序功能松开热键关闭子程序功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)