Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
10/30/05 17:21
Read: times


 
#103141 - Andy's Code, colored !!
Responding to: ???'s previous message
Just did some googling and found an online version of syntax highlighter at:

http://www.chamisplace.com/colorizer/cc.asp

Andy, I saw those posts of Jez through the links you gave. Amazingly, they dated 2003!

Well, how about 'integrating' the coloring mechanisms with messaging posting process? We can have an option of 'Syntax Highlighted Preview', just before posting..

Regards,
Vignesh
#include <REG52.H>

// EXAMPLE Port & Pin definitions to match the 8052.com Tutorial
sbit LCD_EN = P3^7;
sbit LCD_RS = P3^6;

sbit LCD_RW = P3^5;
#define LCD_PORT P0

// Funtion prototype
void lcd_data(unsigned char dat);


/*
 * this routine displays the supplied 8-bit unsigned number
 * in hexadecimal notation.
 *
 * The hexadecimal display is achieved by sending two ASCII-coded
 * characters to the LCD; eg the number 0xA4 is displayed by sending 
 * a '4' character followed by an 'A' character.
 */ 
void hex2lcd( unsigned char number ) 
{ 
  unsigned char MSD; // used to extract the Most-Significant  (MS) Hex Digit of the number

  unsigned char LSD; // used to extract the Least-Significant (LS) Hex Digit of the number

  MSD = (number&0xf0) >>4; // extract the MS Hex Digit; ie the top 4 bits

  LSD = (number&0x0f);     // extract the LS Hex Digit; ie the bottom 4 bits

  // First, obtain the character to represent the MS Hex digit
  // Note that the conversion differs slightly depending on whether the value is 0x0-0x9 or 0xA-0xF
  if( MSD < 0xA )

  { 
	// The MS Digit is less than 0xA; ie it is in the range 0x0-0x9
	// Convert it to the corresponding ASCII character code '0' to '9'.
	// This conversion is easy, as we just have to add the value of the digit, 0x0-0x9,
	// to the value of the ASCII code for a '0' character
    MSD += '0'; 
  }

  else 
  {
	// The MS Digit is not less than 0xA; ie it is in the range 0xA-0xF
	// Convert it to the corresponding ASCII character code 'A' to 'F'
	// This conversion is slightly more complicated, as the values we are converting
	// are in the range 0xA-0xF; so we cannot simply add the value to be converted
	// to the ASCII code for an 'A' character - hence the subtraction of 0xA
	// (note that a decent compiler will do the subtraction at compile-time, and 

	//  will not generate code to work it out every time this line is executed!)
    MSD += ('A' - 0xA); 
  }

  // Now obtain the character to represent the LS Hex digit
  // The process is exactly the same as for the MS digit
  // Note that, since we have the MS and LS Digits in separate variables, it doesn't
  // matter in which order we convert the digits.
  if( LSD < 0xA )

  { 
    LSD += '0'; 
  }
  else 
  {

    LSD += ('A' - 0xA); 
  }

  // Now send the two characters forming the hex representation to the display

  // Note that it is now important that we send them in the correct order!
  lcd_data( MSD ); 
  lcd_data( LSD ); 

} 

/*
 * this routine displays the supplied 8-bit unsigned number
 * in decimal notation, with leading zeros; ie "000" to "255"
 *
 * The decimal display is achieved by sending three ASCII-coded
 * characters to the LCD; eg the number 0x78 (123 decimal) is displayed by 
 * sending  a '1' character followed by a '2' character followed by a '3' character.
 */ 
