Char LCD - 호정햄 문자열출력
=================================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

호정햄문자열.zip