<회로시간>
<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칸 쉬프트연산을 하고 난후에 출력을 해주었다.
<씨리얼 통신>
'C++프로그래밍' 카테고리의 다른 글
2013.05.07_구조체입출력(2) (0) | 2013.05.07 |
---|---|
2013.05.06_구조체입출력(1) (0) | 2013.05.06 |
2013.05.02_파일입출력 (0) | 2013.05.02 |
2013.04.30_연결리스트 원하는 항목 삭제 (0) | 2013.05.02 |
2013.04.26_정렬된 연결리스트의 삽입과삭제 (0) | 2013.04.26 |