LCD1602 프로젝트는 한줄에 16개의 글자를 표시할 수 있는 두줄짜리 LCD 표시장치를 이용하여 프로그래머가 원하는 글자를 표시해보는 것이다. LCD 모듈에서 제공하는 기본적인 글자뿐 아니라 사용자가 직접 글자를 만들어 쓸수 있는 기능을 이용하여 약간의 그래픽 데이터를 표시해보는 기능도 직접 구현해 볼것이다. 실제 모습은 위의 그림과 같다. 자세히 보면 16개의 핀이 연결되는것을 알 수 있다. 각각의 핀에 대한 설명은 다음과 같다. LCD1602는 MCU와 8비트 데이터로 연결 할 수도 있고, 4비트 데이터로도 연결할 수 있다. 첫번째 프로젝트에서는 8비트 데이터 버스를 이용한 방법을 적용해 보고, 다음 프로젝트에서는 4비트 버스를 이용하여 원하는 데이터를 출력해 보도록 하겠다. AVR과 1602 L..
C언어가 처음 만들어진 때가 1970년대 초반이므로 지금으로부터 40년도 더 되었다. 그 당시에 사용되었던 많은 프로그래밍 언어들이 거의 사라졌고, 끊임 없이 새로운 프로그래밍 언어들이 생겨나고 있지만, C언어는 아직까지도 가장 많은 프로그래머가 사용하는 언어중 하나이다. 특히 임베디드 시스템 소프트웨어 개발에는 거의 절대적이라고 할 수 있을 정도로 C언어가 사용되고 있다. 이렇게 오랜 시간동안 다양한 분야에서 C언어가 사용되는 이유는 여러가지가 있겠지만 그 중에서도 가장 중요한 이유는 아마도 포인터 때문일 것이다. 어느정도 C로 프로그램을 구현해 본 경험이 있는 프로그래머라면 포인터가 무엇인지 이미 잘 알고 있을 것이다. 그러나 실제로 포인터를 효과적으로 적절히 사용하는 것은 생각처럼 쉽지 않다. 그 ..
임베디드 프로젝트를 진행하다 보면 가끔 난수(random number)를 발생 시킬 필요가 생긴다. 이를 위하여 C언어에서는 rand() 함수를 사용하여 난수를 발생 시킨다. rand() 함수를 부를때 마다 임의의 결과값을 받을 수 있는 것이다. 그러나 엄밀히 말해서 C에서 제공하는 rand()함수는 완전한 random값을 생성하지는 않는다. 이말이 무슨 뜻인지는 다음과 같은 코드를 작성하여 확인할 수 있다.#include #include #include "uart.h" int main(void) { int i, num; uart_init(); printf("\nRandom Number Generator. [%s %s]\n",__DATE__,__TIME__); for (i=0; i