Você está na página 1de 4

#include <msp430g2231.

h>

#define HOUR 0
#define MIUTE 1
#define SECOND 2

// uC Port definitions
#define lcd_port P1OUT
#define lcd_port_dir P1DIR

// LCD Registers masks based on pin in which it is connected


#define LCD_EN BIT4
#define LCD_RS BIT5

int hora[3]={0,0,0};
char s1[7],s2[7];
int horadec,horauni,mindec,minuni,segdec,secuni;

void lcd_reset()
{
int i ;
lcd_port_dir = 0xff; // output mode
lcd_port = 0xff;
__delay_cycles(20000);

for (i=1;i<=3;i++)
{
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
__delay_cycles(10000);
}

lcd_port = 0x02+LCD_EN;
lcd_port = 0x02;
__delay_cycles(1000);
}

void lcd_cmd (char cmd)


{
// Send upper nibble
lcd_port = ((cmd >> 4) & 0x0F)|LCD_EN; //0x28=0010 1000 >> 4= 0000 0010
=0x02| bit4= 0001 0010
lcd_port = ((cmd >> 4) & 0x0F);

// Send lower nibble


lcd_port = (cmd & 0x0F)|LCD_EN; //0x28&0x0f=0010 1000 & 00001111 =0x08|bit4
lcd_port = (cmd & 0x0F);

__delay_cycles(4000);
}
void lcd_data (unsigned char dat)
{
// Send upper nibble
lcd_port = (((dat >> 4) & 0x0F)|LCD_EN|LCD_RS);
lcd_port = (((dat >> 4) & 0x0F)|LCD_RS);

// Send lower nibble


lcd_port = ((dat & 0x0F)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0x0F)|LCD_RS);

__delay_cycles(4000); // a small delay may result in missing char display


}

void Bilder(unsigned char *image, unsigned char offset)


{
unsigned char i;

lcd_cmd(0x40+((offset-1)*8)); //Load the location where we want to store


for (i=0;i<8;i++)
{
lcd_data(image[i]);
//lcd_cmd(0x02);

}
lcd_cmd(0x80);
}

void lcd_init ()
{
lcd_reset(); // Call LCD reset
lcd_cmd(0x01); // Clear screen
lcd_cmd(0x38); // 2 line 5x7 matrix
lcd_cmd(0x28); // 4-bit mode - 2 line - 5x7 font.
lcd_cmd(0x06); // Automatic Increment - No Display shift.
lcd_cmd(0x0f); // Display no cursor - no blink.
lcd_cmd(0x80); // Address DDRAM with 0 offset 80h.

void display_line(char *line,int row,int col)


{
switch (row)
{
case 1:
if((col<=16) &&(col!=0))
{
lcd_cmd(0x80+(col-1));
}
else
{
lcd_cmd(0xc0);
}

break;
case 2 :
if((col<=16) &&(col!=0))
{
lcd_cmd(0xc0+(col-1));
}
else
{
lcd_cmd(0xc0);
}
break;
default:
lcd_cmd (0x80);
}
while (*line)
lcd_data(*line++);
}

void main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Detiene Watchdog


// P1DIR |= BIT0; // P1.0 salida
//P1OUT |= BIT0; // Enciende LED
lcd_init();

// Configuraci�n TIMER_A:
// TimerA1, ACLK/1,modo up, reinicia TACLR
// TACTL = TASSEL_1 | TACLR | MC_1;
// ACLK tiene una frecuencia de 32768 Hz
// Carga cuenta en TA1CCR0 0.1seg TA1CCR=(0,1*32768)-1
// TACCR0 = 32768;
//TACCTL0 = CCIE; // Habilita interrupci�n (bit CCIE)
// LPM0, habilitaci�n general de interrupciones

display_line("cesar :)",1,4);
display_line("hora: ",2,4);

while(1)
{
horadec=hora[0]/10;
s1[0]=(char)(horadec+48);
horauni=hora[0]%10;
s1[1]=(char)(horauni+48);

mindec=hora[1]/10;
s1[3]=(char)(mindec+48);

minuni=hora[1]%10;
s1[4]=(char)(minuni+48);

segdec=hora[2]/10;
s1[5]=(char)(segdec+48);

secuni=hora[2]%10;
s1[6]=(char)(secuni+48);
// __low_power_mode_0();
// __no_operation();
}
}
/*
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void){

//P1OUT ^= 0x01; // conmuta LED en P1.0

//display_line(&s1[0],2,6);

hora[2]=hora[2]+1;
if ( hora[2] ==59)
{
hora[2]=0;
hora[1]=hora[1]+1;
if(hora[1]==59)
{
hora[1]=0;
hora[0]=hora[0]+1;
if(hora[0]==25)
{
hora[0]=0;
hora[1]=0;
hora[2]=0;
}
}
}

}
*/

http://xanthium.in/msp430-launchpad-adc10-configuration-tutorial

Você também pode gostar