MinSpd EQU 25 ;起始转动速度
MaxSpd EQU 100 ;最高转动速度
Speed DATA 23H ;流动速度计数
DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111
Hidden EQU 10H ;消隐码
Counter DATA 57H ;显示计数器
DISPBUF DATA 58H ;显示缓冲区
ORG 0000H
AJMP MAIN
ORG 000BH
JMP DISP
ORG 001BH
JMP DJZD
ORG 30H
MAIN:
MOV SP#5FH
MOV P1#0FFH
MOV A#Hidden
MOV DispBufA
MOV DispBuf+1A
MOV DispBuf+2A
MOV DjCount#11110111B
MOV SPEED#MinSpd ;起始转动速度送入计数器
CLR StartEnd ;停转状态
MOV TMOD#00010001B ;
MOV TH0#HIGH(65536-3000)
MOV TL0#LOW(65536-3000)
MOV TH1#0FFH;
MOV TL1#0FFH
SETB TR0
SETB EA
SETB ET0
SETB ET1
LOOP: ACALL KEY ;键盘程序
JNB F0m_NEXT1 ;无键继续
ACALL KEYPROC ;否则调用键盘处理程序
m_NEXT1:
MOV ASpeed
MOV B#10
DIV AB
MOV DispBuf+5B ;最低位
MOV B#10
DIV AB
MOV DispBuf+4B
MOV DispBuf+3A
JB StartEndm_Next2
CLR TR1 ;关闭电机
JMP LOOP
ORL P1#11110000B
m_Next2:
SETB TR1 ;启动电机
AJMP LOOP ;主程序结束
;---------------------------------------
D10ms:
……
;---------延时程序键盘处理中调用
KEYPROC:
MOV AB ;获取键值
JB ACC.2StartStop ;分析键的代码某位被按下则该位为1
JB ACC.3KeySty
JB ACC.4UpSpd
JB ACC.5DowSpd
AJMP KEY_RET
StartStop:
SETB StartEnd ;启动
AJMP KEY_RET
KeySty:
CLR StartEnd; ;停止
AJMP KEY_RET
UpSpd:
INC SPEED;
MOV ASPEED
CJNE A#MaxSpdK1 ;到了最多的次数?
DEC SPEED ;是则减去1,保证下次仍为该值
K1:
AJMP KEY_RET
DowSpd:
DEC SPEED
MOV ASPEED
CJNE A#MAXSPDKEY_RET ;不等(未到最大值),返回
MOV SPEED#MinSpd;
KEY_RET:
RET
KEY:
……获取键值的程序
RET
DjZd: ;定时器T1用于电机转速控制
PUSH ACC
PUSH PSW
MOV ASpeed
SUBB A#MinSpd ;减基准数
MOV DPTR#DjH
MOVC AA+DPTR
MOV TH1A
MOV ASpeed
SUBB A#MinSpd
MOV DPTR#DjL
MOVC AA+DPTR
MOV TL1A
MOV ADjCount
CPL A
ORL P1A
MOV ADjCount
JNB ACC.7d_Next1
JMP d_Next2
d_Next1:
MOV DjCount#11110111B
d_Next2:
MOV ADjCount
RL A
MOV DjCountA ;回存
ANL P1A
POP PSW
POP ACC
RETI
DjH: DB 7682899510010611011511912312……
DjL: DB 02368673212021496163165
……
DISP: ;显示程序
POP PSW
POP ACC
……
RETI
BitTab: DB 7Fh0BFH0DFH0EFH0F7H0FBH
DISPTAB:DB 0C0H0F9H0A4H0B0H99H92H82H0F8H80H90H88H83H0C6H0A1H86H8EH0FFH
上一篇:嵌入式工控机在电子路考系统中的应用介绍
下一篇:一种新型充电器的设计方案分享
