電子指南針.doc_第1頁
電子指南針.doc_第2頁
電子指南針.doc_第3頁
電子指南針.doc_第4頁
電子指南針.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

有疑問聯(lián)系QQ286339554#include #include #include #define uchar unsigned char#define uint unsigned int #define RELOAD 0Xfd /2400 11.0592M 1T SMOD=0 2400 ?#define MMC2122_address 0x68 /2212 #define ENABLE_IAP 0X83sbit com1=P32;sbit com2=P33;sbit com3=P16;sbit com4=P17;sbit sda=P37;sbit scl =P27;sbit txd =P31;sbit G2 =P14;sbit DP =P15;uchar flag=0; /uchar flag1=0;uchar adjust_flag=2;float gcos=0;float gsin=0;float angle_cos=0;float angle_sin=0;float angle =0;unsigned char cunchu1;unsigned char cunchu2;unsigned char cunchu3;unsigned char cunchu4;unsigned char cunchu5;uchar calibarte_flag=0;int Maxx;int Minx;int Maxy;int Miny;int x,y;int x_max=0;int x_min=5000;int y_max=0;int y_min=5000;int xxyy_max=0;int xxyy_min=5000;int disturb_x=0; /int disturb_y=0; /void calibrate_mmc2122();void Port_initial(void) P1M0=0X00; P1M1=0XFF;P2M0=0X00;/0X80; P2M1=0XFF; com1=1;com2=1;com3=1;com4=1;void Serial_inial()SCON = 0X50;/8 BIT variable b rate no odd checkTMOD = 0X21; /TIMER1 8-AUTORELOAD TH1 = RELOAD;TL1 = RELOAD;TH0=0x3c;TL0=0xb0;TR1 = 1; ES = 1;ET0 =0; IT0=0;/1:FALLING 0:LOW LEVEL EX0=1;/ENABLEEA = 1;/* : Delays(number)* : * : number* : number*/void Delays(unsigned int number) /,number unsigned char temp; for(;number!=0;number-) for(temp=0;temp 4;if(cTemp 9)Send_uart(cTemp + A-10);elseSend_uart(cTemp + 0);cTemp = cHex & 0x0F;if(cTemp 9)Send_uart(cTemp + A-10);elseSend_uart(cTemp + 0);Send_uart( );/* : StartI2C()* : I2C* : * : */void StartI2C() /I2C sda=1; Delays(1); scl=1; Delays(1); sda=0; Delays(1); scl=0; Delays(1);/* : Stop2C()* : I2C* : * : */void StopI2C() /I2C scl=0; Delays(1); sda=0; Delays(1); scl=1; Delays(1); sda=1; Delays(1);/* : ackI2C()* : * : * : */ void ackI2C() / sda=0; Delays(1); scl=1; Delays(1); scl=0; Delays(1); sda=1; Delays(1);/* : NoackI2C()* : * : * : */ void NoackI2C() / sda=1; Delays(1); scl=1; Delays(1); scl=0; Delays(1);/* : TestackI2C()* : -ErrorBit* : * : */ bit TestackI2C() /-ErrorBit bit ErrorBit; sda=1; Delays(1); scl=1; Delays(1); ErrorBit=sda; Delays(1); scl=0; Delays(1); return(ErrorBit);/* : x24c02_init()* : 24c02* : * : */void freebus(void) scl = 1;Delays(1);sda = 1;Delays(1);/* : Write8BitI2C(unsigned char input)* : 8(input)* : input* : 8(input)*/ bit Write8BitI2C(uchar input) /8(input) unsigned char temp; for(temp=8;temp!=0;temp-) sda=(bit)(input&0x80); /input0x80 Delays(1); scl=1; Delays(1); scl=0; Delays(1); input=input1; return 1;/* : Read8BitI2C()* : 8* : * : rbyte*/ uchar Read8BitI2C() /8 uchar temp,rbyte; rbyte=0; for(temp=0;temp8;temp+) scl=1; Delays(1); rbyte=rbyte8;IAP_TRIG=0x46;IAP_TRIG=0xb9;dat=IAP_DATA;IAP_disable();return dat;void Byte_program(WORD addr, BYTE ch) IAP_CONTR=ENABLE_IAP;IAP_CMD=2;IAP_ADDRL=addr;IAP_ADDRH=addr8; IAP_DATA=ch;IAP_TRIG=0x46;IAP_TRIG=0xb9; IAP_disable(); /IAP , ,CPU , /IAP IAP ,void Sector_erase(WORD addr) IAP_CONTR=ENABLE_IAP;IAP_CMD=3;IAP_ADDRL=addr;IAP_ADDRH=addr8;IAP_TRIG=0x46;IAP_TRIG=0xb9;IAP_disable(); /IAP , ,CPU , /IAP IAP ,BYTE Get_inter(int i) return (i/256);BYTE Get_decimal(int i) return (i%256);/* : readMM2122()* : * : * : x1,x2,y1,y2*/void readMM2122() cunchu1=0,cunchu2=0,cunchu3=0,cunchu4=0,cunchu5=0; /*/ freebus(); StartI2C(); /1 Write8BitI2C(MMC2122_address); TestackI2C(); Write8BitI2C(00); /2 TestackI2C(); Write8BitI2C(05); /3 TestackI2C(); StopI2C(); Delays(15); freebus();StartI2C(); /1Write8BitI2C(MMC2122_address);TestackI2C();Write8BitI2C(00);/2 TestackI2C();Write8BitI2C(03);/3 PMTestackI2C(); StopI2C(); Delays(15); StartI2C(); /1 Write8BitI2C(MMC2122_address); TestackI2C(); Write8BitI2C(00); /2 TestackI2C(); Write8BitI2C(01); /3 TestackI2C(); StopI2C(); Delays(10); StartI2C(); /4 Write8BitI2C(MMC2122_address); TestackI2C(); Write8BitI2C(00); /5 TestackI2C(); StartI2C(); Write8BitI2C(0x69); /6 TestackI2C(); cunchu1=Read8BitI2C(); /7 ackI2C(); freebus(); /8 cunchu2=Read8BitI2C(); ackI2C(); freebus(); /9 cunchu3=Read8BitI2C(); ackI2C(); freebus(); /10 cunchu4=Read8BitI2C(); ackI2C(); freebus(); /11 cunchu5=Read8BitI2C(); NoackI2C(); StopI2C(); freebus(); x=(int)(cunchu2)*256+(int)cunchu3; y=(int)(cunchu4)*256+(int)cunchu5;Send_uart(0x7e);Send_uart(adjust_flag);Send_uart(0x04);Send_uart(cunchu2);Send_uart(cunchu3);Send_uart(cunchu4);Send_uart(cunchu5);/Send_uart(0x05+cunchu2+cunchu3+cunchu4+cunchu5);Send_uart(0xaa);void display_direction(uchar value) P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30); com2 = 1; com4 = 1; switch(value) case 1: P1=(P1&0xEF); P2=(P2&0X86); P3=P3&0xff;com2=0;/Delays(300);break; /Ecase 2: P1=(P1&0xF6); P2=(P2&0XC9); P3=P3&0xff; com2=0;break; /N case 3: P1=(P1&0xF7); P2=(P2&0XC9); P3=P3&0xDF; com2=0;break; /W case 4: P1=(P1&0xEF); P2=(P2&0X92); P3=P3&0xff; com2=0; break; /S case 5: P1=(P1&0xEF); P2=(P2&0X86); P3=P3&0xff;com2=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;Delays(30);P1=(P1&0xF6); P2=(P2&0XC9); P3=P3&0xff;com3=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;com3=1;break; /EN case 6: P1=(P1&0xF6); P2=(P2&0XC9); P3=P3&0xff;com2=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;Delays(30);P1=(P1&0xF7); P2=(P2&0XC9); P3=P3&0xDF;com3=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;com3=1;break; /NWcase 7: P1=(P1&0xF7); P2=(P2&0XC9); P3=P3&0xDF;com2=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;Delays(30); P1=(P1&0xEF); P2=(P2&0X92); P3=P3&0xff;com3=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;com3=1;break; /WScase 8: P1=(P1&0xEF); P2=(P2&0X92); P3=P3&0xff;com2=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;Delays(30); P1=(P1&0xEF); P2=(P2&0X86); P3=P3&0xff;com3=0;Delays(100);P1=(P1|0x3F); P2=(P2|0X7f); P3=(P3|0x30);com2=1;com3=1;break; /SE void adjust(void)/ int i; int xxyy_value; int x_value; int y_value; readMM2122();x_value=x;y_value=y;xxyy_value = (int)sqrt(long)x*(long)x + (long)y*(long)y); for(i=1;i=5)|(x_value-x)=x_max) x_max=x; if(x=y_max) y_max=y;if(y=xxyy_max) xxyy_max=xxyy_value; if(xxyy_value=xxyy_min) xxyy_min=xxyy_value; readMM2122();x_value=x; y_value=y; while(!(x_max-x_min)-(y_max-y_min)-20) readMM2122(); xxyy_value = (int)sqrt(long)x*(long)x + (long)y*(long)y); / if(x=x_max) x_max=x; if(x=y_max) y_max=y;if(y=xxyy_max) xxyy_max=xxyy_value; if(xxyy_value=0)&(gsin=0)angle = angle_sin;else if(gcos=0)angle = angle_cos;else if(gcos=0)&(gsin=0)&(gsin=0)&( angle=10)&( a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論