MOV TL1,A
MOV A,DjCount
CPL A
ORL P1,A
MOV A,DjCount
JNB ACC.7,d_Next1
JMP d_Next2
d_Next1:
MOV DjCount,#11110111B
d_Next2:
MOV A,DjCount
RL A
MOV DjCount,A ;回存
ANL P1,A
POP PSW
POP ACC
RETI
DjH: DB 76,82,89,95,100,106,110,115,119,123,12……
DjL: DB 0,236,86,73,212,0,214,96,163,165
……
DISP: ;显示程序
POP PSW
POP ACC
……
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
END
3.程序分析
本程序主要由键盘程序、显示器程序、步进电机驱动程序三部份组成,主程序首先初始化各变量,
将显示器的高 3 位消隐,步进电机驱动的各引脚均输出高电平,然后调用键盘程序,并作判断,如果有键按
下,则调用键盘处理程序,否则直接转下一步。下一步是将当前的转速值转换为 BCD 码,送入显示缓冲区;
接着判断 StartEnd 这个位变量,是“1”还是“0”,如果是“1”,则开启定时器 T1,否则关闭定时器 T1,
为防止关闭时某一相线圈长期通电,因此,在关闭定时器 T1 时,将 P1.0~P1.3 均置高。至此,主程序的工
作即结束。这里为简便起见,这里没有做高位“0”消隐的工作,即如果速度为 10 转/分,则显示值
“010”,读者可以自行加入相关的代码来处理这一工作。
步进电机的驱动工作是在定时器 T1 的中断服务程序中实现的,由前述分析,每次的定时时间到达
以后,需要将 P1.0~P1.3 依次接通,程度中用了一个变量 DjCntr 来实现这一功能,在主程序初始化时,该
变量被赋予初值 11110111B,进入到定时中断以后,将该变量取出送 ACC 累加器,并在累加器中进行左移,
这样,该数值就变为 1110 1111,然后将该数与 P1 相“与”,此时,P1.4 即输出低电平,第二次进入中断
时,先将该数取反,成为 0001 0000,然后将该数与 P1 相“或”,这样,P1.4 即输出高电平,关断了相