电子指南针.doc_第1页
电子指南针.doc_第2页
电子指南针.doc_第3页
电子指南针.doc_第4页
电子指南针.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

有疑问联系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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论