센서 > LM35 LCD FND 코드비젼 & AVRstudio

TODAY148 TOTAL2,230,947
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 센서 | 온습도센서 | LM35 LCD FND 코드비젼 & AVRstudio

페이지 정보

작성자 키트 작성일2017-08-29 11:37 조회3,269회 댓글0건

본문

2093095301_Im9WjDln_25C125A625B825F1_25BE25F825C025BD.png3Ftype3Dw740

// 코드비젼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
//
#define LCD_DATA  PORTD
#define LCD_INST  PORTD
#define LCD_CTRL  PORTE
#define LCD_RS    0x01 //PE0
#define LCD_RW    0x02 //PE1
#define LCD_EN    0x04 //PE2
//
unsigned char fnd_table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int adc_value, temp=0, fnd_cnt=0;
float temp_f;
//
void LCD_data(char ch){ LCD_DATA=ch; LCD_CTRL=5; delay_us(1); LCD_CTRL=1; delay_us(50); }
void LCD_comm(char ch){ LCD_DATA=ch; LCD_CTRL=4; delay_us(1); LCD_CTRL=0; delay_ms(5); }
void LCD_CHAR(char c){ LCD_data(c); }
void LCD_STR(char *str){ while(*str)LCD_CHAR(*str++); }
void LCD_pos(char col, char row){ LCD_comm(0x80|(col+row*0x40)); }
void LCD_clear(void){ LCD_comm(1); }
//
void LCD_init(void){
    delay_ms(100);
    LCD_comm(0x38); LCD_comm(0x38); LCD_comm(0x38);
    LCD_comm(0x0E); LCD_comm(0x06); LCD_clear();
}
//
interrupt [TIM0_COMP] void timer0_comp_isr(void){ // 매치 인터럽트
    PORTA=0;
    switch(fnd_cnt){
        case 0: PORTC=fnd_table[temp/1000];         PORTA=1break;
        case 1: PORTC=fnd_table[(temp/100)%10];     PORTA=2break;
        case 2: PORTC=fnd_table[(temp/10)%10]|0x80; PORTA=4break;
        case 3: PORTC=fnd_table[temp%10];           PORTA=8break;
    }
    if(++fnd_cnt>3)fnd_cnt=0;
}
//
void main(void){
    char str[30]="LCD test..      ";
    DDRA=0x0F;  DDRB=1; DDRC=0xFF; DDRD=0xFF; DDRE=0x07;
    TCCR0=0x0C; OCR0=249;  TIMSK=2;  //16000000/  64/(1+249)= 1000Hz=1ms
    LCD_init();
    LCD_pos(0,1); LCD_STR(str);
    ADCSRA=0xE7;
    SREG=0x80;
    while(1){
        delay_ms(250);
        LCD_clear();
        adc_value=ADCW;
        temp_f= (float)adc_value * 1000.0 / 1023.0 ;
        temp=(int)temp_f;
        if(temp_f>400)PORTB=1else PORTB=0// 40도 이상이면 부저 ON
        LCD_pos(0,0); sprintf(str,"Temp Test Prog.");   LCD_STR(str);
        LCD_pos(0,1); sprintf(str,"TEMP = %4.2f C",temp_f/10.0); str[11]=0xdf; LCD_STR(str);
    }
}
cs

