Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. #include <p24fj128ga010.h>
  2. #include <string.h>
  3. #define TVOLT 5
  4. #define AINPUTS 0xffcf
  5. _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
  6. _CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
  7. #define LCDDATA 1
  8. #define LCDCMD 0
  9. #define PMDATA PMDIN1
  10. #define SCALE 308L
  11. #define POT 5
  12. #define TSENS 4
  13. #define AINPUTS 0xffcf
  14.  
  15. void ADCinit(int amask){
  16. AD1PCFG=amask;
  17. AD1CON1=0x00e0;
  18. AD1CSSL=0;
  19. AD1CON2=0;
  20. AD1CON3=0x1f02;
  21. AD1CON1bits.ADON=1;
  22.  
  23. }//ADCinit
  24.  
  25. void LCDinit(void){
  26. PMCON=0x83BF;
  27. PMMODE=0x3FF;
  28. PMAEN=0x0001;
  29.  
  30. T1CON=0x8030; //inicjalizacja Timer1
  31. TMR1=0; while(TMR1<2000); //32ms
  32.  
  33. PMADDR=LCDCMD;
  34. PMDATA=0b00111000;
  35.  
  36. TMR1=0; while(TMR1<3); //48us
  37.  
  38. PMDATA=0b00001100; //wlacznie wyswietlacza, kursor wylaczony, mruganie wylaczone
  39. TMR1=0; while(TMR1<3); //48us
  40.  
  41. PMDATA=0b00000001; //wyczyszczenie wyswietlacza
  42. TMR1=0; while(TMR1<100); //1,6ms
  43.  
  44. PMDATA=0b00000110; //zwiekszenie kursora bez przesuniecia
  45. TMR1=0; while(TMR1<100);
  46. }//LCDinit
  47.  
  48. int readADC(int ch){
  49. AD1CHS=ch;
  50. AD1CON1bits.SAMP=1;
  51. while(!AD1CON1bits.DONE);
  52. return ADC1BUF0;
  53. }//readADC
  54.  
  55. char LCDread(int addr){
  56. int dummy;
  57. while(PMMODEbits.BUSY);
  58. PMADDR=addr;
  59. dummy=PMDATA;
  60. while(PMMODEbits.BUSY);
  61. return (PMDATA);
  62. } //LCDread
  63.  
  64. #define LCDbusy() LCDread(LCDCMD) & 0x80
  65. #define LCDaddr() LCDread(LCDCMD) & 0x7F
  66. #define getLCD() LCDread(LCDDATA)
  67.  
  68. void LCDwrite(int addr, char c){
  69. while(LCDbusy());
  70. while(PMMODEbits.BUSY); //czekamy na PMP, az bedzie dostepne
  71. PMADDR=addr;
  72. PMDATA=c;
  73. }//LCDwrite
  74.  
  75. #define putLCD(d) LCDwrite(LCDDATA, (d))
  76. #define LCDcmd(c) LCDwrite(LCDCMD, (c))
  77. #define LCDhome() LCDwrite(LCDCMD, 2)
  78. #define LCDclr() LCDwrite(LCDCMD, 1)
  79. #define LCDreturn() LCDwrite(LCDCMD, 192)
  80.  
  81. void putsLCD(char *s){
  82. while(*s)
  83. putLCD(*s++);
  84. }//putsLCD
  85.  
  86. int main(void)
  87. {
  88. unsigned long i;
  89. unsigned int dir;
  90. unsigned char display=0;
  91. int przes = 20,przes2 = 0;
  92. LCDinit();
  93. char buf[17];
  94. char *tekst1 = " Witaj ";
  95. char *tekst2 = " Swiecie ";
  96. int volt;
  97.  
  98. PORTA=0x0000;
  99. TRISA=0xFF00;
  100. TRISAbits.TRISA7=1;
  101. TRISD=0xFFFF;
  102.  
  103. ADCinit(AINPUTS);
  104. again:
  105. for(i=101L*SCALE;i>0;i--)Nop();
  106. PORTA=(unsigned int) display;
  107.  
  108. memcpy(buf,tekst1+przes, 16);
  109. buf[16]='\0';
  110. putsLCD(buf);
  111.  
  112. LCDreturn();
  113. memcpy(buf,tekst2+przes, 16);
  114. buf[16]='\0';
  115. przes = przes>0?przes-1:20;
  116. putsLCD(buf);
  117. LCDhome();
  118. goto again;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement