设计者:杨剑锋 桂林理工大学机械控制与控制工程学院
表3-1 数据储存地址命名标号表 名称 步数个位储存地址 步数十位储存地址 步数百位储存地址 步数千位储存地址 步数万位储存地址 步数十万位储存地址 标号 GB SB BB QB WB SWB 地址单元 40H 41H 42H 43H 44H 45H 名称 步数百万位储存地址 电机转速查询表偏移量 电机启/停控制 电机控制偏移量输出脉冲 键按下状态 键按下状态中间变量 标号 BWB SD JK KZ KONZ KBL 地址单元 46H 47H 48H 49H 4AH 4BH 3.2主程序设计
为节省单片机程序扫描时间,使用定时器T0中断方式转入控制电机运行,定时器T0定时时间为电机运转“拍数”切换时间,即控制电机的脉冲切换时间,根据步进电机控制原理,改变此定时器定时时间可改变电机转速。由此定时器定时时间未到时不断进行键盘扫描的输出显示。时间初值查询表SD_TAB见程序所用到的查询表及其说明部分表4-1;主程序流程图如图3-1所示。
主程序清单如下:
ORG 0000H LJMP MAIN ORG 000BH LJMP DJKZ ORG 0050H
MAIN:
GB EQU 40H
;主程序
;定义步数十位存储单元
第 6 页 共 25 页
设计者:杨剑锋 桂林理工大学机械控制与控制工程学院
SB EQU 40H BB EQU 40H QB EQU 40H WB EQU 40H SWB EQU 40H BWB EQU 40H SD EQU 40H JK EQU 40H KONZ EQU 40H KBL EQU 40H
;定义步数百位存储单元 ;定义步数千位存储单元 ;定义步数万位存储单元 ;定义步数十万位存储单元 ;定义步数百万位存储单元 ;定义步数个位存储单元
;定义电机转速表查询偏移量存储单元 ;定义电机控制表偏移量存储单元 ;定义输入口按键按下状态暂存单元
;定义输入口按键按下状态中间变量存储单元
MOV P0,#00H ;I/O口初始化 MOV P1,#0FFH ; MOV P2,#0FFH ; MOV P3,#0FFH ; MOV GB,#00H ;步数个位初始化 MOV SB,#00H ;步数十位初始化 MOV BB,#00H ;步数百位初始化 MOV QB,#00H ;步数千位初始化 MOV WB,#00H ;步数万位初始化 MOV SWB,#00H ;步数十万位初始化 MOV BWB,#00H ;步数百万位初始化 MOV SD,#1 ;电机转速开机默认为200r/min MOV JK,#0 ;电机控制状态开机为停止 MOV KZ,#0 ;速度查询表偏移初始化0 MOV TMOD,#01H ;T0控制模式为1 MOV DPTR,#SD_TAB ;DPRT指向转速查询表首地址 MOV A,SD ;取转速查询表偏移量 MOVC A,@A+DPTR ;取定时器低位初值 MOV TL0,A ;装入定时器低位初值 MOV A,SD ;取转速查询表偏移量 ADD A,#10 ;调整转速查询表偏移量,为取T0高位做准备 DA A ;十进制数调整 MOVC A,@A+DPTR ;取定时器高位初值 MOV TH0,A ;装入定时器高位初值 MOV IE,#82H ;T0开中断 SETB TR0 ;启动T0
LOOP:
LCALL KEY_SUB ;调用键盘扫描录入程序 LCALL DISP_SUB ;调用显示程序 LJMP LOOP ;返回LOOP
SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH DB F6H, FBH, FCH, FDH, FEH, FEH, FEH, FEH, FFH, FFH
3.2键盘录入子程序
实现功能:通过扫描键盘,判断是否有键按下,若有键按下则改变相应控制地址单元的内容,为后面的显示和电机控制做准备。键盘数据录入子程序流程图如图3-2所示;输入键键号查询表IN_TAB见程序所用到的查询表及其说明部分表4-2;电机启/停控制和显示段选
第 7 页 共 25 页
设计者:杨剑锋 桂林理工大学机械控制与控制工程学院
码表SRDS_TAB见程序所用到的查询表及其说明部分表4-3;键盘扫描子程序流程图如图3-2所示。
键盘扫描方法:由硬件设计可知,键盘是4*4的行、列结构设计,行由P1.0~P1.3口输入,列由P1.4~P1.7口输入,其中行线通过上拉电阻接+5V,平时无按键动作时,行线处于高电平状态,而当有按键按下时,则对应的行线和列线短接,行线电平状态将由与此行线相连的列线电平决定。因此,其扫描方法是:先令P1.4列线为低电平,其余三根列线为高电平,读行线状态。如果行线都为高电平,则这一列线上没有键闭合,接着使下一列线P1.5为低电平,其余列线为高电平,用同样方法检查P1.5列上没无键闭合,依次类推,直到最后一列扫描完成。
第 8 页 共 25 页
设计者:杨剑锋 桂林理工大学机械控制与控制工程学院
第 9 页 共 25 页
设计者:杨剑锋 桂林理工大学机械控制与控制工程学院
键盘录入程序代码如下: KEY_SUB:
LCALL KNUM_SUB MOV A, KONZ ORL A, #0FH MOV KBL, A CJNE A, #0FFH, KE_NEXT1 LJMP KE_NEXT
KE_NEXT1: MOV R7, #10
LCALL DEL_SUB DJNZ R7, KE_NEXT1 LCALL KNUM_SUB CJNE A, KONZ, KE_NEXT
KE_LOOP1:
;键盘录入程序 ;调用键盘扫描程序 ;保存初次扫描输入状态 ;输入状态高四位置1 ;保存 ;(A)≠0FFH,有按键输入,转去抖动 ;否则转子程序返回
;延时10ms去抖动 ;调用延时1ms程序 ;
;再次调用键盘扫描程序
;若(A)=(KONZ),确认有键按下,等待按键 ;释放否则转子程序返回
第 10 页 共 25 页