//-----------------------------------------------------------
//avrstudio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define F_CPU 16000000UL  // 16 MHz
#include <util/delay.h>
//
#define LCD_DATA  PORTD
#define LCD_INST  PORTD
#define LCD_CTRL  PORTE
#define LCD_RS    0x01 //PE0
#define LCD_RW    0x02 //PE1
#define LCD_EN    0x04 //PE2
//
volatile unsigned char fnd_table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
volatile unsigned int adc_value, temp=0, fnd_cnt=0;
float temp_f;
//
void LCD_data(char ch){ LCD_DATA=ch; LCD_CTRL=5; _delay_us(1); LCD_CTRL=1; _delay_us(50); }
void LCD_comm(char ch){ LCD_DATA=ch; LCD_CTRL=4; _delay_us(1); LCD_CTRL=0; _delay_ms(5); }
void LCD_CHAR(char c){ LCD_data(c); }
void LCD_STR(char *str){ while(*str)LCD_CHAR(*str++); }
void LCD_pos(char col, char row){ LCD_comm(0x80|(col+row*0x40)); }
void LCD_clear(void){ LCD_comm(1); }
//
void LCD_init(void){
    _delay_ms(100);
    LCD_comm(0x38); LCD_comm(0x38); LCD_comm(0x38);
    LCD_comm(0x0E); LCD_comm(0x06); LCD_clear();
}
//
ISR(TIMER0_COMP_vect){ // 매치 인터럽트
    PORTA=0;
    switch(fnd_cnt){
        case 0: PORTC=fnd_table[temp/1000];         PORTA=1break;
        case 1: PORTC=fnd_table[(temp/100)%10];     PORTA=2break;
        case 2: PORTC=fnd_table[(temp/10)%10]|0x80; PORTA=4break;
        case 3: PORTC=fnd_table[temp%10];           PORTA=8break;
    }
    if(++fnd_cnt>3)fnd_cnt=0;
}
//
int main(void){
    char str[30]="LCD test..      ";
    DDRA=0x0F;  DDRB=1; DDRC=0xFF; DDRD=0xFF; DDRE=0x07;
    TCCR0=0x0C; OCR0=249;  TIMSK=2;  //16000000/  64/(1+249)= 1000Hz=1ms
    LCD_init();
    LCD_pos(0,1); LCD_STR(str);
    ADCSRA=0xE7;
    SREG=0x80;
    while(1){
        _delay_ms(250);
        LCD_clear();
        adc_value=ADCW;
        temp_f= (float)adc_value * 1000.0 / 1023.0;
        temp=(int)temp_f;
        if(temp_f>400)PORTB=1else PORTB=0// 40도 이상이면 부저 ON
        LCD_pos(0,0); sprintf(str,"Temp Test Prog.");   LCD_STR(str);
        LCD_pos(0,1); sprintf(str,"TEMP = %4.2f C",temp_f/10.0); str[11]=0xdf; LCD_STR(str);
    }
}
cs

7세그먼트는 콤몬 캐소드용입니다.
 
 
 
 
 

 
 
//FND를 빼고 LCD 함수만 남긴 예제입니다.
// 코드비젼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
//
#define LCD_DATA  PORTD
#define LCD_INST  PORTD
#define LCD_CTRL  PORTE
#define LCD_RS    0x01 //PE0
#define LCD_RW    0x02 //PE1
#define LCD_EN    0x04 //PE2
//
unsigned int adc_value, temp=0;
//
void LCD_data(char ch){ LCD_DATA=ch; LCD_CTRL=5; delay_us(1); LCD_CTRL=1; delay_us(50); }
void LCD_comm(char ch){ LCD_DATA=ch; LCD_CTRL=4; delay_us(1); LCD_CTRL=0; delay_ms(5); }
void LCD_CHAR(char c){ LCD_data(c); }
void LCD_STR(char *str){ while(*str)LCD_CHAR(*str++); }
void LCD_pos(char col, char row){ LCD_comm(0x80|(col+row*0x40)); }
void LCD_clear(void){ LCD_comm(1); }
//
void LCD_init(void){
    delay_ms(100);
    LCD_comm(0x38); LCD_comm(0x38); LCD_comm(0x38);
    LCD_comm(0x0E); LCD_comm(0x06); LCD_clear();
}
//
void main(void){
    char str[20]="LCD test..      ";
    DDRB=1; DDRD=0xFF; DDRE=0x07;
    LCD_init();
    LCD_pos(0,1); LCD_STR(str);
    ADCSRA=0xE7;
    while(1){
        delay_ms(250);
        LCD_clear();
        adc_value=ADCW;
        temp=(int)( (float)adc_value * 1000.0 / 1023.0 );
        if(temp>400)PORTB=1else PORTB=0// 40도 이상이면 부저 ON
        LCD_pos(0,0); sprintf(str,"Temp Test Prog.");   LCD_STR(str);
        LCD_pos(0,1); sprintf(str,"Temp=%3d.%d",temp/10,temp%10); LCD_STR(str);
    }
}
cs
//----------------------------------------------

댓글 0

조회수 3,269

등록된 댓글이 없습니다.

센서HOME > 센서 > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기