void dec2lcd(unsigned char number) 
{ 
  unsigned char h=0; // used to extract the "hundreds" Digit of the number in decimal notation

  unsigned char t=0; // used to extract the "tens"     Digit of the number in decimal notation

  // First, determine the number of "hundreds" in the number.
  // We do this by repeatedly subtracting 100 until the number falls below 100, 
  // and counting how many times we subtracted 100

  while( number >= 100 ) 
  { 
    number -= 100; 
    h++; 			// Count another "hundred"

  } 

  // The number now has no "hundreds" - either it had none to start with, or
  // they have all just been subtracted. 
  // Next, determine the number of "tens" in the number.
  // Again, we do this by repeatedly subtracting 10 until the number falls below 10, 
  // and counting how many times we subtracted 10
  while(number>=10) 
  { 
    number -= 10; 
    t++; 
  } 

  // The number now has no "hundreds" and no "tens" - either it had none to start with, or

  // they have all just been subtracted. 
  // All that is now left is the units!
  // Now send the 3 digits - "hundreds", "tens", and "units" - to the display as ASCII-Coded
  // Characters.
  // Because each digit must be in the range 0-9, the corresponding ASCII code is found by
  // adding the digit value to the value of the ASCII code for a '0' character 
  lcd_data(      h + '0' ); // hundreds

  lcd_data(      t + '0' ); // tens
  lcd_data( number + '0' ); // units (remember: number was left containing just units)

} 

/* 
 * This Routine sends the supplied byte to the LCD
 *
 * Note that you must supply appropriate definitions for the port pins
 * used by the LCD, and these must be bit-addressable
 *
 * Note also that the LCD must be properly initialised, and the control lines
 * in their proper states,  before calling this function.
 *
 * Note also that a software delay loop is used to set the length of the
 * Enable pulse - YOU WILL ALMOST CERTAINLY NEED TO MODIFY THIS TO MATCH
 * YOUR PARTICULAR CLOCK FREQUENCY, CHIP INSTRUCTION TIMINGS, COMPILER
 * SETTINGS, etc. (in fact, it would be better to write a separate assembler
 * delay routine).
 *
 */
void lcd_data( unsigned char dat) 
{ 
  unsigned char a; // Loop counter for the delay loop - YOU MAY NEED TO MODIFY THIS!


  LCD_RS=1;           // Set the Register Select line high indicating data for display
  LCD_RW=0; 		  // Set the Read/Write line low indicating a Write to the display
  LCD_PORT=( dat );   // Write the supplied byte to the LCD port


  // Now pulse the Enable line so that the LCD will see the data
  LCD_EN=1; 		      // Set the EN line high
  for( a=0; a<0xf; a++ ); // Pause a while - YOU WILL NEED TO MODIFY THIS!

  LCD_EN=0; 		      // Set the EN line low
} 



List of 30 messages in thread
TopicAuthorDate
LCD drivers in C            01/01/70 00:00      
   beginners??            01/01/70 00:00      
   well intended, useless            01/01/70 00:00      
      freebie code            01/01/70 00:00      
   Reformatted your code.            01/01/70 00:00      
      you don't get it do you            01/01/70 00:00      
      Something positive??            01/01/70 00:00      
      Here it is            01/01/70 00:00      
         Text Processor            01/01/70 00:00      
            Syntax highlighter            01/01/70 00:00      
               Syntax Colouring            01/01/70 00:00      
                  The trick            01/01/70 00:00      
                     Colouring tips            01/01/70 00:00      
                     Specified by the poster            01/01/70 00:00      
         Andy's Code, colored !!            01/01/70 00:00      
   Atta Boy, Andy.            01/01/70 00:00      
      One thing to note            01/01/70 00:00      
         Thanks to ANDY            01/01/70 00:00      
         I2C-driver            01/01/70 00:00      
            SDCC 2.3 ?            01/01/70 00:00      
            Please do not            01/01/70 00:00      
   LCD code in C            01/01/70 00:00      
      Library Code            01/01/70 00:00      
         Useful or not.            01/01/70 00:00      
            as useful as the other 22.111 versions            01/01/70 00:00      
               Delay loop in C            01/01/70 00:00      
                  More on 'C' delay loops...            01/01/70 00:00      
                     Correct me if I am wrong            01/01/70 00:00      
                        Not wrong about busy polling            01/01/70 00:00      
            Ask yourself this            01/01/70 00:00      

Back to Subject List