Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include  "mbed.h"
00002 #include "TextLCD.h"
00003 
00004 #define High 1
00005 #define Low  0
00006 
00007 DigitalInOut  D(p15);
00008 DigitalOut  Csb(p16);
00009 DigitalOut  Clk(p17);
00010 
00011 DigitalOut myled1(LED1);
00012 DigitalOut myled4(LED4);
00013 
00014 TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7
00015 
00016 int flag;   //1100 flag data
00017 int i;      //counter
00018 
00019 int  x;     //X
00020 int  y;     //Y
00021 
00022 //clock out
00023 void  CLK (char a)
00024 {
00025     Clk=a;
00026     myled1=a;
00027     wait_ms(1);
00028 }
00029 //4bit flag reaD.intput()g
00030 int  READ_FLAG ()
00031 {
00032     flag=0;
00033     D.input();
00034     for(i=0;i<4;i++){
00035         CLK(High);CLK(Low);     //clock down edge
00036         flag=flag*10;
00037         flag=flag+D;        //1100 flag reaD.intput()g
00038     }
00039     return  flag;
00040 }
00041 //22bit data reaD.intput()g
00042 void XY_DATA ()
00043 {
00044     x=0;
00045     D.input();
00046     for(i=0;i<11;i++){
00047         CLK(High);CLK(Low);     //clock down edge
00048         x=x<<1;
00049         x=x | D;             //X data reaD.intput()g
00050     }
00051     y=0;
00052         for(i=0;i<11;i++){
00053         CLK(High);CLK(Low);     //clock down edge
00054         y=y<<1;
00055         y=y | D;             //Y data reaD.intput()g
00056     }
00057 }
00058 // reset sign out
00059 void  RESET(void)
00060 {
00061     D.output();
00062     CLK(High);D=0;CLK(Low);
00063     CLK(High);D=0;CLK(Low);
00064     CLK(High);D=0;CLK(Low);
00065     CLK(High);D=0;CLK(Low);            
00066 }
00067 //start sign out
00068 void  START(void)
00069 {
00070     D.output();
00071     CLK(High);D=1;CLK(Low);
00072     CLK(High);D=0;CLK(Low);    
00073     CLK(High);D=0;CLK(Low);    
00074     CLK(High);D=0;CLK(Low);    
00075   }
00076 
00077 int  READ_END_FLAG(void)
00078 {
00079     //int d[4];
00080     flag=0;
00081     D.output();
00082     CLK(High);D=1;CLK(Low);
00083     CLK(High);D=1;CLK(Low);    
00084     CLK(High);D=0;CLK(Low);    
00085     CLK(High);D=0;CLK(Low);
00086     D.input();    
00087     for(i=0;i<4;i++){
00088         CLK(High);
00089         CLK(Low);     //clock down edge
00090         //d[i]=D;        //1100 flag reaD
00091         flag=flag<<1;
00092         flag=flag+D;
00093         myled4=D ;
00094     }
00095     //flag=d[0]*1000+d[1]*100+d[2]*10+d[3];
00096         return  flag;
00097 }
00098 
00099 int main() {
00100     int cmd=0;
00101     int dx=0;char *ax;
00102     int dy=0;char *ay;
00103     float atn;
00104  
00105     while(1){
00106         //lcd.cls();  
00107         Csb=1;
00108         //wait_ms(1);
00109         Csb=0;
00110             RESET(); 
00111         Csb=1;
00112         //wait_ms(1);
00113         Csb=0;
00114             START(); 
00115         Csb=1;
00116         wait_ms(30);        //scanning
00117         Csb=0;
00118             cmd=READ_END_FLAG();
00119             XY_DATA();
00120         
00121             if(x>1024){ dx=x-2048;ax="-S";}
00122             else{ dx=x;ax="+N";}
00123             if(y>1024){ dy=y-2048;ay="-E";}
00124             else{ dy=y;ay="+W";}
00125             atn=(float)dy/(float)dx;
00126         Csb=1;
00127         lcd.locate(0,0);lcd.printf(" X   Y   ATN");
00128         lcd.locate(0,1);lcd.printf(" %2s  %2s  %4.2f",ax,ay,atn);
00129         wait_ms(40);        //LCD dispaying
00130     }    
00131 }