Advertisement
Guest User

Untitled

a guest
May 24th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
  4. _CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
  5.  
  6. #define LCDDATA 1
  7. #define LCDCMD 0
  8. #define PMDATA PMDIN1
  9. #define SCALE 308L
  10.  
  11.  
  12. void LCDinit(void){
  13. PMCON=0x83BF;
  14. PMMODE=0x3FF;
  15. PMAEN=0x0001;
  16.  
  17. T1CON=0x8030; //inicjalizacja Timer1
  18. TMR1=0; while(TMR1<2000); //32ms
  19.  
  20. PMADDR=LCDCMD;
  21. PMDATA=0b00111000;
  22.  
  23. TMR1=0; while(TMR1<3); //48us
  24.  
  25. PMDATA=0b00001100; //wlacznie wyswietlacza, kursor wylaczony, mruganie wylaczone
  26. TMR1=0; while(TMR1<3); //48us
  27.  
  28. PMDATA=0b00000001; //wyczyszczenie wyswietlacza
  29. TMR1=0; while(TMR1<100); //1,6ms
  30.  
  31. PMDATA=0b00000110; //zwiekszenie kursora bez przesuniecia
  32. TMR1=0; while(TMR1<100);
  33. }//LCDinit
  34.  
  35. char LCDread(int addr){
  36. int dummy;
  37. while(PMMODEbits.BUSY);
  38. PMADDR=addr;
  39. dummy=PMDATA;
  40. while(PMMODEbits.BUSY);
  41. return (PMDATA);
  42. } //LCDread
  43.  
  44. #define LCDbusy() LCDread(LCDCMD) & 0x80
  45. #define LCDaddr() LCDread(LCDCMD) & 0x7F
  46. #define getLCD() LCDread(LCDDATA)
  47.  
  48. void LCDwrite(int addr, char c){
  49. while(LCDbusy());
  50. while(PMMODEbits.BUSY); //czekamy na PMP, az bedzie dostepne
  51. PMADDR=addr;
  52. PMDATA=c;
  53. }//LCDwrite
  54.  
  55. #define putLCD(d) LCDwrite(LCDDATA, (d))
  56. #define LCDcmd(c) LCDwrite(LCDCMD, (c))
  57. #define LCDhome() LCDwrite(LCDCMD, 2)
  58. #define LCDclr() LCDwrite(LCDCMD, 1)
  59. #define LCDreturn() LCDwrite(LCDCMD, 192)
  60.  
  61. void putsLCD(char *s){
  62. while(*s)
  63. putLCD(*s++);
  64. }//putsLCD
  65.  
  66. int main(void){
  67. unsigned long i;
  68. unsigned long j;
  69. unsigned long k;
  70.  
  71. LCDinit(); //inicjalizacja wyswietlacza
  72.  
  73. while(1){ //petla nieskonczona
  74. for (i=0;i<11;i++)//DZIEN porusza się w prawo, DOBRY w lewo
  75. {
  76. LCDclr();
  77. for (j=0;j<i;j++)
  78. {
  79. putsLCD(" ");
  80. }
  81.  
  82. putsLCD("DZIEN");
  83. LCDreturn();
  84.  
  85. for (j=11;j>i;j--)
  86. {
  87. putsLCD(" ");
  88. }
  89. putsLCD("DOBRY");
  90. LCDhome();
  91. for(k=500L*SCALE;k>0;k--)Nop(); //pol sekundy przerwy
  92. }
  93.  
  94. for (i=11;i>0;i--)//DZIEN porusza się w lewo, DOBRY w prawo
  95. {
  96. LCDclr();
  97. for (j=0;j<i;j++)
  98. {
  99. putsLCD(" ");
  100. }
  101.  
  102. putsLCD("DZIEN");
  103. LCDreturn();
  104.  
  105. for (j=11;j>i;j--)
  106. {
  107. putsLCD(" ");
  108. }
  109. putsLCD("DOBRY");
  110. LCDhome();
  111. for(k=500L*SCALE;k>0;k--)Nop(); //pol sekundy przerwy
  112. }
  113. }//koniec petli niesk.
  114.  
  115. return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement