Rangkaian kontrol suhu ruangan dengan display LCD
// Koneksi modul LCD
sbit LCD_RS pada RB2_bit;sbit LCD_EN pada RB3_bit;
sbit LCD_D4 pada RB4_bit;
sbit LCD_D5 pada RB5_bit;
sbit LCD_D6 pada RB6_bit;
sbit LCD_D7 pada RB7_bit;
sbit LCD_RS_Direction pada TRISB2_bit;
sbit LCD_EN_Direction pada TRISB3_bit;
sbit LCD_D4_Direction pada TRISB4_bit;
sbit LCD_D5_Direction pada TRISB5_bit;
sbit LCD_D6_Direction pada TRISB6_bit;
sbit LCD_D7_Direction pada TRISB7_bit;
// Akhiri koneksi modul LCD
int t; // deklarasi variabel t
char a; // deklarasi variabel a
char lcd[] = "111 Degree"; // deklarasi array lcd dan diisi
void main()
{
ADCON0.ADCS0=0; // ADCS0, ADCS1 & ADCS2 bersama sama menentukan kecepatan clock
ADCON0.ADCS1=1; // jika 0 1 1 maka kecepatannya Fosc/64
ADCON1.ADCS2=1;
ADCON0.CHS0=0; // CHS0, CHS1 & CHS2 bersama-sama menentukan pin
ADCON0.CHS1=0; // jika 0 0 0 maka pin yang digunakan adalah RA0/AN0
ADCON0.CHS2=0;
ADCON0.ADON=1; // mengaktifkan konversi A/D
ADCON1.ADFM=1; // menyatakan 10 bit terdiri dari 8 bit ADRESL dan 2 bit ADRESH
ADCON1.PCFG0=0; // PCFG0, PCFG1, PCFG2 & PCFG3 bersama sama menetukan
ADCON1.PCFG1=0; // apakah pin digunakan sebagai input analog atau input digital
ADCON1.PCFG2=0; // jika 0000 maka semua pin sebagai input Analog
ADCON1.PCFG3=0;
Lcd_Init(); // inisialisasi LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // matikan kursor LCD
do
{
Lcd_Cmd(_LCD_CLEAR); // bersihkan layar LCD
Lcd_out(1,1, "Suhu:"); // cetak "Suhu" di layar LCD
t = ADC_Read(0); // mendapatkan nilai input analog
t = t * 0.4887; //menyesuaikan nilai derjat dengan input analog
a = t%10; // mendapatkan nilai satuan suhu
lcd[2] = a + '0'; // mengganti nilai satuan array
t = t/10;
a = t%10; // mendapatkan nilai puluhan suhu
lcd[1] = a + '0'; // mengganti nilai puluhan array
t = t/10;
a = t%10; // mendapatkan nilai ratusan suhu
lcd[0] = a + '0'; // mengganti nilai ratusan array
Lcd_out(2,1,lcd); // mencetak nilai suhu pada layar LCD
Delay_ms(100); // penundaan 100 ms
}while(1); // perulangan
}
Komentar
Posting Komentar