티스토리 뷰

포인터를 이용하여 내부 데이터 메모리를 LCD 에 표시하기

변수는 데이터를 값으로 갖는 반면에, 포인터는 데이터가 들어 있는 메모리의 번지값을 갖는 변수 입니다. 포인터를 사용하면 쉽게 임의 번지의 내용을 참조(읽기 와 쓰기)할 수 잇습니다. 8051 의 특성상 포인터가 어느 메모리 영역을 가리키는지를 선언해 주어야 합니다. 즉 내부 데이터 메모리를 가리키는 포인터는 data 라는 예약어를 사용하고, 코드 메모리를 가리키는 포인터는 code 라는 예약어를 사용합니다. 다음 프로그램은 내부 데이터 메모리 30h 번지부터 34h 번지까지 임의의 데이터를 입력하고 각 번지와 데이터를 LCD 에 표시하는 프로그램입니다. #include #include "lcd.h" char asc[2]; void htoa(char hh) { char temp; temp=hh; temp &= 0xf0; temp >>= 4; if (temp >= 10) temp += 7; temp += '0'; asc[0] = temp; temp=hh; temp &= 0x0f; if (temp >= 10) temp += 7; temp += '0'; asc[1] = temp; lcd_putc(asc[0]); lcd_putc(asc[1]); } void main(void) { char i, data *r0; delay(10000); lcd_init(); r0 = 0x30; *r0++ = 0x01; *r0++ = 0x38; *r0++ = 0xb7; *r0++ = 0xe2; *r0 = 0xff; r0 = 0x30; for(i=0; i<5; i++) { lcd_putc(' '); htoa(r0++); } row2(); r0 = 0x30; for(i=0; i<5; i++) { lcd_putc(' '); htoa(*r0++); } while(1); } 위의 main() 함수에서 데이터 포인터 선언은 byte data *r0; 형식으로 선언합니다. 앞 강좌와 달리 htoa() 함수는 아스키 코드로 변환된 값을 출력하는 명령까지 실행하였습니다. 이 프로그램을 실행하면 LCD 의 첫줄에 30 31 32 33 34 번지가 출력되고, 둘째줄에 01 38 B7 E2 FF 각 번지에 있는 내용이 출력됩니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함