PMAC 实现矩阵键盘

本文档详细介绍了如何使用PMAC(Positioning Machine Arithmetic Controller)控制器来实现矩阵键盘的操作。通过配置数字输入输出,设定端口模式,定义定时器和计数器,以及处理按键状态变化,实现对多个按键的识别和处理。代码中涉及到的变量和状态标志,如按键状态、LED状态和功能状态,用于控制和反馈矩阵键盘的工作情况。
摘要由CSDN通过智能技术生成


M0->Y:$78400,0 ; Digital Output M00
M1->Y:$78400,1 ; Digital Output M01
M2->Y:$78400,2 ; Digital Output M02
M3->Y:$78400,3 ; Digital Output M03
M4->Y:$78400,4 ; Digital Output M04
M5->Y:$78400,5 ; Digital Output M05
M6->Y:$78400,6 ; Digital Output M06
M7->Y:$78400,7 ; Digital Output M07
M8->Y:$78400,0,8    ;Output1-8

M9->Y:$78400,8 ; Digital Input MI0
M10->Y:$78400,9 ; Digital Input MI1
M11->Y:$78400,10 ; Digital Input MI2
M12->Y:$78400,11 ; Digital Input MI3
M13->Y:$78400,12 ; Digital Input MI4
M14->Y:$78400,13 ; Digital Input MI5
M15->Y:$78400,14 ; Digital Input MI6
M16->Y:$78400,15 ; Digital Input MI7
M17->Y:$78400,8,8    ;Input1-8

;IO端口模式设置
M32->X:$78400,0,8 ; Direction Control bits 0-7 (1=output, 0 = input)
M34->X:$78400,8,8 ; Direction Control bits 8-15 (1=output, 0 = input)
M40->X:$78404,0,24 ; Inversion control (0 = 0V, 1 = 5V)
M42->Y:$78404,0,24 ; J9 port data type control (1 = I/O)
M32=$FF ;BITS 0-8 are assigned as output
M34=$0 ;BITS 9-16 are assigned as input
M40=$FF00 ;Define inputs and outputs mode sinking
M42=$FFFF ;All lines are I/O type

