Advertisement
Guest User

Untitled

a guest
Jul 20th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.03 KB | None | 0 0
  1.    
  2.  
  3.     /*
  4.       Plik hd44780.c
  5.      
  6.       Definicje kilku funkcji do obsługi alfanumerycznego
  7.       wyświetlacza LCD HD44780
  8.     */
  9.      
  10.      
  11.     #include<avr/io.h>
  12.     #include<util/delay.h>
  13.     #include "hd44780.h"
  14.      
  15.     /*--------------------------------------------------------*/
  16.     /* Zapis danej lub instrukcji */
  17.      
  18.     void WriteToLCD (unsigned char v,unsigned char  rs)
  19.     {
  20.         unsigned char bf;
  21.      
  22.         SET_OUT_LCD_D4;
  23.         SET_OUT_LCD_D5;
  24.         SET_OUT_LCD_D6;
  25.         SET_OUT_LCD_D7;
  26.      
  27.         if(v&0x10) SET_LCD_D4; else CLR_LCD_D4;
  28.         if(v&0x20) SET_LCD_D5; else CLR_LCD_D5;
  29.         if(v&0x40) SET_LCD_D6; else CLR_LCD_D6;
  30.         if(v&0x80) SET_LCD_D7; else CLR_LCD_D7;
  31.      
  32.         CLR_LCD_E;
  33.         if(rs) SET_LCD_RS;else CLR_LCD_RS;
  34.         CLR_LCD_RW;
  35.      
  36.         LCD_NOP;
  37.         SET_LCD_E;
  38.         LCD_NOP;
  39.         CLR_LCD_E;
  40.         LCD_NOP;
  41.      
  42.         if(v&0x01) SET_LCD_D4; else CLR_LCD_D4;
  43.         if(v&0x02) SET_LCD_D5; else CLR_LCD_D5;
  44.         if(v&0x04) SET_LCD_D6; else CLR_LCD_D6;
  45.         if(v&0x08) SET_LCD_D7; else CLR_LCD_D7;
  46.      
  47.         LCD_NOP;
  48.         SET_LCD_E;
  49.         LCD_NOP;
  50.         CLR_LCD_E;
  51.         LCD_NOP;
  52.      
  53.         SET_IN_LCD_D4;
  54.         SET_IN_LCD_D5;
  55.         SET_IN_LCD_D6;
  56.         SET_IN_LCD_D7;
  57.      
  58.         CLR_LCD_RS;
  59.         SET_LCD_RW;
  60.         SET_LCD_D7;
  61.      
  62.      
  63.     /* Przydałby się pełny odczyt */
  64.         do
  65.         {
  66.             LCD_NOP;
  67.             SET_LCD_E;
  68.             LCD_NOP;
  69.             bf = IS_SET_LCD_D7;
  70.             CLR_LCD_E;
  71.             LCD_NOP;
  72.             SET_LCD_E;
  73.             LCD_NOP;
  74.             LCD_NOP;
  75.             CLR_LCD_E;
  76.            
  77.         }while( bf );
  78.     }
  79.      
  80.      
  81.     /*--------------------------------------------------------*/
  82.     /* Funkcja odczytuje adres i flage zajetosci */
  83.      
  84.     unsigned char ReadAddressLCD ( void)
  85.     {
  86.         unsigned char g = 0 ;
  87.      
  88.         CLR_LCD_RS;
  89.         SET_LCD_RW;
  90.      
  91.         SET_IN_LCD_D4;
  92.         SET_IN_LCD_D5;
  93.         SET_IN_LCD_D6;
  94.         SET_IN_LCD_D7;
  95.      
  96.         LCD_NOP;
  97.         SET_LCD_E;
  98.         LCD_NOP;
  99.      
  100.         if(IS_SET_LCD_D4) g+=16;
  101.         if(IS_SET_LCD_D4) g+=32;
  102.         if(IS_SET_LCD_D4) g+=64;
  103.         if(IS_SET_LCD_D4) g+=128;
  104.      
  105.         CLR_LCD_E;
  106.         LCD_NOP;
  107.         SET_LCD_E;  
  108.         LCD_NOP;
  109.      
  110.         if(IS_SET_LCD_D4) g+=8;
  111.         if(IS_SET_LCD_D4) g+=4;
  112.         if(IS_SET_LCD_D4) g+=2;
  113.         if(IS_SET_LCD_D4) g+=1;
  114.      
  115.         CLR_LCD_E;
  116.      
  117.         return  g ;
  118.     }
  119.      
  120.      
  121.     /*---------------------------------------------------------*/
  122.     /* Inicjalizacja wyświetlacza */
  123.      
  124.     void lcd_init(void)
  125.     {
  126.         _delay_ms(31);    
  127.        
  128.         SET_OUT_LCD_RS;
  129.         SET_OUT_LCD_RW;
  130.         SET_OUT_LCD_E;
  131.         SET_OUT_LCD_D4;
  132.         SET_OUT_LCD_D5;
  133.         SET_OUT_LCD_D6;
  134.         SET_OUT_LCD_D7;
  135.      
  136.         CLR_LCD_E;
  137.         CLR_LCD_RS;
  138.         CLR_LCD_RW;
  139.         SET_LCD_D4;
  140.         SET_LCD_D5;
  141.         CLR_LCD_D6;
  142.         CLR_LCD_D7;        
  143.      
  144.         LCD_NOP;
  145.         SET_LCD_E;
  146.         LCD_NOP;
  147.         CLR_LCD_E;
  148.         LCD_NOP;
  149.         _delay_ms(10);
  150.      
  151.         LCD_NOP;
  152.         SET_LCD_E;
  153.         LCD_NOP;
  154.         CLR_LCD_E;
  155.         LCD_NOP;
  156.         _delay_ms(2);
  157.      
  158.         LCD_NOP;
  159.         SET_LCD_E;
  160.         LCD_NOP;
  161.         CLR_LCD_E;
  162.         LCD_NOP;
  163.         _delay_ms(2);
  164.      
  165.         CLR_LCD_D4;
  166.         LCD_NOP;
  167.         SET_LCD_E;
  168.         LCD_NOP;
  169.         CLR_LCD_E;
  170.         LCD_NOP;
  171.         _delay_us(80);
  172.      
  173.         WriteToLCD (0x28 , LCDCOMMAND) ;
  174.         LCD_DISPLAY(0) ;
  175.         LCD_CLEAR ;
  176.         LCD_ENTRY_MODE(LCDINCREMENT) ;
  177.     }
  178.      
  179.      
  180.     /*--------------------------------------------------------*/
  181.     /* Wyswietla tekst na aktualnej pozycji kursora */
  182.      
  183.     void lcd_puts(char *str)
  184.     {
  185.         unsigned char i =0;
  186.      
  187.         while( str[i])
  188.             LCD_WRITE_DATA(str[i++]) ;
  189.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement