PLC에서 도트 픽셀의 좌표계 (X, Y) 와 도트애니메이션을 구현합니다.
주요 기능으로는 방향키를 조작하여 도트 픽셀 이미지의 위치를 변경할수 있습니다.
참고로 왜 이런 짓을 하느냐? 그건 아무도 몰?루
그냥 재밌으니까요...
[ 좌표계 I/O Map ]
X0, X1 : X좌표계 이동 (+1 / -1)
X2, X3 : Y좌표계 이동 (+1 / -1)
Y0 ~ YFF : 미니맵 좌표 표시등
Y100 ~ Y8FD : 메인 베이스화면 좌표 표시등
D0 : X좌표
D1 : Y좌표
D2 : 미니맵 X, Y 좌표 연산
D4 : 메인 베이스화면 X, Y 좌표 연산
[ 프로그램 ]
#1. X, Y좌표계 구현
X0, X1 스위치를 누르면 D0을 가산, 감산 하여 X좌표를 움직합니다.
X2, X3 스위치를 누르면 D1을 가산, 감산 하여 Y좌표를 움직입니다.
이를 미니맵은 16* 16으로 설정하였으니 이를 표현하기 위하여 Column단인 Y좌표는 *16을 하고, X좌표는 더합니다.
그 결과를 D2에 저장합니다.
미니맵 좌표[D2] = (Y좌표[D1] * 16) + X좌표[D0]
이 연산된 좌표번호 D2를 이용하여 미니맵의 도트 램프인 Y0 부터 YFF 중 해당위치를 점등합니다.
#2. 스프라이트 도트 찍기
도트는 원하는 움직임에 맞추어 열(Row) 별로 도트를 찍어줍니다. 4*4 픽셀이라 간단하게 그려보았습니다.
좌측부터 0번비트로 다음과 같이 데이터를 미리 써두고 움직이는 조건을 만들어서 불러오면 되겠습니다.
#0
D100 = 0110 (0x6)
D101 = 1011 (0xD)
D102 = 1001 (0x9)
D103 = 0110 (0x6)
#1
D110 = 0110 (0x6)
D111 = 1001 (0x9)
D112 = 1011 (0xD)
D113 = 0110 (0x6)
#2
D120 = 0110 (0x6)
D121 = 1001 (0x9)
D122 = 1101 (0xB)
D123 = 0110 (0x6)
#3
D130 = 0110 (0x6)
D131 = 1101 (0xB)
D132 = 1001 (0x9)
D133 = 0110 (0x6)
#3. 좌표에 맞추어 스프라이트 도트 애니매이션 표현
앞서 D100부터 D130까지 도트를 미리 준비해놓은 이미지 4장을 D10에 특정 조건이 충족되면 변경되도록 구성합니다.
1열 : D100 -> D110 -> D120 -> D130
2열 : D101 -> D111 -> D121 -> D131
3열 : D102 -> D112 -> D122 -> D132
4열 : D103 -> D113 -> D123 -> D133
각 열마다 순차적으로 불러오면 되므로 인덱스를 이용하여 D10에 5초마다 D100부터 D130까지 값을 가져오도록 꾸며서 테스트 해봅니다.
#4. 메인 베이스화면에 도트 애니메이션 표현
메인 베이스에 스프라이트를 뿌리는것도 아까 미니맵의 램프를 계산 했던것과 같은 방법으로 계산합니다.
하지만 이번에는 메인베이스는 32*32 로 1열이 32개 비트로 구성되어있으므로 Y좌표에 *32, X는 위에서 했던것과 같이 더합니다.
베이스 좌표[D4] = (Y좌표[D1] * 32) + X좌표[D0]
그렇게 얻은 좌표[D4]를 이용하여 베이스화면 비트의 1열부터 4열까지 인덱스를 활용하여 4비트 단위로 비트를 표현합니다.
그런데... 재밌긴 한데 정말로 어디다 써먹죠..?
'PLC 전기제어 기술자료 > 뻘짓 연구소' 카테고리의 다른 글
프로페이스 I/O 램프 텍스트 일일이 써주기 귀찮았던 사람.gif (0) | 2022.02.08 |
---|