BASIC4MCU | 질문게시판 | LCD다시 부탁드립니다
페이지 정보
작성자 아아어야우유 작성일2018-06-19 17:42 조회6,706회 댓글2건본문
설명드립니다
7개의 마이크로 스위치와 cds모듈이 약통에 붙여있는데
각요일별 스위치가 oN이될때 요일별 cds가 약이 있는지 없는지 판별해서
LCD에 표시가 됩니다 라인1에는 월 화 수 목....
라인2에는 약이 있으면 medicine O
없으면 medicine x라고 뜨게 하려고 하는데 사진처럼 배열이 잘못됬는지 글자가 깨지는 현상이 나타나네요
#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)
{
if((PIND & 0x01) == 0x01) // 스위치1번 ON일때
{
sprintf(buffer,"mon"); // 월
Fn_CLCD_data(LINE1,buffer);
vadc = Fn_ADC_read(0); // cds모듈
if(vadc > vmax) vmax = vadc;
if(vadc < vmin) vmin = vadc;
vdiv = (vmax - vmin) / 2; // 구간을 2개로 나눔
if (vadc > vmax - vdiv && vadc <= vmax) // 어두우면 약이 있는걸로 표시
{
sprintf(buffer,"medicine O");
}
else if (vadc >= vmin + vdiv && vadc < vmin +vdiv) // 밝으면 약이 없는걸로 표시
{
sprintf(buffer, "medicine X");
}
Fn_CLCD_data(LINE2,buffer);
_delay_ms(500);
}
댓글 2
조회수 6,706master님의 댓글
master 작성일
전체소스 첨부하세요
괄호가 맞지 않습니다.
//
올린 소스에는 LCD 증상을 일으킬만한 소스가 없습니다.
master님의 댓글
master 작성일
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo13&wr_id=149
LCD 함수는 이 예제 참고하세요