티스토리 툴바

블로그 이미지
~ 정윤식

카테고리

~ (488)
Tip (41)
Study (106)
자료 (34)
TCP/IP (9)
ATmega128 강의 (0)
AVR 강의 (0)
Project (0)
CAM (12)
Char LCD (4)
ADC 컨버터 (3)
어셈블리 (9)
Zigbee (12)
API (4)
Carrot (9)
ATmega (13)
ARM (3)
RFID (10)
초음파센서 (2)
AX-12 일기 (4)
관절로봇 (3)
FINAL (7)
FINAL KEEP (1)
C++ (8)
MFC (4)
Java (2)
문서 (0)
etc (8)
TFT LCD (0)
Program (3)
Image (1)
Delphi 자료 (5)
Delphi 레퍼런스 (131)
Delphi 컴포넌트 (0)
Delphi 알고리즘 (3)
Delphi Database (3)
K Base Program (0)
Jung (0)
Lee (0)
Web Site (1)
CAN (6)
Hardware (5)
SQL (3)
DB (7)
Component 관련 (8)
Error (3)
MS Outlook (0)
iTools (0)
VB (1)
Total61,332
Today14
Yesterday115

달력

« » 2012.05
    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 31    

공지사항

태그목록

=================================AT91SAM7S_EK.h(include)===================================

#ifndef AT91SAM7S_EK_H
#define AT91SAM7S_EK_H

// 시리얼 통신 속도
#define AT91B_DBGU_BAUD_RATE 115200

// 동작 주파수
#define AT91B_MAIN_OSC        18432000               // Main Oscillator MAINCK
#define AT91B_MCK             ((18432000*73/14)/2)   // Output PLL Clock (48 MHz)
#define AT91B_MASTER_CLOCK     AT91B_MCK

#endif /* AT91SAM7S-EK_H */

=================================Ldc.c===================================
#include "project.h"
#include "include/lcd.h"

#define FORCNT 10000

void LCD_Init()
{
 volatile unsigned int uiCount = 0;
 LCD_Instruction(0x38);// Function Set 0b001110-- :1(8비트):0(4비트), 1(2행):0(1행), 0(5X8도트):1(5X11도트)
 LCD_Instruction(0x06);// Entry Mode  0b00000110 :1(오른쪽증가):0(왼쪽으로증가), 0(화면시프트X):1(화면시프트)
 LCD_Instruction(0x1C);// Cursor/Shift 0b000111-- :1(화면):0(커서), 1(오른쪽):0(왼쪽)
 LCD_Instruction(0x0C);// Display ON/OFF 0b00001100 :1(DD RAM내용 표시 ON):0(DD RAM내용 표시 OFF), 0(커서OFF):1(커서ON)
            //  0(커서깜빡임OFF):1(커서깜빡임ON)
 LCD_Instruction(0x01);// Clear    0b00000001 :
 for(uiCount=0;FORCNT >= uiCount; ++uiCount);// 지연 : 50ms
}

void LCD_Instruction(unsigned char ucInstruction)
{
 volatile unsigned int uiCount = 0;
 LCD_CONTROL->PIO_CODR = LCD_ENABLE;  // E  - L:LCD 비활성화
 LCD_CONTROL->PIO_CODR = REGISTER_RS;  // RS - L:명령
 LCD_CONTROL->PIO_CODR = REGISTER_RD;  // RW - L:ARM->LCD
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:40ms, 최대:무제한
 LCD_CONTROL->PIO_SODR = LCD_ENABLE;  // E  - L:LCD 활성화
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:150ms, 최대:무제한
 LCD_CONTROL->PIO_CODR = PA_8BIT;
 LCD_CONTROL->PIO_SODR = ucInstruction;  //
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:80ms, 최대:무제한
 LCD_CONTROL->PIO_CODR = LCD_ENABLE;  // E  - L:LCD 비활성화
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:10ms, 최대:무제한
}

