2015-05-08 3 views
0

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

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

#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); 
    } 
} 
+0

* "что-то не так" *! Что не так? Что происходит, чего не бывает? Скомпилирует ли он? Это работает? Отображает ли оно время? Неправильно ли время? Он загорается? –

ответ

0

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

0

используйте этот код в вашей программе и проверьте ... для 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); 

      }