All pastes #801798 Raw Edit

Someone

public text v1 · immutable
#801798 ·published 2007-11-29 16:30 UTC
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));