void LCD_Data(unsigned char ucData)
{
 volatile unsigned int uiCount = 0;
 LCD_CONTROL->PIO_CODR = LCD_ENABLE;  // E  - L:LCD 비활성화
 LCD_CONTROL->PIO_SODR = REGISTER_RS;  // RS - H:데이터
 LCD_CONTROL->PIO_CODR = REGISTER_RD;  // RW - L:ARM->LCD
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:40ms, 최대:무제한
 LCD_CONTROL->PIO_SODR = LCD_ENABLE;  // E  - L:LCD 활성화
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:150ms, 최대:무제한
 LCD_CONTROL->PIO_CODR = PA_8BIT;
 LCD_CONTROL->PIO_SODR = ucData;    //
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:80ms, 최대:무제한
 LCD_CONTROL->PIO_CODR = LCD_ENABLE;  // E  - L:LCD 비활성화
 for(uiCount=0;FORCNT >= uiCount; ++uiCount); // 지연 - 최소:10ms, 최대:무제한
}

void lprint(const char *ucData)
{
 while(0 != *ucData)
  LCD_Data(*ucData++);
}

void Configure_PAIO(void)
{
 // Configure the pin in output
 LCD_CONTROL->PIO_OER = LCD_CONFIGURE_PIN;
 
 // Set the PIO controller in PIO mode instead of peripheral mode
 LCD_CONTROL->PIO_PER = LCD_CONFIGURE_PIN;

 // Disable pull-up
 LCD_CONTROL->PIO_PPUDR = LCD_CONFIGURE_PIN;

 // Default Data Line Setting : LOW
 LCD_CONTROL->PIO_CODR = LCD_CONFIGURE_PIN;
}

void Configure_LCD(void)
{
 Configure_PAIO();
 LCD_Init();
}

=================================main.c===================================
#include "project.h"
#include "static.c"
#include "include/lcd.h"

int main()
{
 Configure_LCD();
 lprint("WiseCat");
 while (1);
}

=================================Lcd.h(include)===================================
#ifndef _LCD_H
#define _LCD_H

// 기본 주소 설정
#define LCD_CONTROL  AT91C_BASE_PIOA

// 핀 용도 설정
#define PA_8BIT  (AT91C_PIO_PA0\
     |AT91C_PIO_PA1\
     |AT91C_PIO_PA2\
     |AT91C_PIO_PA3\
     |AT91C_PIO_PA4\
     |AT91C_PIO_PA5\
     |AT91C_PIO_PA6\
     |AT91C_PIO_PA7\
     ) // 데이터 핀 ㄴ관련 설정 : PA0 ~ PA7
#define REGISTER_RS AT91C_PIO_PA8 // LCD 레지스터 선택 : H:데이터 입력, L:인스트럭션 입력
#define REGISTER_RD AT91C_PIO_PA11 // Data Read/Write 샌택 : H:데이터 리드(LCD->ARM), L:데이터 라이트(ARM->LCD)
#define LCD_ENABLE AT91C_PIO_PA12 // LCD 동작 설정 : H:LCD ON, L:LCD OFF
#define LCD_CONFIGURE_PIN (PA_8BIT\
       |REGISTER_RS\
       |REGISTER_RD\
       |LCD_ENABLE\
       )  // LCD 관련 PIN, PAIO 관련 핀들 설정을 할 경우 여기에 추가할 것

enum LCD_SET
{
 RS_DATA = 1,
 RS_INST = 0,
 RD_READ = 1,
 RD_WRITE = 0,
 LCD_ON  = 1,
 LCD_OFF = 0
};


void Configure_PAIO(void);
void Configure_LCD(void);
void LCD_Instruction(unsigned char);
void LCD_Data(unsigned char);
void lprint(const char *ucData);

#endif  // _LCD_H

=================================Project.h(include)===================================
#ifndef _PROJECT_H
#define _PROJECT_H

/// Include your AT91 Library files and specific compiler definitions
#include "AT91SAM7S-EK.h"
#include "AT91SAM7S256.h"

#endif  // _PROJECT_H

=================================Static.c===================================
#ifndef _STATIC_C
#define _STATIC_C

void pabt_handler(void)
{
}

void dabt_handler(void)
{
}
#endif  // _STATIC_C

Posted by ~ 정윤식

최근에 달린 댓글

최근에 받은 트랙백

글 보관함