본문 바로가기
코스웨어/15년 스마트컨트롤러

20150320-2번-강동조-발진회로&LCD문자표현

by 알 수 없는 사용자 2015. 3. 20.
728x90
반응형

 

Hard ware 이승규 강사님


발진회로란?
외부로부터 가해진 신호에 의하지 않고 전원으로부터의 전력으로 지속되는 전기 진동(교류 전압 또는 전류)을 발생시키는 회로

발진회로 원리
① 전원을 넣으면 공진회로에 공진 주파수의 진동이 발생한다.
② 이 일부가 입력측에 귀환한다(증폭기 입력이 된다).
③ 이 입력이 증폭되어 출력측에 나타난다.
④ 출력의 일부가 또 입력측에 귀환한다.
⑤ 이 같은 작용을 반복해 지속적인 일정주파수의 출력을 얻을 수 있다.
발진회로를 이용해 교류신호를 발생시키는 것


 


 

 




Soft ware 주수홍강사님

LCD.C

#include "LCD.h"

void LCD_AVR_PIN_INIT(void) {
     // DataBus 모두를 사용하기 위하여 0XFF로 값을 준다.
     LCD_BUS_DDR = 0XFF;

     // HeaderFile에서 RS 0, RW 1, EN 2의 값을 넣었다.
     // 그 값을 기본으로 하여 (0000 << 1) | (0001 << 1) | (0010 << 1)설정하여 값을 지정한다.
     // LCD_CTL_DDR 0x07의 설정과 같다.

     LCD_CTL_DDR = (1 << LCD_PIN_RS) | (1 << LCD_PIN_RW) | (1 << LCD_PIN_EN);

     return;
}

