tel. +48 (12) 659-14-42

Przykładowy program w ARDUINO w języku C dla sterownika SU 1.5:

Poniżej prezentuję kody źródłowe przykładowego programu dla sterownika SU 1.5. Program został napisany w języku C, w ARDUINO.

Przykładowy program prezentuje jak wstawiać kod w języku C w ARDUINO. Zadaniem programu jest wyświetlenie napisu na wyświetlaczu LCD.

W kod w języka C, z zasobów ARDUINO, została wpleciona funkcja opóźniająca Delay().


#include "global.h"

unsigned char const napis1[] PROGMEM=   {   "Sterownik SU 1.50"};
unsigned char const napis2[] PROGMEM=   {   " firmy E-TRONIX 0"};

void setup() 
{
  // put your setup code here, to run once:
 pinMode(A5, OUTPUT);  //buzer, 29 LUB A5
 pinMode(A7,INPUT);  //WEJSCIE OK
}

void loop() 
{
  // put your main code here, to run repeatedly:
  DDRB=0xff;      //magistrala danych jako wyjscie
  sbi(DDRD,4);    //aktywacja pinu wyswietlacza
  sbi(DDRC,6);    //aktywacja pinu ING1 odczytu wejsc cyfrowych
  sbi(DDRC,7);    //aktywacja pinu do sterowania wyjsc cyfrowych
  sbi(DDRA,4);    //aktywacja pinu /OE wyjsc cyfrowych
  sbi(PORTC,6);   //stan wysoki na ING1
  sbi(PORTC,7);   //stan wysoki na OUTG1
  cbi(PORTA,4);   //stan niski na /OE (sterowanie wyjsc cyfrowych mozliwe)
  sbi(PORTD,4);   //stan wysoki na DISPLAY
    

  LCD_init();
  LCD_clear();

  LCD_TXT(napis1);
  LCD_xy(1,2);
  LCD_putchar('a');
  LCD_TXT(napis2);
  while(1)
  {
	if (digitalRead (A7)==LOW) digitalWrite(A5, LOW);
    else digitalWrite(A5, HIGH);    
  }
}

/*
*************************************************
* Procedura zapisująca dane w wyświetlaczu LCD. *
*************************************************
*/
void LCD_clock(u08 data, u08 rs)
{
 
 MAGIST_DATA=((data&0x0f)<<4);
 
  if (rs==1)                        // linia RS wyświetlacza
    sbi(MAGIST_DATA,LCD_RS);        // ustaw linię RS wyświetlacza
    else cbi(MAGIST_DATA,LCD_RS);
 
 cbi(PORTB,1);
 sbi(DDRD,4);    
 
 sbi(MAGIST_DATA,LCD_EN);           // ustaw linię EN wyświetlacza
 
 delay(1);
 cbi(PORTD,4);                      // i wysłanie danych na szynę
 sbi(PORTD,4);
 
 delay(1);
 cbi(MAGIST_DATA,LCD_EN);           // skasuj linię EN wyświetlacza
 
 delay(1);
 cbi(PORTD,4);
 sbi(PORTD,4);
 
 delay(1);
 cbi(MAGIST_DATA,LCD_RS);           // skasuj liniŕ RS wyświetlacza
}

/*
*************************************************
* Wysyłanie danych lub komend do wyświetlacza.  *
*************************************************
*/
void LCD_send(u08 data, u08 rs)
{
  LCD_clock(data >> 4  , rs); // bardziej znacząca część
  LCD_clock(data & 0x0F, rs);   // mniej znacząca część
}

/*
*************************************************
* Procedura wysyłająca komendy do wyświetlacza. *
*************************************************
*/
void LCD_send_0(u08 ch)
{
  LCD_send(ch, 0);
}
 
/*
*************************************************
* Procedura wysyłająca dane do wyświetlacza LCD.*
*************************************************
*/
void LCD_send_1(u08 ch)
{
  LCD_send(ch, 1);
}

/*
*************************************************
* Procedura czyszcząca wyświetlacz LCD.         *
*************************************************
*/
void LCD_clear(void)
{
 LCD_send_0(0x01);  // wyczyść LCD
 delay(100);
}

/*
*************************************************
* Procedura inicjująca wyświetlacz LCD.         *
*************************************************
*/
void LCD_init(void)
{
 register unsigned char i;
 

  delay(1600);
  for(i=0;i<3;i++)
  {
    LCD_clock(0x03, 0); //reset LCD
    delay(40);
  }
  LCD_clock(0x02,0);    //operacje 4-bitowe
  LCD_send_0(0x2C);   
  LCD_send_0(0x08); //wylacz lcd, wylacz kursor, wlacz mruganie kursora
  LCD_clear();      //skasuj lcd, kursor do pozycji home
  LCD_send_0(0x06);     //przesuwaj kursor w prawo w trakcie wyswietlania
  LCD_send_0(0x0C);     //wlacz lcd i wyłącz kursor
}

/*
*************************************************
* Procedura wyświetlająca znak na wyświelaczu   *
* LCD.                                          *
*************************************************
*/
void LCD_putchar(char ch)
{
 
  LCD_send_1(ch);
 
}

 /*
*************************************************
* Procedura wyświetlająca napis umieszczony     *
* w pamięci programu.                           *
*************************************************
*/
void LCD_TXT(unsigned char tablica[])
{
unsigned char x;
 x=0;
 for (x=0; pgm_read_byte(&tablica[x])!='0'; x++)
    {
     LCD_putchar(pgm_read_byte(&tablica[x]));
    }
 
}

/*
*************************************************
* Procedura umieszczająca kursor wyświetlacza   *
* na odpowiednich współrzędnych.                *
*************************************************
*/
void LCD_xy(u08 x, u08 y)
{
  switch(y)
  {
    case 1: y=0x00; break; // adres 1 znaku 1 wiersza
    case 2: y=0x40; break; // adres 1 znaku 2 wiersza
  }
  LCD_send_0(0x80+y+x-1);   // ustaw adres RAM
}


Sterownik SU

Foto. 1. Efekt działania programu.

Początek ..
ikona-google
ikona-youtubee