Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <p24fj128ga010.h>
- _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
- _CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
- #define LCDDATA 1
- #define LCDCMD 0
- #define PMDATA PMDIN1
- #define SCALE 308L
- void LCDinit(void){
- PMCON=0x83BF;
- PMMODE=0x3FF;
- PMAEN=0x0001;
- T1CON=0x8030; //inicjalizacja Timer1
- TMR1=0; while(TMR1<2000); //32ms
- PMADDR=LCDCMD;
- PMDATA=0b00111000;
- TMR1=0; while(TMR1<3); //48us
- PMDATA=0b00001100; //wlacznie wyswietlacza, kursor wylaczony, mruganie wylaczone
- TMR1=0; while(TMR1<3); //48us
- PMDATA=0b00000001; //wyczyszczenie wyswietlacza
- TMR1=0; while(TMR1<100); //1,6ms
- PMDATA=0b00000110; //zwiekszenie kursora bez przesuniecia
- TMR1=0; while(TMR1<100);
- }//LCDinit
- char LCDread(int addr){
- int dummy;
- while(PMMODEbits.BUSY);
- PMADDR=addr;
- dummy=PMDATA;
- while(PMMODEbits.BUSY);
- return (PMDATA);
- } //LCDread
- #define LCDbusy() LCDread(LCDCMD) & 0x80
- #define LCDaddr() LCDread(LCDCMD) & 0x7F
- #define getLCD() LCDread(LCDDATA)
- void LCDwrite(int addr, char c){
- while(LCDbusy());
- while(PMMODEbits.BUSY); //czekamy na PMP, az bedzie dostepne
- PMADDR=addr;
- PMDATA=c;
- }//LCDwrite
- #define putLCD(d) LCDwrite(LCDDATA, (d))
- #define LCDcmd(c) LCDwrite(LCDCMD, (c))
- #define LCDhome() LCDwrite(LCDCMD, 2)
- #define LCDclr() LCDwrite(LCDCMD, 1)
- #define LCDreturn() LCDwrite(LCDCMD, 192)
- void putsLCD(char *s){
- while(*s)
- putLCD(*s++);
- }//putsLCD
- int main(void){
- unsigned long i;
- unsigned long j;
- unsigned long k;
- LCDinit(); //inicjalizacja wyswietlacza
- while(1){ //petla nieskonczona
- for (i=0;i<11;i++)//DZIEN porusza się w prawo, DOBRY w lewo
- {
- LCDclr();
- for (j=0;j<i;j++)
- {
- putsLCD(" ");
- }
- putsLCD("DZIEN");
- LCDreturn();
- for (j=11;j>i;j--)
- {
- putsLCD(" ");
- }
- putsLCD("DOBRY");
- LCDhome();
- for(k=500L*SCALE;k>0;k--)Nop(); //pol sekundy przerwy
- }
- for (i=11;i>0;i--)//DZIEN porusza się w lewo, DOBRY w prawo
- {
- LCDclr();
- for (j=0;j<i;j++)
- {
- putsLCD(" ");
- }
- putsLCD("DZIEN");
- LCDreturn();
- for (j=11;j>i;j--)
- {
- putsLCD(" ");
- }
- putsLCD("DOBRY");
- LCDhome();
- for(k=500L*SCALE;k>0;k--)Nop(); //pol sekundy przerwy
- }
- }//koniec petli niesk.
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement