MSP430 LaunhPad Hesap Makinesi(4 işlem) Uygulaması


Program Açıklaması : 

hesapMakinesi_bb4×4 matris klavye,  I2C LCD ve MSP430 LaunchPad ile hesap makinesi uygulaması, matris klavyeden girilen değer le I2C protokolünde bağlanan LCD üzerinde toplama / çıkarma / çarpma / bölme işlemleri yapmak mümkün olmaktadır.

MSP430 LaunchPad programı, Energia ile yazılmış ve derlenmiştir…

Programın çalışması için : Keypad.hLiquidCrystal_I2C.h ve I2C_SoftwareLibrary.h kütüphane başlık dosyaları internetten yüklenmelidir.

Gerekli Donanım :

  • MSP 430 LaunchPad
  • 4×4 matrisKlavye
  • I2C bağlantılı LCD Modülü

Devre Bağlantısı :hesapMakinesi_bb

Ek : MSP430 LaunchPad üzerinden +5V gerilim elde etme :
msp430LaunchPad5Vmsp430LaunchPad5V2

Program Kodu :

/*******************************************************************************
 * @dosya HesapMakinesiUygulamasiV0_1.ino
 * @yazar MSP430 Komisyon
 * @sürüm V0.0.1
 * @tarih 06-Haziran-2016
 * @özet 4x4 matris klavye, I2C LCD ile MSP430 hesap makinesi, matris
 * klavyeden girilen değer le I2C protokolünde bağlanan LCD üzerinde
 * toplama/çıkarma/çarpma/bölme işlemleri yapmak mümkün olmaktadır.
 ******************************************************************************
 *
 * Bu program özgür yazılımdır: Özgür Yazılım Vakfı tarafından yayımlanan GNU 
 * Genel Kamu Lisansı’nın sürüm 3 ya da (isteğinize bağlı olarak) daha sonraki
 * sürümlerinin hükümleri altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
 *
 ******************************************************************************
 */
 
/* Eklentiler ------------------------------------------------------------------*/
#include <Keypad.h> // Keypad kütüphane başlık dosyasının eklenmesi 
#include <Wire.h> // I2C kütüphane başlık dosyasının eklenmesi
#include "LiquidCrystal_I2C.h" // I2C iletişimli LCD kütüphane başlık dosyasının eklenmesi
#include "I2C_SoftwareLibrary.h"// Yazılımsal I2C kütüphane başlık dosyasının eklenmesi
 
/* Değişken Tanımlamaları-------------------------------------------------------*/
long birinciSayi = 0; //birinciSayi değişkeninin tanımlanması(long)
long ikinciSayi = 0; //ikinciSayi değişkeninin tanımlanması(long)
double toplam = 0; //toplam değişkeninin tanımlanması(double)
 
char basilanAnahtar; //basılanAnahtar değişkeninin tanımlanması(char)
const byte ROWS = 4; //matrisKlavye üzerindeki sabit satir değişkeni(byte)
const byte COLS = 4; //matrisKlavye üzerindeki sabit sutun değişkeni(byte)
 
 
const byte satirSayisi= 4; //matrisKlavye üzerindeki satir sayisi(byte)
const byte sutunSayisi= 4; //matrisKlavye üzerindeki sutun sayisi(byte)
 
//klavyeMatrisi matrisKlavye üzerinde satir ve sutun yapisini tanimlar(char)
char klavyeMatrisi[satirSayisi][sutunSayisi]={
 {
 '1','2','3','+' }
 ,
 {
 '4','5','6','-' }
 ,
 {
 '7','8','9','*' }
 ,
 {
 'C','0','=','/' }
};
 
//matrisKlavye MSP430 Bağlantı pinlerinin tanimlanmasi
byte satirPinleri[satirSayisi] = {
 P2_0,P1_5,P1_4,P1_3}; //Satırlar 0 dan 3 e
byte sutunPinleri[sutunSayisi]= {
 P2_3,P2_4,P2_5,P1_6}; //Sutunlar 0 dan 3 e
 
