Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * lcd+lm35.c
- *
- * Created: 2016-06-10 00:04:53
- * Author : Pat
- */
- #define F_CPU 1000000L
- #include <avr/delay.h>
- #include <avr/io.h>
- #include <string.h>
- #include <avr/interrupt.h>
- /****************************************************************************************************
- Podłączenie pinów
- LCD
- vss GND
- vdd Vcc
- v0 potencjometr
- rs PC5
- rw PC6
- e PC7
- D0...D7 PB0...PB7
- A Vcc
- K GND
- LM35
- Vo PA5
- *****************************************************************************************************/
- /*LCD function declarations */
- void LCD_send_command(unsigned char cmnd);
- void LCD_send_data(unsigned char data);
- void LCD_init();
- void LCD_goto(unsigned char y, unsigned char x);
- void LCD_print(char *string);
- #define LCD_DATA_PORT PORTB
- #define LCD_DATA_DDR DDRB
- #define LCD_DATA_PIN PINB
- #define LCD_CNTRL_PORT PORTC
- #define LCD_CNTRL_DDR DDRC
- #define LCD_CNTRL_PIN PINC
- #define LCD_RS_PIN 5
- #define LCD_RW_PIN 6
- #define LCD_ENABLE_PIN 7
- #define SET_HOUR 3
- #define SET_MINUTE 4
- //volatile zmienna=ADMUX;
- volatile float pomiar;
- volatile float pomiar_lm;
- volatile int licznik=0;
- volatile char str1[8];
- volatile char str_lm[8];
- int main(void)
- {
- init_ADC();
- LCD_init();
- LCD_goto(2,1);
- LCD_print("Zimny ");
- LCD_goto(1,1);
- LCD_print("Cieply:");
- sei();
- LCD_CNTRL_PORT = (1<<SET_HOUR | 1<<SET_MINUTE);
- while (1)
- {
- pomiar*=0.0049;
- pomiar=pomiar-2.3 ; // volty na stopnie(-Vw0)
- pomiar/=0.0100; //0.01V/1 C
- dtostrf(pomiar, 8, 1, str1);
- pomiar_lm*=0.0049;
- pomiar_lm*=100;
- dtostrf(pomiar_lm, 8, 1, str_lm);
- LCD_goto(1,7);
- LCD_print(str1);
- LCD_goto(1,15);
- LCD_print("*C");
- LCD_goto(2,7);
- LCD_print(str_lm);
- LCD_goto(2,15);
- LCD_print("*C");
- _delay_ms(500);
- }
- }
- ISR(ADC_vect)
- {
- if (licznik==0) //termo
- {
- ADMUX |= (1 << MUX0); // wybor wejscia dla przetwornika (ADC5-PA5)
- ADMUX |= (1 << MUX2);
- ADMUX &=~(1<<MUX1);
- pomiar = ADC;
- licznik=1;
- }
- else //lm35
- {
- ADMUX |= (1 << MUX0); // wybor wejscia dla przetwornika (ADC5-PA5)
- ADMUX |= (1 << MUX2);
- ADMUX |= (1<<MUX1);
- pomiar_lm=ADC;
- licznik=0;
- }
- }
- void init_ADC (void)
- {
- ADMUX |= (1 << REFS0); // ustaw wewnetrzne napiecie odniesienia na AVCC
- ADCSRA |= (1 << ADPS2); // wybór czestotliwosci pracy przetwornika preskaler=128
- ADCSRA |= (1 << ADPS1);
- ADCSRA |= (1 << ADPS0);
- ADCSRA |= (1<<ADATE);
- ADCSRA |= (1<<ADIE); //uruchomienie zgłaszania przerwań
- DDRA &= ~(1<<PA5); //PA5 jak wejście
- //
- DDRA &= ~(1<<PA7); //PA7 jak wejście
- //
- ADCSRA |= (1 <<ADEN);
- ADCSRA |= (1 <<ADSC); // zezwolenie na prace ADC
- }
- void LCD_send_command(unsigned char cmnd)
- {
- LCD_DATA_PORT = cmnd;
- LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
- LCD_CNTRL_PORT &= ~(1<<LCD_RS_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
- _delay_us(2);
- LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
- _delay_us(100);
- }
- void LCD_send_data(unsigned char data)
- {
- LCD_DATA_PORT = data;
- LCD_CNTRL_PORT &= ~(1<<LCD_RW_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_RS_PIN);
- LCD_CNTRL_PORT |= (1<<LCD_ENABLE_PIN);
- _delay_us(2);
- LCD_CNTRL_PORT &= ~(1<<LCD_ENABLE_PIN);
- _delay_us(100);
- }
- void LCD_init()
- {
- LCD_CNTRL_DDR = 0xFF;
- LCD_CNTRL_PORT = 0x00;
- LCD_DATA_DDR = 0xFF;
- LCD_DATA_PORT = 0x00;
- _delay_ms(10);
- LCD_send_command(0x38);
- LCD_send_command(0x0C);
- LCD_send_command(0x01);
- _delay_ms(10);
- LCD_send_command(0x06);
- }
- void LCD_goto(unsigned char y, unsigned char x)
- {
- unsigned char firstAddress[] = {0x80,0xC0,0x94,0xD4};
- LCD_send_command(firstAddress[y-1] + x-1);
- _delay_ms(10);
- }
- void LCD_print(char *string)
- {
- unsigned char i=0;
- while(string[i]!=0)
- {
- LCD_send_data(string[i]);
- i++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement