rendered paste body// Tyler Johnson
// E4-2
// October 18/07
// Display the Date and Time centered on the LCD display
void write_control(char);
void write_data(char);
void init_lcd();
main()
{
struct tm datetime;
char stime[10];
char date[10];
char lt, ld, tpos, dpos;
char i;
char bw;
WrPortI(SPCR, &SPCRShadow, 0x84); // disable slave port
WrPortI(PADR, &PADRShadow, 0x00); // set to zero
// init the lcd display!
init_lcd();
while(1)
{
costate
{
//write_control(0x01);
tm_rd(&datetime);
//printf("%d:%d:%d\n", datetime.tm_hour, datetime.tm_min, datetime.tm_sec);
if (datetime.tm_sec <= 9)
lt = sprintf(stime, "%d:%d:0%d", datetime.tm_hour, datetime.tm_min, da
else
lt = sprintf(stime, "%d:%d:%d", datetime.tm_hour, datetime.tm_min, datetime.tm_sec);
//if (datetime.tm_
ld = sprintf(date, "%d/%d/%d", datetime.tm_mday, datetime.tm_mon, (datetime.tm_year + 1900));
//printf("wrote #%d bits\n", bw);
// = strlen(time); printf("length is: %d\n", lt);
// = strlen(date);
tpos = (8 - (lt/2)) | 0x80; printf("0x%x\n", tpos);
dpos = (8 - (ld/2)) | 0xC0; printf("0x%x\n", dpos);
write_control(tpos);
//waitfor(DelayMs(2));
for (i=0;i<lt;i++)
write_data(stime[i]);
printf("time:%s\n", stime);
write_control(dpos);
//waitfor(DelayMs(2));
for (i=0;i<ld;i++)
write_data(date[i]);
printf("date:%s\n", date);
write_control(0xCF);
waitfor(DelaySec(1));
}// end costate
} // end while
} // end main
void init_lcd()
{
char go;
go = 1;
while (go)
{
costate
{
waitfor(DelayMs(16));
write_control(0x30);
waitfor(DelayMs(5));
write_control(0x30);
waitfor(DelayMs(1));
write_control(0x30);
write_control(0x20);
write_control(0x0C);
write_control(0x01);
waitfor(DelayMs(3));
go = 0;
//break;
} // end costate
} // end while
}
void write_control(char cv)
{
char ln, hn;
ln = (cv & 0x0F) << 4;
hn = (cv & 0xF0) ;
WrPortI(PADR, &PADRShadow, hn );
WrPortI(PADR, &PADRShadow, (hn | 0x08));
WrPortI(PADR, &PADRShadow, (hn & 0xF0));
WrPortI(PADR, &PADRShadow, ln );
WrPortI(PADR, &PADRShadow, (ln | 0x08));
WrPortI(PADR, &PADRShadow, (ln & 0xF0));
} // end write_control
void write_data(char dv)
{
char ln, hn;
ln = (dv & 0x0F) << 4; // AND lower 4 bits, then shift 4 bit positions to the left
hn = (dv & 0xF0) ; // AND higher 4 bits.
WrPortI(PADR, &PADRShadow, (hn | 0x04));
WrPortI(PADR, &PADRShadow, (hn | 0x0C));
WrPortI(PADR, &PADRShadow, (hn & 0x04));
WrPortI(PADR, &PADRShadow, (ln | 0x04));
WrPortI(PADR, &PADRShadow, (ln | 0x0C));
WrPortI(PADR, &PADRShadow, (ln & 0x04));
} // end write_data
write_control(0x0C);
write_control(0x01);
waitfor(DelayMs(3));