C++프로그래밍

2013.05.03_해밍코드_파일입출력함수_센서값받아서 LCD 출력하기

성엽이 2013. 5. 3. 17:54

<회로시간>




<C언어 시간 (fgets,fputs)>


#include <stdio.h>


int main()

{

char buff[11];

fgets(buff,sizeof(buff)-1,stdin);        //키보드로 buff에 숫자를 받음

fputs(buff,stdout);                        //buff에 있는 것을 모니터로 출력


if(buff[strlen(buff)-1]=='\n')         //엔터가 입력되면 buff의 엔터가 입력된 자리에 0이 들어감

{

buff[strlen(buff)-1]=0;

}

printf("[%s]\n",buff);

//엔터자리가 0으로 대체되고 printf는 0을 문자의 마지막으로 인식하고 0전까지만 출력 종료


return 0;

}



▶ 조도센서와 온도센서로 값을 측정하여 LCD에 표현하기


<그림1>

ADC_RUN() 함수로 측정값(uiNum)을 받을 것이다.

ADC_RUN 함수로 가보자.

=============================================================================

ADC.C > ADC_RUN


여기서 ADC_CDRx는 레지스터로 32bit 의 메모리를 가지고있고, 1~9까지 DATA를 가지고 있다.

0x3FF 는 <그림2>에서 DATA 부분만 원하는 값을 가지게끔하는 bit MASK 의 역할을 한다.

 

즉, return (((ADC_CDR4 & 0x3FF) << 16 ) | (ADC_CDR5 & 0x3FF)); 는 ADC_CDR4 의 10bit 만큼의 DATA를 16칸 비트연산을 하여 16bit~25bit 에 저장을하고 (OR) 또, ADC_CDR5 의 10bit 까지의 DATA를 0bit~9bit에 저장한다.

그리고 그 두개의 값을 반환값(uiNum)으로 돌려준다. 

이제 값을 반환 받았으니, LCD에 출력을 해야하므로 LCD_NUMBER() 함수로 가보자.

 

 

 

<그림2>

==============================================================================

LCD.C > LCD_NUMBER

<그림3>

 

<그림4>

<그림5>

 

LCD_cmd_write로 LCD에 명령을 입력해서, 첫번째 라인 첫째칸에 TEMP(온도센서)값을 출력하고,

두번째 라인 첫째칸에 LIGHT(광센서)값을 출력을 할것이다. 그래서 출력위치를 지정해주는 방법은

LCD 의 경우 출력되는 위치가 <그림4> 와 같이 주소로 연결되어있는데 , 이를 지정해주는 것이다. 먼저 DD RAM 을 활성화 시켜주기 위해

<그림5> 에서 D7 번1의 값을 넣어 SET 을 시켜준다. 그리고 <그림4>를 보면 첫번째 라인 첫째칸이 00 으로 지정,

∴ 0x 1000 0000 ,D7 번 만 켜진다. 마찬가지로 두번째라인 첫째칸은 40 이므로 0x1100(=4) 0000(=0), = 0xC(=1100)0 가 되는것이다.

 

이제 값을 넘겨서 아래 <그림1> 의 LCD_NUMBER 에 들어가고, 0x0000 FFFF 를 & 연산해주어 TEMP 의 값을 먼저 연산해서 출력하고,

LIGHT 의 값은 16bit ~ 25bit 에 있었으므로 16칸 쉬프트연산을 하고 난후에 출력을 해주었다.



<씨리얼 통신>