//tanımlanan matrisKlavyenin olusturulması 
Keypad matrisKlavye= Keypad(makeKeymap(klavyeMatrisi), satirPinleri, sutunPinleri, satirSayisi, sutunSayisi);
 
byte address = 0x27; // LCD I2C adresi
int columns = 16; // LCD üzerindeki sutun sayısı
int rows = 2; // LCD üzerindeki satır sayısı
LiquidCrystal_I2C lcd(address, columns, rows); //LCD paratetrelerinin oluşturulması
 
/* Alt Fonksyonlar Listesi------------------------------------------------------*/
/* Programınızda kullanılan alt fonksyonlar bu kısımda listelenecektir----------*/
 
/* Ayar Fonksyonu---------------------------------------------------------------*/
void setup()
{// buraya yazdığınız ayarlama kodları, sadece bir kez çalıştırılacaktır:
 
 lcd.init(); // LCD'yi yükle
 lcd.backlight(); // LCD arkaplan işığı
 
 lcd.clear(); // Ekrani Temizle
 
 // Hesap Makinası Açılış Ekranı
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("MSP430 LaunchPad"); //LCD mesajı yazdırma
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print("*HESAP MAKiNESi*"); //LCD mesajı yazdırma
 delay(2000); // 2 saniye bekleme
 lcd.clear(); // LCD Temizleme
}
 
