dessel191

PM LCD.c

Nov 13th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.47 KB | None | 0 0
  1. //LCD.C
  2.  
  3.  
  4. #include "iodefine.h"
  5. #include "inline.h"
  6. #include "lcd.h"
  7.  
  8. //---- deklaracja adresow buforow sterownika wyswietlacza LCD
  9.  
  10. #define LCDObszar                       0x20000
  11. #define LCD_data                        (*(volatile unsigned char *) (LCDObszar))
  12. #define LCD_IO                          (*(volatile unsigned char *) (LCDObszar+1))
  13. #define ASCI                            48
  14. #define KROPKA                          46
  15. #define SPACE                           ' '
  16.  
  17. //--------------procedura inicjalizacji wyswietlacza, 8-bitowa magistrala, 2 linie, kursor w prawo, niewidoczny
  18.  
  19. void IniLCD(void)
  20. {                                
  21.     unsigned short Licznik;
  22.  
  23.     WriteSterLCD(0x38);     //ustawienie słowa inicjalizujacego wyswietlacz
  24.     Licznik=0x500;
  25.     while (Licznik--)       //opoznienie
  26.     {
  27.         no_operation();
  28.     }      
  29.    
  30.     WriteSterLCD(0x38);     //powtorzenie slowa
  31.     Licznik=0x12C;
  32.     while (Licznik--)
  33.     {
  34.         no_operation();
  35.     }
  36.     WriteSterLCD(0x38);     //powtorzenie slowa
  37.     Licznik=0x12C;
  38.     while (Licznik--)
  39.     {
  40.         no_operation();
  41.     }      
  42.                                                     //teraz operacja poprzedzona sprawdzeniem gotowosci
  43.     if(GotowoscLCD())   WriteSterLCD(0x0C);         //wlacz wyswietlacz, kursor niewidoczny
  44.  
  45.     if(GotowoscLCD())   WriteSterLCD(0x01);         //kasuj wyswietlacz
  46.  
  47.  
  48. }
  49.  
  50.  
  51. //----------procedura kontroli gotowosci wyswietlacza
  52.  
  53. unsigned char GotowoscLCD(void)
  54. {
  55.  
  56.     while ((ReadSterLCD()&0x80)==0x80)      //czytaj bit busy
  57.     {
  58.         no_operation();                     //jesli b7=1 czekaj
  59.     }
  60.    
  61.     return(1);                              //pokaz gotowosc 1
  62. }
  63.  
  64. //------ procedura wyslania rozkazu do rej sterujacego wyswietlacza
  65.  
  66. void WriteSterLCD(unsigned char znak)
  67. {  
  68.     LCD_data=znak;
  69.     LCD_IO=0x00;
  70.     LCD_IO=0x01;
  71.     LCD_IO=0x00;
  72. }
  73.  
  74. //---------- procedura odczytu slowa statusowego z wyswietlacza
  75.  
  76. unsigned char ReadSterLCD(void)
  77. {
  78.     unsigned char ch;
  79.    
  80.     LCD_IO=0x02;
  81.     LCD_IO=0x03;
  82.     ch=LCD_data;
  83.     LCD_IO=0x02;
  84.     return(ch);
  85. }
  86.  
  87. //---------- ustaw kursor na wyswietlaczu, x-rzad (1-2), y-kolumna(1-16)
  88.  
  89. void GotoXY(unsigned char x, unsigned char y)
  90. {
  91.     if (GotowoscLCD())
  92.     {
  93.         if (x==1) WriteSterLCD(0x80+y-1);      
  94.         if (x==2) WriteSterLCD(0xC0+y-1);
  95.        
  96.     }
  97. }
  98.  
  99. //--------- procedura wyslania znaku ASCII na wyswietlacz
  100. #undef putchar
  101. int putchar(int ch)
  102. {
  103.     if (ch==0x0A);
  104.     else
  105.     {
  106.         if (GotowoscLCD())
  107.         {
  108.             LCD_data=ch&0xFF;
  109.             LCD_IO=0x04;
  110.             LCD_IO=0x05;
  111.             LCD_IO=0x04;
  112.             LCD_IO=0x02;
  113.         }
  114.     }
  115.     return(ch);
  116. }
  117.  
  118. //--------procedura wyświetlenia stringa
  119.  
  120. void puts(char *ch)
  121. {
  122.     while(*ch)
  123.     {
  124.         putchar(*ch++);
  125.     }
  126. }
  127.  
  128. //--------procedura wyświetlania liczb 0 - 255
  129. void putnumber(unsigned char n)
  130. {
  131.     if(n/100)
  132.     {
  133.         putchar(n/100 + ASCI);
  134.         n-=(n/100 *100);
  135.         putchar(n/100 + ASCI);
  136.         n-=(n/10 *10);
  137.     }
  138.     if(n/10)
  139.     {
  140.         putchar(n/10 + ASCI);
  141.         n-=(n/10 *10);
  142.     }
  143.  
  144.     putchar(n + ASCI);
  145. }
  146.  
  147. void putshort (unsigned short n)
  148. {
  149.     if(n/1000)
  150.         putchar(n/1000 + ASCI);
  151.     else
  152.         putchar(SPACE);
  153.        
  154.     n-=(n/1000 *1000);
  155.     putchar(n/100 + ASCI);
  156.     n-=(n/100 *100);
  157.     putchar(KROPKA);
  158.     putchar(n/10 + ASCI);
  159.     n-=(n/10 *10);
  160.     putchar(n + ASCI);
  161.    
  162. }
  163.  
  164. //-------- procedura ustawiajaca kursor w polozeniu i uwidaczniajaca go
  165.  
  166. void KursorOn(unsigned char x, unsigned char y)
  167. {
  168.     GotoXY(x,y);
  169.     if (GotowoscLCD()) WriteSterLCD(0x0D);     
  170. }
  171.  
  172. //-------- procedura ustawiajaca kursor w polozeniu i wylaczajaca go
  173.  
  174. void KursorOff(void)
  175. {
  176.     if (GotowoscLCD()) WriteSterLCD(0x0C);     
  177. }
  178.  
  179.  
  180. //--------- procedura kasowania wyswietlacza
  181.  
  182. void ClrScr(void)
  183. {
  184.     if (GotowoscLCD()) WriteSterLCD(0x01);
  185. }
Advertisement
Add Comment
Please, Sign In to add comment