"Enter"a basıp içeriğe geçin

LPC2104 – Örnek Programlar

Örnek 1

Pin 0’a bağlanmış bir led’i 500 milisaniye boyunca 1, 500 milisaniye boyunca 0 yapan programı yazınız.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.

/* Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
 long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
 for (i=1;i<=sure;i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
 {
 for (k=0;k<=12000;k++)
 {}
 }
}
/* Ana Fonksiyon */
int main (void) {

IODIR0 = 0x00000001; //giris cikis ayarlama komutu 1 cikis 0 giris
// 1. biti cikis digerleri giris

 while (1) { //sonsuz döngü
 IOSET0 = 0x00000001; //1. biti 1 yap
 Gecikme(500); //bekleme yap (yaklasik 500 msn - 12Mhz de)
 IOCLR0 = 0x00000001; //1. biti 0 yap
 Gecikme(500); //bekleme yap (yaklasik 500 msn - 12Mhz de)
 }
}

ders1

Örnek 2

Pin 1’e bağlanmış bir butona basıldığında pin 0’a bağlanmış led’i yakan, bırakıldığında söndüren programı yazınız.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.

/* Ana Fonksiyon */
int main (void) {

 IODIR0 = 0x00000001; //// 1. biti cikis digerleri giris

 while (1) { //sonsuz döngü

 if (IOPIN0&0x00000002) // İkinci pindeki buton
 {
 IOCLR0 = 0x01; // Birse
 }else
 {
 IOSET0 = 0x01; // Sifirsa
 }
 }
}

ders2

Örnek 3

İlk 8 pine bağlı ledler ile kara şimşek programını yazınız.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.

unsigned int sayac=0,sayac2=1;
/* Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
    long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
    for (i=1;i<=sure;i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
    {
        for (k=0;k<=12000;k++)
        {}
    }
}
/* Ana Fonksiyon */
int main (void) {

IODIR0 = 0x000000FF; //giris cikis ayarlama komutu 1 cikis 0 giris
// ilk 8. biti cikis digerleri giris

    while (1) { //sonsuz döngü
        for (sayac=1;sayac<=8;sayac++) // 8 defa ayni islemi yapmak için for döngüsü
        {
            IOPIN0 = sayac2; // 0. portta sayac2 nin bilgisini gönder
            sayac2 = sayac2 * 2; // sayac2 nin içerisindeki sayı ile 2 yi çarp
            Gecikme(10); // 10 msn bekle
        }
        sayac2=64; // sayac2 ye 64 yükle
        for (sayac=1;sayac<=8;sayac++) // 8 defa ayni islemi yapmak için for döngüsü
        {
            IOPIN0 = sayac2; // 0. portta sayac2 nin bilgisini gönder
            sayac2 = sayac2 / 2; // sayac2 nin içerisindeki sayiyi 2 ye böl
            Gecikme(10); // 10 msn bekle
        }
        sayac2=2; // sayac2 ye 2 yükle
    }
}

ders3

Örnek 4

7 segment display’de butonlar ile arttırıp azaltma uygulamasını yapınız.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.
unsigned char sayac=0,sayac2=1;
unsigned char segment[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
/* Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
    long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
    for (i=1;i<=sure;i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
    {
        for (k=0;k<=12000;k++)
        {}
    }
}
/* Ana Fonksiyon */
int main (void) {
    IODIR0 = 0x000000FF; // ilk 8. biti cikis digerleri giris

     while (1) { //sonsuz döngü

         if(IOPIN0&0x00000100) //P0.8 pini ni kontrol et
         { // Birse
             sayac++; // Sayacı bir arttır
             Gecikme(25); // 25 msn bekle
             if(sayac==10)sayac=0; // Eğer sayac 10 ise sayaca 0 yükle
         }
         if(IOPIN0&0x00000200) //P0.9 pini ni kontrol et
         { // Birse
             sayac--; // Sayacı bir azalt
             Gecikme(25); // 25 msn bekle
             if(sayac==255)sayac=9; // Eğer sayac 255 ise sayaca 9 yükle
         }
         if(sayac2!=sayac) // Eğer sayac sayac2 ye eşit değilse
         {
             sayac2=sayac; //sayac2 ye sayacın içerisindekini yükle
             IOPIN0 = segment[sayac]; //7 segment display de değeri göster.
         }
    }
}

ders4

#DEFINE

#define ile bir pini tanımlamayı ve kullanmayı göreceğiz. Peki, neden define kullanmalıyız?
Program içerisinde birçok yerde aynı pin aynı görevde kullanılacaksa ve bu pin kullanıcı tarafından gerektiğinde değiştirilmesi isteniyorsa, kullanıcıya kolaylık sağlaması için define’ı kullanabiliriz.

Örnek:

#define Led 0x00000001; //0. Pin kullanılmak istendiğinde Led olarak kullanılabilir.
#define Buton 0x00000002; //1. Pin kullanılmak istendiğinde Buton olarak kullanılabilir.

if (IOPIN0&Buton)
{
IOSET0=Led;
}else
{
IOCLR0=Led;
}

Örnek 5

7 segment display’in keypad ile kontrolünü yapınız. Bu uygulamayı Keypad.h dosyası oluşturarak gerçekleştiriniz.
Keypad.h dosyası Ekler bölümünde bulunmaktadır.

Main.c dosyası

*********************************
#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.
#include "Keypad.h"

unsigned char Keypad;
unsigned char segment[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x0F};

/* Ana Fonksiyon */
int main (void) {

IODIR0 = 0x0000F0FF; // ilk 8. biti cikis digerleri giris
while (1) { //sonsuz döngü

        Keypad = KeypadOku();
        if(Keypad!=55) // eger tusa basilmissa, basilan tusu göster
        {
            IOPIN0 = segment[Keypad];
        }
    }
}

ders5

Örnek 6

7 segment display ve keypad ile şifreli kilit uygulamasını yapınız.

Gecikme.h ve Keypad.h Ekler sayfasında bulunmaktadır.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.
#include "Keypad.h"
#include "Gecikme.h"

unsigned char Sayac=0,Keypad,Alinan[4],Sifre[4]={3,6,3,9};
unsigned char Segment[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x0F};

/* Ana Fonksiyon */
int main (void) {

IODIR0 = 0x0000F8FF; // ilk P0.0 - P0.7 ile P0.11 - P0.15 i cikis digerleri giris

    while (1) { //sonsuz döngü
        Keypad=KeypadOku();
        if(Keypad!=55) // eger tusa basilmissa, basilan tusu göster
        {
            IOPIN0 = Segment[Keypad]; // Basili tusu göster
            Alinan[Sayac] = Keypad; // Basislan tusun degerini kaydet
            Gecikme(1,50); // 50msn bekle (tusu birakmayi bekle)
            if (Sayac==3) // Eger 4 tane rakam girildiyse dogrulugunu kontrol et
            {
                if(Alinan[0]==Sifre[0] && Alinan[1]==Sifre[1] && Alinan[2]==Sifre[2] && Alinan[3]==Sifre[3])
                {
                    IOPIN0 = 0x00000089; // P0.7 yi ve displayin alt ve üst ledini yak
                }else
                {
                    IOPIN0 = 0x00000840; // P0.11 i ve displayin orta ledini yak
                }
            }
            Sayac++; // Sayac değişkenini 1 arttir
        }
    }
}

ders6

Örnek 7

LCD ye yazı ve değişken yazdırma uygulaması.

LCD.c Ekler bölümünde bulunmaktadır.

#include <LPC21xx.H> //islemcinin kaynak dosyasi ekleniyor.
#include "Gecikme.h"
#include "LCDE.c"

unsigned int Deger=255;
/* Ana Fonksiyon */
int main (void)
{
    IODIR0 = 0x000000FF; // ilk P0.0 - P0.7 ile P0.11 - P0.15 i cikis digerleri giris
    Gecikme(1,50);
    lcd_Baslat();

    Gecikme(1,200);
    lcd_Yazi(1,1,"Emrah BUDAK");
    lcd_Yazi(2,1,"ARM LCD Uygulamasi");
    Gecikme(1,200);
    lcd_Temizle();
    lcd_Yazi(1,1,"Emrah BUDAK");
    lcd_Yazi(2,1,"DEGER= ");
    lcd_Veri(2,8,3,Deger);
    while (1)
    {

    }
}

ders7

Bir eksikliğimiz varsa affola…

Ekler:

Gecikme.h dosyası

*****************************
/* Gecikme Fonksiyonu */
void Gecikme (char Secim, long int Sure)
{
long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
for (i=1;i<=Sure;i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
{
if(Secim==1)
{
for (k=0;k<=12000;k++)
{}
}
}
}

Keypad.h dosyası

*************************************
/* Keypad'dan bilgi alma fonksiyonu */

#define Satir1 0x00001000 //P0.12
#define Satir2 0x00002000 //P0.13
#define Satir3 0x00004000 //P0.14
#define Satir4 0x00008000 //P0.15
#define Sutun1 0x00000100 //P0.08
#define Sutun2 0x00000200 //P0.09
#define Sutun3 0x00000400 //P0.10

int KeypadOku ()
{
unsigned char Keypad;
Keypad=55;
// 1. satiri seç
IOSET0=Satir1; IOCLR0=Satir2; IOCLR0=Satir3; IOCLR0=Satir4;
if(IOPIN0&Sutun1)Keypad=1;
if(IOPIN0&Sutun2)Keypad=2;
if(IOPIN0&Sutun3)Keypad=3;
// 2. satiri seç
IOCLR0=Satir1; IOSET0=Satir2; IOCLR0=Satir3; IOCLR0=Satir4;
if(IOPIN0&Sutun1)Keypad=4;
if(IOPIN0&Sutun2)Keypad=5;
if(IOPIN0&Sutun3)Keypad=6;
// 3. satiri seç
IOCLR0=Satir1; IOCLR0=Satir2; IOSET0=Satir3; IOCLR0=Satir4;
if(IOPIN0&Sutun1)Keypad=7;
if(IOPIN0&Sutun2)Keypad=8;
if(IOPIN0&Sutun3)Keypad=9;
// 4. satiri seç
IOCLR0=Satir1; IOCLR0=Satir2; IOCLR0=Satir3; IOSET0=Satir4;
if(IOPIN0&Sutun1)Keypad=10;
if(IOPIN0&Sutun2)Keypad=0;
if(IOPIN0&Sutun3)Keypad=11;

return Keypad;
}

LCDE.c dosyası

//**********************************************************************//
// LCDE.c //
// //
// Emrah BUDAK //
// 16/06/2011 //
//**********************************************************************//
// Komutlar //
// /
// lcd_Baslat(); // Baslangicta kesinlikle yazilmalidir //
// lcd_Temizle (); // Lcd yi temizlemek için kulanilir //
// lcd_Yazi(a,b,"Deneme"); // Lcd ye yazi yazdirmak için kullanilir //
// lcd_Veri(a,b,c,Deger); // Lcd ye degisken yazdirmak için kullanilir//
// //
// a= satir //
// b= sutun //
// c= kaç basamakli olacakgi (1-6) //
// Deger= Maksimum 6 basamakli bir sayi int - char //
//**********************************************************************//

#define LCD_D4 0x10 //P0.04
#define LCD_D5 0x20 //P0.05
#define LCD_D6 0x40 //P0.06
#define LCD_D7 0x80 //P0.07
#define LCD_EN 0x08 //P0.22
#define LCD_RS 0x04 //P0.23

#define LCD_DATA (LCD_D4|LCD_D5|LCD_D6|LCD_D7)
#define LCD_IOALL (LCD_D4|LCD_D5|LCD_D6|LCD_D7|LCD_EN|LCD_RS)

#define lcd_rs_set() IOSET0 |= LCD_RS
#define lcd_rs_clr() IOCLR0 |= LCD_RS
#define lcd_en_set() IOSET0 |= LCD_EN
#define lcd_en_clr() IOCLR0 |= LCD_EN

#define lcd_Temizle() lcd_komut(0x01)
#define lcd_cursor_home() lcd_komut(0x02)

#define lcd_display_on() lcd_komut(0x0E)
#define lcd_display_off() lcd_komut(0x08)

#define lcd_cursor_blink() lcd_komut(0x0F)
#define lcd_cursor_on() lcd_komut(0x0E)
#define lcd_cursor_off() lcd_komut(0x0C)

#define lcd_cursor_left() lcd_komut(0x10)
#define lcd_cursor_right() lcd_komut(0x14)
#define lcd_display_sleft() lcd_komut(0x18)
#define lcd_display_sright() lcd_komut(0x1C)

void lcd_Baslat(void);
void lcd_yaz(unsigned char c);
void lcd_komut(unsigned char c);
void lcd_4bit_gonder(unsigned char Deger);
void lcd_bilgi_yaz(unsigned char Deger);

void lcd_4bit_gonder(unsigned char Deger)
{
    IOCLR0 |= (LCD_DATA);
    IOSET0 |= (Deger<<4); } void lcd_bilgi_yaz(unsigned char Deger) {     lcd_en_set();     lcd_4bit_gonder((Deger>>4)&0x0F);
    lcd_en_clr();
    Gecikme(1,1);

    lcd_en_set();
    lcd_4bit_gonder((Deger)&0x0F);
    lcd_en_clr();
    Gecikme(1,1);
}

void lcd_yaz(unsigned char c)
{
    lcd_rs_set();
    lcd_bilgi_yaz(c);
}

void lcd_komut(unsigned char c)
{
    lcd_rs_clr();
    lcd_bilgi_yaz(c);
}

void lcd_Baslat()
{
    //IODIR0 |= LCD_IOALL;
    lcd_rs_clr();
    lcd_en_clr();
    Gecikme(0,2800);

    lcd_bilgi_yaz(0x30);
    lcd_bilgi_yaz(0x30);
    lcd_bilgi_yaz(0x30);

    lcd_en_set();
    lcd_4bit_gonder(0x02);
    lcd_en_clr();
    Gecikme(1,1);

    //2 satir 4 bit
    lcd_komut(0x28);
    //LCD kapat
    lcd_komut(0x08);
    //LCD ac
    lcd_komut(0x0C);
    //Clear Display
    lcd_komut(0x01);
    //Entry mode
    //lcd_bilgi_yaz(0x06);
}

void lcd_Yazi(unsigned char satir, unsigned char sutun, unsigned char* str){
    int i;
    if (satir==1)
    lcd_komut(0x80|(sutun-1));

    if (satir==2)
        lcd_komut(0x80|(0x40+(sutun-1)));

    for (i=0;i<16 && str[i]!=0;i++)
    {
        lcd_yaz(str[i]);
    }

}
void lcd_Veri(unsigned char satir, unsigned char sutun, unsigned char bit, unsigne    d char str){
    int a,b;
    if (satir==1)
        lcd_komut(0x80|(sutun-1));

    if (satir==2)
        lcd_komut(0x80|(0x40+(sutun-1)));

    if(bit==6)
    {
        a=str/100000;
        lcd_yaz(0x30 | a);
        a=str/10000;
        lcd_yaz(0x30 | a);
        a=str/1000;
        lcd_yaz(0x30 | a);
        a=str/100;
        lcd_yaz(0x30 | a);
        b=str/10;
        b=b-(a*10);
        lcd_yaz(0x30 | b);
        a=str%10;
        lcd_yaz(0x30 | a);
    }
    if(bit==5)
    {
        a=str/10000;
        lcd_yaz(0x30 | a);
        a=str/1000;
        lcd_yaz(0x30 | a);
        a=str/100;
        lcd_yaz(0x30 | a);
        b=str/10;
        b=b-(a*10);
        lcd_yaz(0x30 | b);
        a=str%10;
        lcd_yaz(0x30 | a);
    }
    if(bit==4)
    {
        a=str/1000;
        lcd_yaz(0x30 | a);
        a=str/100;
        lcd_yaz(0x30 | a);
        b=str/10;
        b=b-(a*10);
        lcd_yaz(0x30 | b);
        a=str%10;
        lcd_yaz(0x30 | a);
    }
    if(bit==3)
    {
        a=str/100;
        lcd_yaz(0x30 | a);
        b=str/10;
        b=b-(a*10);
        lcd_yaz(0x30 | b);
        a=str%10;
        lcd_yaz(0x30 | a);
    }
    if(bit==2)
    {
        a=str/100;
        b=str/10;
        b=b-(a*10);
lcd_yaz(0x30 | b);
a=str%10;
lcd_yaz(0x30 | a);
}
if(bit==1)
{
a=str%10;
lcd_yaz(0x30 | a);
}
}

 

PDF dosyası olarak indir

İlk Yorumu Siz Yapın

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir