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
776 B
36 lines
776 B
|
11 hours ago
|
#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
|
||
|
|
}
|