You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
781 B
36 lines
781 B
#include "dipSwitch.h"
|
|
|
|
/*
|
|
* 회로도 기준:
|
|
* ADD_1..ADD_5 = P8.1..P8.5
|
|
* Pull-up to VCC5, DIP ON -> GND(LOW) => Active-Low
|
|
*/
|
|
#define DIP_PORT P8
|
|
#define DIP_PM PM8
|
|
#define DIP_MASK (0x3Eu) // b0011_1110 = P8.1~P8.5
|
|
#define DIP_SHIFT (1u) // P8.1이 bit0로 오도록
|
|
|
|
void DipSwitch_Init(void)
|
|
{
|
|
// 입력 설정: PM bit=1 => input
|
|
DIP_PM |= DIP_MASK;
|
|
|
|
}
|
|
|
|
uint8_t DipSwitch_ReadValue_0to31(void)
|
|
{
|
|
uint8_t raw = (uint8_t)(DIP_PORT & DIP_MASK);
|
|
|
|
// Active-Low이므로 반전 후, 마스크 적용
|
|
uint8_t v = (uint8_t)((~raw) & DIP_MASK);
|
|
|
|
// P8.1~P8.5 -> bit0~bit4
|
|
v = (uint8_t)(v >> DIP_SHIFT);
|
|
|
|
return (uint8_t)(v & 0x1Fu); // 0~31
|
|
}
|
|
|
|
uint8_t DipSwitch_ReadAddr_1to32(void)
|
|
{
|
|
return (uint8_t)(DipSwitch_ReadValue_0to31() + 1u); // 1~32
|
|
}
|
|
|