M5111->X:$002015,0,24,S ; &1 Isx11 timer (for synchronous assignment)
M5112->X:$002115,0,24,S ; &2 Isx11 timer (for synchronous assignment)
M5211->X:$002115,0,24,S          ; &2 Isx11计时器(适合于同步分配)
M5212->Y:$002115,0,24,S          ; &2 Isx12计时器(适合于同步分配)
M5311->X:$002215,0,24,S          ; &3 Isx11 计时器(适合于同步分配)
M5312->Y:$002215,0,24,S          ; &3 Isx12 计时器(适合于同步分配)
M5411->X:$002315,0,24,S           ; &4 Isx11计时器(适合于同步分配)
M5412->Y:$002315,0,24,S           ; &4 Isx12计时器(适合于同步分配)
M5511->X:$002415,0,24,S          ; &5 Isx11计时器(适合于同步分配)
M5512->Y:$002415,0,24,S          ; &5 Isx12计时器(适合于同步分配)
M5611->X:$002515,0,24,S           ; &6 Isx11 计时器(适合于同步分配)
M5711->X:$002615,0,24,S          ; &7 Isx11 计时器(适合于同步分配)
M5712->Y:$002615,0,24,S          ; &7 Isx12 计时器(适合于同步分配)
M5811->X:$002715,0,24,S          ; &8 Isx11计时器(适合于同步分配)
M5812->Y:$002715,0,24,S          ; &8 Isx12计时器(适合于同步分配)
M5911->X:$002815,0,24,S          ; &9 Isx11计时器(适合于同步分配)
M5912->Y:$002815,0,24,S          ; &9 Isx12计时器(适合于同步分配)
M6011->X:$002915,0,24,S          ; &10 Isx11计时器(适合于同步分配)
M6012->Y:$002915,0,24,S          ; &10 Isx12计时器(适合于同步分配)
M6111->X:$002A15,0,24,S          ; &11 Isx11计时器(适合于同步分配)
M6112->Y:$002A15,0,24,S          ; &11 Isx12计时器(适合于同步分配)
M6211->X:$002B15,0,24,S          ; &12 Isx11计时器(适合于同步分配)
M6212->Y:$002B15,0,24,S          ; &12 Isx12计时器(适合于同步分配
M6311->X:$002C15,0,24,S          ; &13 Isx11 计时器(适合于同步分配)
M6312->Y:$002C15,0,24,S          ; &13 Isx12 计时器(适合于同步分配)
M6411->X:$002D15,0,24,S          ; &14 Isx11计时器(适合于同步分配)
M6412->Y:$002D15,0,24,S          ; &14 Isx12计时器(适合于同步分配)
M6511->X:$002E15,0,24,S          ; &15 Isx11计时器(适合于同步分配)
M6512->Y:$002E15,0,24,S          ; &15 Isx12计时器(适合于同步分配)

#define CS1MTimer1                 M5111            ;定时器,计数器
#define CS1MTimer2                 M5112            ;定时器,计数器
#define CS1MTimer3                 M5211            ;定时器,计数器
#define CS1MTimer4                 M5212            ;定时器,计数器

//定时器设置
I6800 = 117964.8/(29.4*4)-1;TIME
I6801=29.4/9.8-1
I6802=29.4/2.45-1

#define    KEY_DELAY_TIME                10
#define    KEYUP_DELAY_TIME            10
#define    LED_DELAY_TIME                2

#define         HPin        0
#define        LPin        1

#define        TRUE        1
#define        FALSE        0

#define        MAX_KEYROW    5
#define        rKeyScanRowInc    P50
#define        rReadKeyIO    P51

//KEY行
#define        KEY_ROW0    M0
#define        KEY_ROW1    M1
#define        KEY_ROW2    M2
#define        KEY_ROW3    M3
#define        KEY_ROW4    M4
#define        KEY_ROW5    M5
#define        KEY_ROW6    M6
#define        KEY_ROW7    M7

//LED行
#define        LED_ROW0    M7900
#define        LED_ROW1    M7901
#define        LED_ROW2    M7902
#define        LED_ROW3    M7903
#define        LED_ROW4    M7904

//LED列
#define        LED_LIST0    M7905
#define        LED_LIST1    M7906
#define        LED_LIST2    M7907
#define        LED_LIST3    M7908
#define        LED_LIST4    M7909
#define        LED_LIST5    M7910
#define        LED_LIST6    M7911
#define        LED_LIST7    M7912

#define        bHomeKeyState                P200//回零位按键状态00
#define        bBacktoCenterKeyState            P201//回中位按键状态02
#define        bHPKeyState                P202//液压按键状态03
#define        bCoolingKeyState            P203//冷却按键状态04
#define        bOBKeyState                P204//油雾按键状态05
#define        bGWFAKeyState                P205//砂轮快进按键状态24
#define        bGWFBKeyState                P206//砂轮快退按键状态23
#define        bAutoModeKeyState            P207//自动按键状态10
#define        bStepModeKeyState            P208//单步按键状态12
#define        bManualModkeyState            P209//手动按键状态11
#define        bRelaxKeyState                P210//放松按键状态13
#define        bClamp1KeyState                P211//夹1按键状态14
#define        bClamp2KeyState                P212//夹2按键状态15
#define        bRCProgramKeyState            P213//修圆按键状态20
#define        bRFProgramKeyState            P214//修行按键状态21
#define        bAPProgramKeyState            P215//磨削按键状态22
#define        bGWSwitchKeyState            P216//砂轮启停按键状态25
#define        bPartLightKeyState            P217//工件照明30
#define        bCentralDotKeyState            P218//中点按键状态33
#define        bSReamerKeyState            P219//对刀按键状态34
#define        bPartSwitchKeyState         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值