/* Sonsuz Döngü Fonksyonu-------------------------------------------------------*/
void loop()
{ // buraya yazdığınız döngü kodları, sonsuz döngü olarak sürekli çalıştırılacaktır:
 
 
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("1. SAYIYI GiRiN:"); //LCD mesajı yazdırma
 basilanAnahtar = matrisKlavye.getKey();//MatrisKlavye üzerinden girilen mesajı oku
 
 switch(basilanAnahtar) //matrisKlavye üzerinden girilen değere göre dallan 
 {
 case '0' ... '9': //işlem işaret değeri gelinceye kadar 1. sayıyı okuma durumu
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 birinciSayi = birinciSayi * 10 + (basilanAnahtar - '0'); //1. sayı değerini oluşturma
 lcd.print(birinciSayi); //LCD 1. sayıyı yazdırma
 break; // durumdan çık
 
 // TOPLAMA İŞLEMİ :
 case '+':
 birinciSayi = (toplam != 0 ? toplam : birinciSayi);
 
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print(" SECiLEN iSLEM : "); //LCD mesajı yazdırma
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 
 lcd.print("+"); //LCD mesajı yazdırma
 lcd.print(" TOPLAMA"); //LCD mesajı yazdırma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); //LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("2. SAYIYI GiRiN:"); //LCD mesajı yazdırma
 ikinciSayi = ikinciSayiDegeri(); //ikinciSayi değişken değerlerini oluşturma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("SONUC: "); //LCD mesajı yazdırma
 toplam = birinciSayi + ikinciSayi; // TOPLAMA İŞLEMİ :
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print(toplam); //LCD mesajı yazdırma
 delay(2500); //2500 miliSaniye Bekle
 birinciSayi = 0, ikinciSayi = 0; // birinciSayi ve ikinciSayi değişken değerlerini temizleme
 lcd.clear(); // LCD Temizleme
 break; // durumdan çık
 
 // ÇIKARTMA İŞLEMİ :
 case '-':
 birinciSayi = (toplam != 0 ? toplam : birinciSayi);
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print(" SECiLEN iSLEM : "); //LCD mesajı yazdırma
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 
 lcd.print("-"); //LCD mesajı yazdırma
 lcd.print(" CIKARMA"); //LCD mesajı yazdırma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("2. SAYIYI GiRiN:"); //LCD mesajı yazdırma
 ikinciSayi = ikinciSayiDegeri(); //ikinciSayi değişken değerlerini oluşturma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("SONUC: "); //LCD mesajı yazdırma
 toplam = birinciSayi - ikinciSayi; // ÇIKARTMA İŞLEMİ :
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print(toplam); //LCD mesajı yazdırma
 delay(2500); //2500 miliSaniye Bekle
 birinciSayi = 0, ikinciSayi = 0; // birinciSayi ve ikinciSayi değişken değerlerini temizleme
 lcd.clear(); // LCD Temizleme
 break; // durumdan çık
 
 // ÇARPMA İŞLEMİ :
 case '*':
 birinciSayi = (toplam != 0 ? toplam : birinciSayi);
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print(" SECiLEN iSLEM : "); //LCD mesajı yazdırma
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 
 lcd.print("*"); //LCD mesajı yazdırma
 lcd.print(" CARPMA"); //LCD mesajı yazdırma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("2. SAYIYI GiRiN:"); //LCD mesajı yazdırma
 ikinciSayi = ikinciSayiDegeri(); //ikinciSayi değişken değerlerini oluşturma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("SONUC: "); //LCD mesajı yazdırma
 toplam = birinciSayi * ikinciSayi; // ÇARPMA İŞLEMİ :
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print(toplam); //LCD mesajı yazdırma
 delay(2500); //2500 miliSaniye Bekle
 birinciSayi = 0, ikinciSayi = 0; // birinciSayi ve ikinciSayi değişken değerlerini temizleme
 lcd.clear(); // LCD Temizleme
 break; // durumdan çık
 
 // BÖLME İŞLEMİ :
 case '/':
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print(" SECiLEN iSLEM : "); //LCD mesajı yazdırma
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 
 lcd.print("/"); //LCD mesajı yazdırma
 lcd.print(" BOLME"); //LCD mesajı yazdırma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("2. SAYIYI GiRiN:"); //LCD mesajı yazdırma
 ikinciSayi = ikinciSayiDegeri(); //ikinciSayi değişken değerlerini oluşturma
 delay(1400); //1400 miliSaniye Bekle
 lcd.clear(); // LCD Temizleme
 lcd.setCursor(0,0); //LCD kulsör 1. satır, 1. sutunda
 lcd.print("SONUC: "); //LCD mesajı yazdırma
 // BÖLME İŞLEMİ :
 ikinciSayi == 0 ? lcd.print("Invalid") : toplam = (float)birinciSayi / (float)ikinciSayi; 
 
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print(toplam); //LCD mesajı yazdırma
 delay(2500); //2500 miliSaniye Bekle
 birinciSayi = 0, ikinciSayi = 0; //birinciSayi ve ikinciSayi değişken değerlerini temizleme
 lcd.clear(); // LCD Temizleme
 break; // durumdan çık
 
 // DEĞER TEMİZLEME İŞLEMİ :
 case 'C':
 toplam = 0; //toplam değişkeninin içeriğini temizleme
 lcd.clear(); // LCD Temizleme
 break; // durumdan çık
 }
}
 
/* Alt Fonksyonlar--------------------------------------------------------------*/
/* Programınızda kullanılan alt fonksyonlar bu kısımda oluşturulacaktır---------*/
long ikinciSayiDegeri()
{
 while( 1 )
 {
 basilanAnahtar = matrisKlavye.getKey();//MatrisKlavye üzerinden girilen mesajı oku
 if(basilanAnahtar >= '0' && basilanAnahtar <= '9')//eğer girilen değer 0 ile 9 arasında ise
 {
 ikinciSayi = ikinciSayi * 10 + (basilanAnahtar - '0');//2. sayı değerini oluşturma 
 lcd.setCursor(0,1); //LCD kulsör 2. satır, 1. sutunda
 lcd.print(ikinciSayi); //LCD mesajı yazdırma
 }
 
 if(basilanAnahtar == '=') break; // eğer basılan anahtar = ise durumdan çık 
 }
 return ikinciSayi; //return ikinciSayi;
}

Kolay gelsin.
Erkan ÇİL
Kozan / Haziran-2016

e-posta : erkancil@gmail.com

Uygulamanın Videosu : 

 

  1. Henüz hiç yorum yok.
(yayınlanmayacak)