BASIC4MCU | 질문게시판 | MEGA128 LCD CDS 질문
페이지 정보
작성자 master 작성일2019-12-24 10:38 조회2,969회 댓글0건본문
Q)
-LCD-----------------------
2011/01/01 요일
24:00:00 cds=0~10 (최대밝기 10)
----------------------------
LCD화면에 이렇게 나타내야 합니다.
디지털시계를 스위치를 이용해 수정가능해야합니다.
그리고 Cds셀을 이용하여 LED 밝기조절도 같이 회로도에 나타내야합니다.
회로도와 소스좀 부탁드리겠습니다.
너무 복잡해서 힘듬니다. 도와주십시요
//
A)
//==================================================================
// 코드비젼 컴파일러 사용
//==================================================================
#include
#include
#include
//==================================================================
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include
//==================================================================
//==================================================================
bit Key1Flg=0, Key2Flg=0;
char Year=11, Mon=1, Day=1, Hour=12, Min=0, Sec=0;char Adc_val=0;
//==================================================================
// Interrupt Service Routinue
//==================================================================
interrupt [TIM1_COMPA] void timer1_compa_isr(void){ //1sec 주기
Sec++;
if(Sec >59){ Sec=0; Min++; }
if(Min >59){ Min=0; Hour++; }
if(Hour>23){ Hour=0; Day++; }
if(Day >30){ Day=1; Mon++; }
if(Mon >12){ Mon=1; Year++; }
if(Mon >99){ Year=0; }
}
//==================================================================
// Main Routinue
//==================================================================
void main(void){
char buf[20];
DDRA=0xff;
TCCR1B=0x0C; OCR1A=62499; TIMSK=0x10; //16000000/256/(1+62499)=1Hz=1sec
lcd_init(16);#asm("sei")
while(1){lcd_clear();
lcd_gotoxy(0, 1);sprintf(buf,"20%2d/%2d/%2d", Year, Mon, Day);
lcd_puts(buf);
lcd_gotoxy(0, 1);
sprintf(buf,"%2d:%2d:%2d cds=%2d", Hour, Min, Sec, Adc_val);
lcd_puts(buf);
delay_ms(1000);
};
}
[출처] 코드비젼 CLCD 시계 (전자공작) |작성자 키트
//----------
// 코드비젼 //
//----------
#include
#include
//=====================================================
float ADC_F;
int ADC_I;
//=====================================================char pwm=0, led=0;
//=====================================================// 100us 주기 타이머1 A매치 인터럽트
interrupt [TIM1_COMPA] void timer1_compa_isr(void){
if(pwmPORTA=0xFF; // LED ON
else PORTA=0x00; // LED OFFif(++pwm>=100)pwm=0;
}
//=====================================================
void main(void){
DDRA=0xFF; //LED PWM 출력 포트
ADMUX=0; ADCSRA=0xE7; //프리런닝 ADC0
while(1){
delay_us(250); // 변환시간동안 딜레이
ADC_I=ADCW;
ADC_F=(float)ADC_I*100.0/1023.0;led=(char)ADC_F;
}
}//=====================================================
CDS 위의 직렬 저항은 CDS 데이터시트를 보고서 조정 하시기 바랍니다.
FSR 및 써미스터도 동일 하게 연결 합니다.
직렬로 연결된 10K저항 값은 센서의 저항 값에 맞춰서 조정 할 필요가 있으며
저항과 센서의 위치가 바뀌어도 됩니다.(ADC 입력 전압은 달라지겠죠)
ADC_F=(float)ADC_I* 5.0/1023.0; //ADC_F 결과를 0~5로 얻고 싶을 때 사용 합니다.
ADC_F=(float)ADC_I* 10.0/1023.0; //ADC_F 결과를 0~10으로 얻고 싶을 때 사용 합니다.
ADC_F=(float)ADC_I* 50.0/1023.0; //ADC_F 결과를 0~50으로 얻고 싶을 때 사용 합니다.
ADC_F=(float)ADC_I*100.0/1023.0; //ADC_F 결과를 0~100으로 얻고 싶을 때 사용 합니다.
(float)ADC_I // int 형인 ADC_I를 float으로 형변환(데이터 타입 변환) 해서 연산 합니다.
led=(char)ADC_F; // char 형의 변수에 float형을 넣기 위해서 float형을 char로 형변환 합니다.
[출처] CDS & 써미스터 & 가변저항 ADC 입력으로 LED PWM 밝기 제어 (전자공작) |작성자 키트
요일 추가 하게 되면 윤년 계산 까지 넣어야 하는 것인지도 모르겠고
각 월의 일수가 다른 부분도 적용 시켜 주세요
조금 복잡 해 지겠군요
위 두개의 소스를 공부 해서 만들어 보세요
댓글 0
조회수 2,969등록된 댓글이 없습니다.