Цифровые часы C-код / ​​PIC, Protues

В этом семестре я прохожу курс микроконтроллеров, и у меня есть задание сделать цифровые часы с использованием PIC18 и отобразить их на ЖК-дисплее. Мой код написан на C, и я могу его имитировать.

Я написал код, но что-то не так, если кто-нибудь может помочь мне понять мою ошибку. Спасибо.

    #include <P18F4580.h>

#define ldata PORTD
#define rs PORTBbits.RB0
#define rw PORTBbits.RB1
#define en PORTBbits.RB2


void msdelay(unsigned int itime)
{   unsigned int i,j;
    for (i=0; i<itime; i++)
        for (j=0; j<135; j++);
}

void lcdcmd(unsigned char value)
{   ldata = value;
    rs = 0;
    rw = 0;
    en = 1;
    msdelay(1);
    en = 0;
}

void lcddata(unsigned char value)
{   ldata = value;
    rs = 1;
    rw = 0;
    en = 1;
    msdelay(1);
    en = 0;
}

void main()
{
    TRISD = 0;
    TRISB = 0;
    en = 0;

    int msCounter  =0;
    int secCounter =0;
    int minCounter =0;
    int hrCounter  =0;

    msdelay(15);
    lcdcmd(0x01);   //Clear display
    msdelay(15);
    lcdcmd(0x02);   //Home cursor
    msdelay(15);
    lcdcmd(0x06);   //Left to right, still
    msdelay(250);
    lcdcmd(0x0E);   //display cursor
    msdelay(250);
    lcdcmd(0x3C);   //5x10 2 lines
    msdelay(15);
    lcdcmd(0x86);


     while(1)
    {
    msdelay(15);
    lcdcmd(0x08);
    lcddata(secCounter);

        msdelay(15);
        msCounter++;

        if (msCounter==1000)
        {secCounter++;      msCounter=0;    }
        if (secCounter==60)
        {minCounter++;      secCounter=0;   }
        if (minCounter==60)
        {hrCounter++;       minCounter=0;   }
        if (hrCounter==24)
        {hrCounter=0;                       }

        msdelay(15);
        lcddata(hrCounter);
        msdelay(15);
        lcddata(':');
        msdelay(15);
        lcddata(minCounter);
        msdelay(15);
        lcddata(':');
        msdelay(15);
        lcddata(secCounter);
    }
}

person Haneen Alkhateeb    schedule 08.05.2015    source источник
comment
что-то не так! Что случилось? Что происходит, что не происходит? Он компилируется? Это работает? Отображает время? Время неправильное? Он загорается??   -  person Weather Vane    schedule 08.05.2015


Ответы (2)


Лучше отображать цифровые часы на 7-сегментном дисплее, чем на ЖК-дисплее.

person Sathishkumar Jayaraj    schedule 11.05.2015

используйте этот код в своей программе и проверьте... для lcddata(mscounter);

           use *thous(mscounter);*

объявите это в коде и проверьте lcdcmd(0x08); вместо этого используйте lcdcmd(0x80);

         void thous(unsigned int count)
                   {
            lcddata((count/1000)+0x30);
             lcddata(((count/100)%10)+0x30);
                lcddata(((count%100)/10)+0x30);
                lcddata((count%10)+0x30);

           }
person Bk Francis    schedule 11.05.2015