BASIC4MCU | 질문게시판 | LCD글씨가 깨져서 나옵니다
페이지 정보
작성자 아아어야우유 작성일2018-06-19 15:22 조회8,159회 댓글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 0xC0void 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);
}
}
}
}
댓글 0
조회수 8,159등록된 댓글이 없습니다.