Dependencies:   TextLCD mbed

main.cpp

Committer:
esmiwa
Date:
2012-06-17
Revision:
0:b28daf92293e

File content as of revision 0:b28daf92293e:

#include  "mbed.h"
#include "TextLCD.h"

#define High 1
#define Low  0

DigitalInOut  D(p15);
DigitalOut  Csb(p16);
DigitalOut  Clk(p17);

DigitalOut myled1(LED1);
DigitalOut myled4(LED4);

TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7

int flag;   //1100 flag data
int i;      //counter

int  x;     //X
int  y;     //Y

//clock out
void  CLK (char a)
{
    Clk=a;
    myled1=a;
    wait_ms(1);
}
//4bit flag reaD.intput()g
int  READ_FLAG ()
{
    flag=0;
    D.input();
    for(i=0;i<4;i++){
        CLK(High);CLK(Low);     //clock down edge
        flag=flag*10;
        flag=flag+D;        //1100 flag reaD.intput()g
    }
    return  flag;
}
//22bit data reaD.intput()g
void XY_DATA ()
{
    x=0;
    D.input();
    for(i=0;i<11;i++){
        CLK(High);CLK(Low);     //clock down edge
        x=x<<1;
        x=x | D;             //X data reaD.intput()g
    }
    y=0;
        for(i=0;i<11;i++){
        CLK(High);CLK(Low);     //clock down edge
        y=y<<1;
        y=y | D;             //Y data reaD.intput()g
    }
}
// reset sign out
void  RESET(void)
{
    D.output();
    CLK(High);D=0;CLK(Low);
    CLK(High);D=0;CLK(Low);
    CLK(High);D=0;CLK(Low);
    CLK(High);D=0;CLK(Low);            
}
//start sign out
void  START(void)
{
    D.output();
    CLK(High);D=1;CLK(Low);
    CLK(High);D=0;CLK(Low);    
    CLK(High);D=0;CLK(Low);    
    CLK(High);D=0;CLK(Low);    
  }

int  READ_END_FLAG(void)
{
    //int d[4];
    flag=0;
    D.output();
    CLK(High);D=1;CLK(Low);
    CLK(High);D=1;CLK(Low);    
    CLK(High);D=0;CLK(Low);    
    CLK(High);D=0;CLK(Low);
    D.input();    
    for(i=0;i<4;i++){
        CLK(High);
        CLK(Low);     //clock down edge
        //d[i]=D;        //1100 flag reaD
        flag=flag<<1;
        flag=flag+D;
        myled4=D ;
    }
    //flag=d[0]*1000+d[1]*100+d[2]*10+d[3];
        return  flag;
}

int main() {
    int cmd=0;
    int dx=0;char *ax;
    int dy=0;char *ay;
    float atn;
 
    while(1){
        //lcd.cls();  
        Csb=1;
        //wait_ms(1);
        Csb=0;
            RESET(); 
        Csb=1;
        //wait_ms(1);
        Csb=0;
            START(); 
        Csb=1;
        wait_ms(30);        //scanning
        Csb=0;
            cmd=READ_END_FLAG();
            XY_DATA();
        
            if(x>1024){ dx=x-2048;ax="-S";}
            else{ dx=x;ax="+N";}
            if(y>1024){ dy=y-2048;ay="-E";}
            else{ dy=y;ay="+W";}
            atn=(float)dy/(float)dx;
        Csb=1;
        lcd.locate(0,0);lcd.printf(" X   Y   ATN");
        lcd.locate(0,1);lcd.printf(" %2s  %2s  %4.2f",ax,ay,atn);
        wait_ms(40);        //LCD dispaying
    }    
}