igmarin
9/3/2017 - 4:31 AM

Main ejemplo LCD

Main ejemplo LCD



#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      // Definiciones de la familia del micro 
#include <mc9s12c32.h>       /******* Definiciones específicas del micro *******/
#include "LCD.H"
#include "PLL.H"


#pragma LINK_INFO DERIVATIVE "mc9s12c32"

void TimerInit(void){
  DDRT  = 0x01;   // PT.0 como salida (LED), PT.1 y PT2 como entradas (Switch)
  DDRA  = 0x01;    // PA.0 como salida (LED)
  DDRB  = 0x04;    // PB.4 como salida (LED)
  TSCR1 = 0x80;   // Enable TCNT, 24MHz in both boo tand run modes
  TSCR2 = 0x04;   // divide by 16 TCNT prescale, TCNT at 667nsec
  PACTL = 0;      // timer prescale used for TCNT
/* Bottom three bits of TSCR2 (PR2,PR1,PR0) determine TCNT period
    divide  24MHz E clock    
000   1     42ns  TOF  2.73ms  
001   2     84ns  TOF  5.46ms   
010   4    167ns  TOF  10.9ms       
011   8    333ns  TOF  21.8ms 	 
100  16    667ns  TOF  43.7ms 	 
101  32   1.33us  TOF  87.4ms		 
110  64   2.67us  TOF 174.8ms   
111 128   5.33us  TOF 349.5ms    */ 
// Be careful, TSCR1 and TSCR2 maybe set in other rituals
}

//---------------------mwait---------------------
// wait specified number of msec
// Input: number of msec to wait
// Output: none
// assumes TCNT timer is running at 667ns
void mwait(unsigned short msec){ 
unsigned short startTime;
  for(; msec>0; msec--){
    startTime = TCNT;
    while((TCNT-startTime) <= 1500){} 
  }
}

//---------------------check---------------------
// if LCD broken toggle LED1 at 2Hz
// Input: last LCD status, 0 means bad
// Output: none
// Error: if status is zero, this function will not return
void check(short status){	 // 0 if LCD is broken
  if(status ==0){		   
    for(;;) {
      PORTA ^= 0x01;   // fast toggle LEDA
      mwait(250);    // 0.25 sec wait
    }
  }
}
//---------------------swait---------------------
// wait specified 2 sec, then clear LCD
// Input: none
// Output: none
// uses mswait and TCNT timer
void swait(void){			
  PORTB ^= 0x04;     // toggle LEDB
  mwait(2000);     // 2 sec wait
  check(LCD_Clear());
}

//---------------------blank---------------------
// move cursor to second half of LCD display
// 32 spaces from address 08 to 40
// Input: none
// Output: none
void blank(void){
  check(LCD_OutString("                        "));
}

void main(void) {
 // unsigned char cont;
  PLL_Init();       // set E clock to 24 MHz
  TimerInit();      // enable Port T 
  check(LCD_Open(LCDINC+LCDNOSHIFT,
    LCDNOCURSOR+LCDNOBLINK,
    LCDNOSCROLL+LCDLEFT,
    LCD2LINE+LCD7DOT));
  check(LCD_OutString("9S12C32         ")); blank();
  check(LCD_OutString("Valvano         ")); swait();
 //asm cli   // allows debugger to run
  for(;;) {
 /*  if ( (PTT & 0x02) != 0){
      if (cont<15){
         cont++;   
          mwait(50); ;
    } else if (cont>16){
              cont = 0;
              mwait(50);
    }
   }
    
   if ( (PTT & 0x04) != 0){
      if (cont>0){
         cont--;   
         mwait(50);
    } else if (cont<0){
              cont = 15;
              mwait(50);
    }
   }   */
    //check(LCD_OutString("ABCDEFGH  "));
    //short(LCD_OutDec(unsigned char *cont)); 
    //blank();
    check(LCD_OutString("IJKLMNOP 1 1 1 1")); swait();
    check(LCD_OutString("01234567 2 2 2 2")); blank();
    check(LCD_OutString("890,./<> 3 3 3 3")); swait();
    check(LCD_OutString("abcdefgh 4 4 4 4")); blank();
    check(LCD_OutString("ijklmnop 5 5 5 5")); swait();
    check(LCD_OutString("!@#$%^&* 6 6 6 6")); blank();
    check(LCD_OutString("()_+-=[] 7 7 7 7")); swait();
  } 
}