4bit Adder

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

#include <msp430g2553.

h>
#define EN BIT6
#define RS BIT7
void
void
void
void
void
void

waitlcd(unsigned int x);


lcdinit(void);
integerToLcd(int integer);
lcdData(unsigned char l);
prints(char *s);
gotoXy(unsigned char x, unsigned char y);

void lcdcmd(unsigned char Data)


{
P1OUT &= ~RS; //Sending command
P1OUT &= ~EN;
P2OUT &= 0xF0 << 2;
P2OUT |= ((Data >> 4) & 0x0F) << 2;
P1OUT |= EN;
waitlcd(2);
P1OUT &= ~EN;
P2OUT &= 0xF0 << 2;
P2OUT |= (Data & 0x0F) << 2;
P1OUT |= EN;
waitlcd(2);
P1OUT &= ~EN;
}
void lcdData(unsigned char l)
{
P1OUT |= RS; //Sending data
P1OUT &= ~EN;
P2OUT &= 0xF0 << 2;
P2OUT |= (((l >> 4) & 0x0F) << 2);
P1OUT |= EN;
waitlcd(1);
P1OUT &= ~EN;
P2OUT &= 0xF0 << 2;
P2OUT |= ((l & 0x0F) << 2);
P1OUT |= EN;
waitlcd(1);
P1OUT &= ~EN;
}
void lcdinit(void)
{
P1OUT &= ~RS;
P1OUT &= ~EN;
P2OUT |= 0x03 << 2;
waitlcd(40);
P1OUT |= EN;
P1OUT &= ~EN;
waitlcd(5);
P1OUT |= EN;
P1OUT &= ~EN;
waitlcd(5);
P1OUT |= EN;
P1OUT &= ~EN;
waitlcd(2);
P2OUT &= 0xF2 << 2;

//Upper Nibble

//Lower Nibble

//Upper Nibble

//Lower Nibble

//
//Wait Cycles

P1OUT |= EN;
P1OUT &= ~EN;
lcdcmd(0x28); // 4 bit 2 line MODE
waitlcd(250);
lcdcmd(0x0E); // Display on cursor on blink on
waitlcd(250);
lcdcmd(0x01); // Clear LCD
waitlcd(250);
lcdcmd(0x06); // Cursor shift direction
waitlcd(250);
lcdcmd(0x80); // Set RAM Address
waitlcd(250);
prints("RF Keyboard");
gotoXy(0,1);
}
void waitlcd(volatile unsigned int x)
{
volatile unsigned int i;
for (x ;x>1;x--)
{
for (i=0;i<=55;i++);
}
}
void prints(char *s)
{
while (*s)
{
lcdData(*s);
s++;
}
}
void gotoXy(unsigned char x ,unsigned char y)
{
if(x<40)
{
if(y)
x |= 0x40;
x |= 0x80;
lcdcmd(x);
}
}
// Keyboard
unsigned char temp='0';
unsigned int keys[80][2]={
0x0d,9,
0x0e,0x60,
0x15,'q',
0x16,'1',
0x1a,'z',
0x1b,'s',
0x1c,'a',
0x1d,'w',
0x1e,'2',
0x21,'c',
0x22,'x',

0x23,'d',
0x24,'e',
0x25,'4',
0x26,'3',
0x29,' ',
0x2a,'v',
0x2b,'f',
0x2c,'t',
0x2d,'r',
0x2e,'5',
0x31,'n',
0x32,'b',
0x33,'h',
0x34,'g',
0x35,'y',
0x36,'6',
0x3a,'m',
0x3b,'j',
0x3c,'u',
0x3d,'7',
0x3e,'8',
0x41,',',
0x42,'k',
0x43,'i',
0x44,'o',
0x45,'0',
0x46,'9',
0x49,'.',
0x4e,'-',
0x4b,'l',
0x4c,';',
0x4d,'p',
0x52,39,
0x54,'[',
0x55,'=',
0x5a,13,
0x5b,']',
0x5d,93,
0x61,'<',
0x66,8,
0x69,'1',
0x6b,'4',
0x6c,'7',
0x70,'0',
0x71,'.',
0x72,'2',
0x73,'5',
0x74,'6',
0x75,'8',
0x76,'E',
0x79,'+',
0x7a,'3',
0x7b,'-',
0x7c,'*',
0x7d,'9',
0,0
};
int readkey();
void if_clock_low();

int ct = 0;
void get_msg()
{
while(temp!=0x0D)
//Until + key is pressed
{
int limit=0;
int b = readkey();
if (b == 0xF0)
{
b = readkey();
}
else
{
while(limit<80)
{
if(b==keys[limit][0])
{
temp = keys[limit][1];
if (temp == 'E')
lcdinit();
else
{
++ct;
if (ct > 15)
{
ct = 0;
lcdinit();
}lcdData(temp);
}
}
limit++;
}
}
}
}
int
{
int
int
int

readkey()
_start = 0;
_bit = 0;
c,temp;

if_clock_low();
_start = P2IN&BIT1;
if (_start == 0)
{
if_clock_low();
for ( c=0; c<8; c++)
{
temp = (P2IN&BIT1)>>1;
_bit = _bit | (temp<< c);
if_clock_low();
}
if_clock_low();
}
return _bit;
}
void if_clock_low()

{
if ((P2IN&BIT0) == 0)
while ((P2IN&BIT0) == 0);
while ((P2IN&BIT0) == BIT0);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR = 0xC0;
P2DIR = 0x3C;
P1OUT &= ~0xC0;
P2OUT &= ~0x3C;
lcdinit();
get_msg();
while(1);
}

You might also like