aneeshere
Junior Member level 1
Hi,
I am trying to make a digital clock using timer1 of my pic and display it on my lcd screen. I have written a 100% working code and even simulated successfully using proteus. When I implemented by circuit on hardware the lcd shows nothing but 16 black boxes on the first line only.
is it because of the delay problem?
Am using a 4Mhz crystal with two 33pf capacitors
The source code is
....................................................................................................................
unsigned short hour;
unsigned short minute;
unsigned short sec;
unsigned short date;
unsigned short month;
unsigned short year;
unsigned short temp;
char time[9];
char ddate[11];
unsigned char dec2UpperCh(unsigned char bcd);
unsigned char dec2LowerCh(unsigned char bcd);
void main()
{
TRISB = 0;
PORTB=0;
Lcd_Init(&PORTB);
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
T1CON=0X15;
TMR1H=0X0B;
TMR1L=0XDC;
INTCON=0XC0;
PIE1.TMR1IE=1;
temp=0;
hour=12;
minute=10;
sec=00;
date=03;
month=07;
year=10;
Lcd_Out(1,1,"Time:");
Lcd_Out(2,1,"Date:");
while(1)
{
time[0]=dec2upperch(hour);
time[1]=dec2lowerch(hour);
time[2]=':';
time[3]=dec2upperch(minute);
time[4]=dec2lowerch(minute);
time[5]=':';
time[6]=dec2upperch(sec);
time[7]=dec2lowerch(sec);
time[8]='\0';
ddate[0]=dec2upperch(date);
ddate[1]=dec2lowerch(date);
ddate[2]='/';
ddate[3]=dec2upperch(month);
ddate[4]=dec2lowerch(month);
ddate[5]='/';
ddate[6]='2';
ddate[7]='0';
ddate[8]=dec2upperch(year);
ddate[9]=dec2lowerch(year);
ddate[10]='\0';
Lcd_Out(1,6,time);
Lcd_Out(2,6,ddate);
Delay_ms(500);
}
}
void interrupt(void)
{
if(PIR1.TMR1IF)
{
PIR1.TMR1IF=0;
TMR1H=0X0B;
TMR1L=0XDC;
temp++;
if(temp==2)
{
sec++;
temp=0;
}
if(sec==60)
{
minute++;
sec=00;
}
if(minute==60)
{
hour++;
minute=00;
}
if(hour==24)
{
date++;
hour=00;
}
if(date==30)
{
month++;
date=01;
}
if(month==12)
{
year++;
month=00;
}
}
}
unsigned char dec2UpperCh(unsigned char dec)
{
return ( (dec/10) + '0');
}
unsigned char dec2LowerCh(unsigned char dec)
{
return ( (dec%10) + '0');
}
I am trying to make a digital clock using timer1 of my pic and display it on my lcd screen. I have written a 100% working code and even simulated successfully using proteus. When I implemented by circuit on hardware the lcd shows nothing but 16 black boxes on the first line only.
is it because of the delay problem?
Am using a 4Mhz crystal with two 33pf capacitors
The source code is
....................................................................................................................
unsigned short hour;
unsigned short minute;
unsigned short sec;
unsigned short date;
unsigned short month;
unsigned short year;
unsigned short temp;
char time[9];
char ddate[11];
unsigned char dec2UpperCh(unsigned char bcd);
unsigned char dec2LowerCh(unsigned char bcd);
void main()
{
TRISB = 0;
PORTB=0;
Lcd_Init(&PORTB);
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
T1CON=0X15;
TMR1H=0X0B;
TMR1L=0XDC;
INTCON=0XC0;
PIE1.TMR1IE=1;
temp=0;
hour=12;
minute=10;
sec=00;
date=03;
month=07;
year=10;
Lcd_Out(1,1,"Time:");
Lcd_Out(2,1,"Date:");
while(1)
{
time[0]=dec2upperch(hour);
time[1]=dec2lowerch(hour);
time[2]=':';
time[3]=dec2upperch(minute);
time[4]=dec2lowerch(minute);
time[5]=':';
time[6]=dec2upperch(sec);
time[7]=dec2lowerch(sec);
time[8]='\0';
ddate[0]=dec2upperch(date);
ddate[1]=dec2lowerch(date);
ddate[2]='/';
ddate[3]=dec2upperch(month);
ddate[4]=dec2lowerch(month);
ddate[5]='/';
ddate[6]='2';
ddate[7]='0';
ddate[8]=dec2upperch(year);
ddate[9]=dec2lowerch(year);
ddate[10]='\0';
Lcd_Out(1,6,time);
Lcd_Out(2,6,ddate);
Delay_ms(500);
}
}
void interrupt(void)
{
if(PIR1.TMR1IF)
{
PIR1.TMR1IF=0;
TMR1H=0X0B;
TMR1L=0XDC;
temp++;
if(temp==2)
{
sec++;
temp=0;
}
if(sec==60)
{
minute++;
sec=00;
}
if(minute==60)
{
hour++;
minute=00;
}
if(hour==24)
{
date++;
hour=00;
}
if(date==30)
{
month++;
date=01;
}
if(month==12)
{
year++;
month=00;
}
}
}
unsigned char dec2UpperCh(unsigned char dec)
{
return ( (dec/10) + '0');
}
unsigned char dec2LowerCh(unsigned char dec)
{
return ( (dec%10) + '0');
}