mma7361角速度传感器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define lcd P0
sbit sl=P1^0;
sbit og=P1^1;
sbit st=P1^2;
sbit gs=P1^3;
sbit adcs=P2^0;
sbit adclk=P2^1;
sbit addo=P2^2;
sbit addi=P2^2;
sbit lcdrs=P1^5;
sbit lcdrw=P1^6;
sbit lcden=P1^7;
void delay(int n)
{
int i,j;
for(i=0;i for(j=0;j<1000;j++); } void lcdwr_com(unsigned char com) //дָÁÊý { lcdrs=0; delay(1); lcd=com; lcden=1; lcden=0; } void lcdwr_data(unsigned char date) //дÊý¾Ý { lcdrs=1; delay(1); lcd=date; lcden=1; lcden=0; } void lcdinit() //³õʼ»¯º¯Êý { lcdrw=0; lcden=0; lcdwr_com(0x38); lcdwr_com(0x0c); lcdwr_com(0x06); lcdwr_com(0x01); lcdwr_com(0x80); } int rd_ad(unsigned char *date,int SGL,int ODD) //¶ÁÈ¡adÊý¾Ý { unsigned char data0=0,data1=0; int i,j; adcs=1; adcs=0; addi=1; adclk=0; adclk=1; adclk=0; //µÚÒ»¸öÂö³å addi=SGL; //ģʽѡÔñ adclk=1; adclk=0; //µÚ¶þ¸öÂö³å addi=ODD; adclk=1; adclk=0; //µÚÈý¸öÂö³å addo=1; //ÊÍ·ÅÊý¾Ý¶Ë¿Ú for(i=0;i<8;i++){ data0<<=1; adclk=1; adclk=0; j++;j++;j++;j++;j++; j++;j++;j++;j++;j++; //ÑÓʱ5us if(addo) data0|=0x01; } if(addo==1) data1|=0x80; for(i=0;i<7;i++){ data1>>=1; adclk=1; adclk=0; j++;j++;j++;j++;j++; j++;j++;j++;j++;j++; if(addo==1)data1|=0x80; } adcs=1; addo=1; adclk=1; //ÊÍ·Å×ÜÏß if(data0==data1){ *date=data1; //ת»»³É¹¦±£´æÊý¾Ý return 1; } else return 0; } void main() { unsigned char date; double disp; unsigned char BUF[6]; int pm; //·ûºÅλ int i; unsigned int angle; //½Ç¶È sl=1; og=1; gs=1; st=1; lcdinit(); while(1){ if(rd_ad(&date,1,0)){ disp=date; disp*=195; if(disp>=16500){ pm=1; //Ϊ¸º angle=5730*asin((disp-16500)/8000);//»¡¶Èת»»Îª½Ç¶È if(angle%10>=5) angle=angle/10+1; else angle/=10; //ËÄÉáÎåÈëËãһλСÊý } else { pm=0; //ΪÕý angle=5730*asin((16500-disp)/8000);//»¡¶Èת»»Îª½Ç¶È if(angle%10>=5) angle=angle/10+1; else angle/=10; //ËÄÉáÎåÈëËãһλСÊý } BUF[0]=angle/100%10+'0'; BUF[1]=angle/10%10+'0'; BUF[2]='.'; BUF[3]=angle%10+'0'; i=0; while(BUF[i]=='0'&&BUF[i+1]!='.'){ BUF[i]='#'; i++; } lcdwr_com(0x80); if(pm==1){ lcdwr_data('-'); delay(1); } for(i=0;i<4;i++) if(BUF[i]!='#'){ lcdwr_data(BUF[i]); delay(1); } lcdwr_data(0xdf);//ÏÔʾ¶È·ûºÅ delay(1); lcdwr_data(' ');//²¹Æ볤¶È²î delay(1); lcdwr_data(' '); } delay(300); } }