본문 바로가기

컴퓨터/Cortex-M3(STM32F103)

[STM3210B]TEXT LCD Module MLCD-100 기본 구동 프로그램


/************************************************
제목 :TEXT LCD 구동
보드 : STM3210B
LCD : Dr.Kim TEXT LCD Module MLCD-100
최초작성일 : 2011.06.28
작성자 : 부산직업능력개발원 정보기술 ***

핀연결
1(DB5) : PA5
2(DB4) : PA4
3(DB6) : PA6
4(DB3) : PA3
5(DB7) : PA7
6(DB2) : PA2
8(DB1) : PA1
9(E)   : PB0
10(DB0) : PA0
11(RS)  : PE7
19(VCC) : 5V
20(GND) : GND
*************************************************/
#include "stm32f10x.h"
#include <string.h>

#define LCD_E GPIO_Pin_0 //b
#define LCD_RS GPIO_Pin_7  //e

void lcdw(void);
void lcdc(unsigned char data);
void lcdd(unsigned char data);
void lcdcc(void);
void lcds(void);
void delay(u32 d1, u32 d2);

int main(void){
  char mytext[]="why?! hooooo.";
  char mytext2[]="Hahaha*&^^";
  GPIO_InitTypeDef GPIO;
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
 
  GPIO.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO.GPIO_Speed=GPIO_Speed_2MHz;
  GPIO.GPIO_Pin=0xff;
  GPIO_Init(GPIOA, &GPIO);
 
  GPIO.GPIO_Pin=GPIO_Pin_0;
  GPIO_Init(GPIOB, &GPIO);
 
  GPIO.GPIO_Pin=GPIO_Pin_7;
  GPIO_Init(GPIOE, &GPIO);
 
  delay(1000,1000);
 
  lcdw();
  for(u8 a=0; a<strlen(mytext); a++) lcdd(mytext[a]);
  lcdc(0x80 | 0x40); //set ddram address
  for(u8 a=0; a<strlen(mytext2); a++) lcdd(mytext2[a]);
  lcdd(0xa6);
  while(1){
  
  }
}

void lcdw(void){
  lcdc(0x38);
  lcdc(0x02);
  lcdc(0x01);
  lcdc(0x06);
  lcdc(0x0f);
}

void lcdc(unsigned char data){
  GPIOA->ODR &= ~0xff;
  GPIOA->ODR |= data;
  GPIOE->ODR &= ~(LCD_RS);
  GPIOB->ODR |= (LCD_E);
  lcds();
  GPIOB->ODR &= ~(LCD_E);
  GPIOE->ODR &= ~(LCD_RS);
  lcdcc();
}

void lcdd(unsigned char data){
  GPIOA->ODR &= ~0xff;
  GPIOA->ODR |= data;
  GPIOE->ODR |= (LCD_RS);
  GPIOB->ODR |= (LCD_E);
  lcds();
  GPIOB->ODR &= ~(LCD_E);
  GPIOE->ODR &= ~(LCD_RS);
  lcds();
}

void lcdcc(void){
  delay(1000,100);
}
void lcds(void){
  delay(1000,10);
}
void delay(u32 d1, u32 d2){
  vu32 i,j;
  for(i=0;i<d1;i++) {
   for(j=0;j<d2;j++);
  }
}