질문게시판 > LCD글씨가 깨져서 나옵니다

TODAY375 TOTAL182,575
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU | 질문게시판 | LCD글씨가 깨져서 나옵니다

페이지 정보

작성자 아아어야우유 작성일2018-06-19 15:22 조회100회 댓글0건

본문

	

아트메가 128a를 사용중입니다

LCD를 사용했을때 글자가 깨지는데 buffer값을 몇으로 해줘야 글자가 안꺠질까요ㅠㅠ

#define  F_CPU   16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>

#define RS_HIGH PORTC |=0x01
#define RS_LOW PORTC &=~(0x01)
#define EN_HIGH PORTC |=0x02
#define EN_LOW PORTC &=~(0x02)
#define FUNCTION 0x38
#define CLEAR 0x01
#define DISPLAY 0x0C
#define LINE1 0x80
#define LINE2 0xC0

void Init_io(void)
{
 {
  DDRA = 0xFF; // LCD사용
  PORTA = 0xFF;
  DDRC = 0x03;
  PORTC = 0x03; // LCD 사용(RS,EN)
  DDRD = 0xFF; // 마이크로 스위치
          
 }
}

void Init_adc(void) // ADC설정함수
{
 ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADFR);
 ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}

int Fn_ADC_read(char ch) //ADC값 읽는 함수
{
 ADMUX = ch;
 _delay_us(300);
 return ADCW;
}

void Fn_CLCD_ctrl(unsigned char data)
{
 RS_LOW;
 EN_LOW;
 PORTA = data;
 EN_HIGH;
 _delay_us(50);
 EN_LOW;
}
void Fn_CLCD_data(unsigned char line, char *str)
{
 Fn_CLCD_ctrl(line);
 RS_HIGH;
 EN_LOW;
 while(*str)
 {
  PORTA = *str++;
  EN_HIGH;
  _delay_us(50);
  EN_LOW;
 }
}


int main(void)
{
 Init_io();
 Init_adc();
 Fn_CLCD_ctrl(FUNCTION);
 Fn_CLCD_ctrl(DISPLAY);
 Fn_CLCD_ctrl(CLEAR);
 _delay_ms(2);
 
 int vadc, vmin, vmax, vdiv;
 vmin = 1023, vmax = 0;

 char buffer[20];
 
 while (1)
 {
  {
{
  vadc = Fn_ADC_read(0);
  vadc = Fn_ADC_read(1);
  vadc = Fn_ADC_read(2);
  vadc = Fn_ADC_read(3);
  vadc = Fn_ADC_read(4);
  vadc = Fn_ADC_read(5);
  vadc = Fn_ADC_read(6);
  vadc = Fn_ADC_read(7);
  if(vadc > vmax) vmax = vadc;
  if(vadc < vmin) vmin = vadc;
  vdiv = (vmax - vmin) / 3; // 구간을 3개로 나눔
  
  if (vadc > vmax - vdiv && vadc <= vmax)
  {
   sprintf(buffer,"medicine (O)");
  }
  
  else if (vadc >= vmin && vadc < vmin +vdiv)
  {
   sprintf(buffer, "medicine (q)");
  }
  
  else if (vadc >= vmin + vdiv && vadc < vmin +vdiv)
  {
   sprintf(buffer, "medicine (X)");
  }
  Fn_CLCD_data(LINE2,buffer);
  _delay_ms(500);
 } 
 }
 
{
 if((PIND & 0x01) == 0x01)
 {
 sprintf(buffer,"mon"); // 월
 Fn_CLCD_data(LINE1,buffer);
 }

 

 else if((PIND & 0x02) == 0x02)
 {
  sprintf(buffer,"tue"); // 화
  Fn_CLCD_data(LINE1,buffer);  
  
 }
 
 
 else if((PIND & 0x04) == 0x04)
 {
  sprintf(buffer,"wen"); // 수
  Fn_CLCD_data(LINE1,buffer);
  
     }
 
  else if((PIND & 0x08) == 0x08)
  {
   sprintf(buffer,"Thurs"); // 목
   Fn_CLCD_data(LINE1,buffer);
  
    
  }
 
  else if((PIND & 0x10) == 0x10)
  {
   sprintf(buffer,"Fri"); // 금
   Fn_CLCD_data(LINE1,buffer);
  
  }
 
  else if((PIND & 0x20) == 0x20)
  {
   sprintf(buffer,"Satur"); // 토
   Fn_CLCD_data(LINE1,buffer);
  
  }
  else if((PIND & 0x40) == 0x40)
  {
   sprintf(buffer,"Sun"); // 일
   Fn_CLCD_data(LINE1,buffer);
  
  }
 
  else
  {
   sprintf(buffer,"       "); // 처음시작상태 표시x
   Fn_CLCD_data(LINE1,buffer);
   sprintf(buffer, "medicine (X)");
   Fn_CLCD_data(LINE2,buffer);
  }
 
 }
  }
 }

 

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 0

조회수 100

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017