static void LCD_Instr(unsigned char ucinst) {

     volatile unsigned int uiCnt;
    
     LCD_BUS = ucinst;

     // RS를 Low으로 설정하면 Instruction Reg으로 전송 High로 설정하면 Data Reg로 전송이 된다.
     // RW를 Low로 지정하면 Write High로 설정하면 Read로 설정이 된다.
     // Enable을 Low로 설정하면 데이터 전송 X, High로 설정하면 데이터 전송 O => 현재는 데이터 전송 비활성화

     LCD_CTL = (0 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (0 << LCD_PIN_EN);
              
     // 설정의 적용이 바로 이루어지지 않기 설정이 적용되기까지의 시간 40ns로 지연시킨다.         
     DELAY(DNUM1)
    
     // Enable을 High로 설정하여야지 AVR -> LCD로 데이터의 전송이 이루어진다.
     LCD_CTL = (0 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (1 << LCD_PIN_EN);

     // Tw(230) - Tsu2(80) = 150 E가 활성화 된 후 BUS를 통하여 데이터가 전송되는 시간이다.
     DELAY(DNUM2);
    

     LCD_CTL = (0 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (0 << LCD_PIN_EN);
              
     // 설정의 적용이 바로 이루어지지 않기 설정이 적용되기까지의 시간 40ns로 지연시킨다.         
     DELAY(DNUM3);

     return;
}

void LCD_Data(unsigned char ucinst) {

     volatile unsigned int uiCnt;
    
     LCD_BUS = ucinst;

     LCD_CTL = (1 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (0 << LCD_PIN_EN);      
     // 설정의 적용이 바로 이루어지지 않기 설정이 적용되기까지의 시간 40ns로 지연시킨다.         
     DELAY(DNUM1);
    
     // Enable을 High로 설정하여야지 AVR -> LCD로 데이터의 전송이 이루어진다.
     LCD_CTL = (1 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (1 << LCD_PIN_EN);

     // Tw(230) - Tsu2(80) = 150 E가 활성화 된 후 BUS를 통하여 데이터가 전송되는 시간이다.
     DELAY(DNUM2);


     LCD_CTL = (0 << LCD_PIN_RS) | (0 << LCD_PIN_RW) | (0 << LCD_PIN_EN);
              
     // 설정의 적용이 바로 이루어지지 않기 설정이 적용되기까지의 시간 40ns로 지연시킨다.         
     DELAY(DNUM3);

     return;
}

// 문자 하나가 아닌 문자열을 출력하기위하여 함수 선언
void LCD_PRINT(const unsigned char * cstring) {
    
     // 문자열의 끝이 NULL 일때까지 반복
     while(*cstring != 0) {
          // 문자열의 첫 번째 주소의 값부터 출력
          LCD_Data(*cstring);
          // 문자열의 주소를 증가
          ++cstring;
     }
     return;
}

// LCD의 지정사용을 위하여 외부 접근을 금지시킨다.
void LCD_INIT(void) {
     volatile unsigned int uiCnt;

     LCD_AVR_PIN_INIT();

     DELAY(65000);

     LCD_Instr(LCD_INST_FUNC);
     LCD_Instr(LCD_INST_DSP);
     LCD_Instr(LCD_INST_ENT);
     LCD_Instr(LCD_INST_CUR);
     LCD_Instr(LCD_INST_CLR);
     LCD_Instr(LCD_INST_HOME);

     return;
}


LCD.H
// 조건부 define
#ifndef __LCD_H__
#define __LCD_H__

#include"smart.h"

// PORT 입력 설정
#define LCD_BUS          PORTC
#define LCD_BUS_DDR     DDRC
#define LCD_CTL          PORTG
#define LCD_CTL_DDR     DDRG

// PIN 설정
#define     LCD_PIN_RS 0
#define     LCD_PIN_RW 1
#define     LCD_PIN_EN 2

// LCD 화면 설정
#define LCD_INST_CLR     0X01     // LCD Clear 설정
#define LCD_INST_HOME  0X02     // LCD 포인터를 가장 처음으로 이동
#define LCD_INST_ENT     0X06     // Shfit ON, INCRIGE MODE     =>     I/D = 1, S = 0
#define LCD_INST_DSP     0X0F     // Display의 ON / OFF를 지정, 커서 표시, 커서의 깜박임 표시
#define LCD_INST_CUR     0X14
#define LCD_INST_FUNC     0X38     /* D/L : Interface Data의 길이를 8Bit/4Bit 설정, N : 2Line / 1Line 설   정, Font의 Type을 지정 5x10 / 5x8 */

#define DELAY(X) for(uiCnt = 0; uiCnt<(X); ++uiCnt)     // 지연시간

#define DNUM1     3000
#define DNUM2     3000
#define DNUM3     3000

void LCD_INIT(void);                    // 함수의 정의
void LCD_AVR_PIN_INIT(void);     // 함수의 정의

static void LCD_Instr(unsigned char ucinst);
void LCD_Data(unsigned char ucinst);
void LCD_PRINT(const unsigned char * cstring);

#endif //__LCD_H__

MAIN.C
#include "LCD.h"


int main(void) {
     LCD_INIT();

     LCD_PRINT("ABCDEFGHIGK");

     /* 펌웨어에서는 프로그램이 끝이 났다고 해서 하드웨어를 종료하면 안되기 때문에 종료를 방지하기 위하여 무한반복을 걸어버린다. */
     while(1);
    
     return 0;
}

SMART.H
// 조건부 define
#ifndef __SMART_H__
#define __SMART_H__

// PORTC를 제어하는 DDRC 포트의 주소값 설정
#define     DDRC     (*(volatile unsigned char *)0x34)
// PORTC라는 매크로 변수로 해당 포트 주소값 설정
#define     PORTC     (*(volatile unsigned char *)0x35)

// PORTG를 제어하는 DDRG 포트의 주소값 설정
#define     DDRG     (*(volatile  unsigned char *)0x64)
// PORTG라는 매크로 변수로 해당 포트 주소값 설정
#define     PORTG     (*(volatile unsigned char *)0x65)

#endif //__SMART_H__



 
다른사람의 소스와 자기소스 비교하거나 바꾸고 싶읖때 쓰는 프로그램입니다













728x90