导航:首页 > 操作系统 > 单片机倾角传感器

单片机倾角传感器

发布时间:2022-09-01 20:22:02

Ⅰ 求C51单片机控制sca60c倾角传感器的程序,最好有注释~~~~

传感器(英文名称:transcer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。通常根据其基本感知功能分为热敏元件、光敏元件、气敏元件、力敏元件、磁敏元件、湿敏元件、声敏元件、放射线敏感元件、色敏元件和味敏元件等十大类。

Ⅱ 倾角传感器与单片机连接有必要用A/D转换器吗

根据你的精度要求进行选择,你如果需要平台保持水平,可以采用SAT100T。该传感器具有x,y双轴倾角传感器。内部具有AD转换,然后SPI串行输出;同时内部还具有温度传感器,可以进行温度补偿。如果需要高精度,可以采用外部高精度AD转换。
我现在就是用这个传感器做的高精度垂直转动平台。

Ⅲ 想用单片机和倾角传感器,实现横倾角度和纵倾角度在LCD上显示,求大神教教

SX-QXJ2型数显倾角仪OLED显示屏,内嵌微处理器DSP程序化处理,既可以直接显示角度数字又可以连接控制系统输出RS485数字信号。

Ⅳ 求51单片机控制 倾角传感器SCA60的汇编语言,用来做跷跷板小车的。相近能提供参考也行!!

附件一:
总程序源程序

;**************说明***************************************************
;** P1.1为左边传感器输入; P1.0为右边传感器输入 **
;** P1.6检测车身前倾; P1.7检测车身后倾 **
;** 秒表端口定义: **
;** A(P2.1):启动/停止计时; B(P2.3):各段记录时间回放; **
;** C(P2.3):分段计时标志/清零(停止状态下) **
;*********************************************************************

ORG 0000H
;************主程序***************************************************
JBGN:
LCALL TC ;停车
LCALL CSZT ;设置初始状态
;*************车身平衡检查******************
CGQ:
LCALL QJ ;前进3S,第一次不检查A端黑线
LCALL QL ;秒表置零
LCALL QDJS ;启动秒表
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL TC ;停车
LCALL DELAY30 ;消除摆动
JXPD:JNB P1.6,MBXS ;如果前倾(到达C点附近),转秒表显示AC段行车时间
LCALL QJ ;前进
LCALL DELAY
LCALL TC
LCALL DELAY30 ;消除摆动
LJMP JXPD ;继续判断是否到达C点附近
MBXS:
LCALL QDJS
LCALL CDSL5 ;停车5S,读取AC段行车时间
LCALL QL ;秒表清零
LCALL QDJS ;启动计时,记录平衡调整时间
CGQJC:
JNB P1.6,JBZHT ;如果前倾,转慢速后退
JNB P1.7, JBWW ;如果后仰,转慢速前进
LCALL DELAY1S ;延时判断是否真正平衡
LCALL DELAY1S
LCALL DELAY1S
JNB P1.6,CGQJC ;如果前倾,转继续调整平衡
JNB P1.7,CGQJC ;如果后仰,转继续调整平衡
LCALL TC ;停车
LCALL QDJS ;停止计时,显示平衡调整所用时间
CLR P2.5 ;蜂鸣器鸣叫
CLR P2.4 ;七彩灯亮
LCALL CDSL5 ;转到车灯闪亮5次,表示5S时间
LCALL CSZT
LJMP CDB ;转C到B程序前进
;***********转长跳***********
JBZHT:
LJMP JBTPH
JBWW:
LJMP JBWWW
;***********调整平衡*********
JBTPH:
LCALL DELAY30 ;消除传感器摆动
JBTP: LCALL HT
lcall delay
LCALL TC
LCALL DELAYTC ;消除传感器摆动
JNB P1.6,JBTP
LJMP CGQJC
JBWWW:
LCALL DELAY30
JBWG:LCALL QJ
LCALL DELAY
LCALL TC
LCALL DELAYTC ;消除传感器摆动
JNB P1.7,JBWG
LJMP CGQJC
;*********从C点到B端程序**********
CDB:
LCALL QL ;秒表置零
LCALL QDJS
LCALL QJ
DT: JB P1.0, DT ;如果右边遇到黑线,则检查左边(顺序执行),否则继续检查左边
JB P1.1, DT
LCALL TC
LCALL QDJS ;停止计时,显示从C到B的时间
LCALL CDSL5 ;延时5S
LCALL HT ;停车5S时间到,转后退返回
LCALL QL
LCALL QDJS
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
DDTT:JB P1.0, DDTT ;如果右边遇到黑线,则检查左边(顺序执行),否则继续检查左边
JB P1.1, DDTT
; INC A
; CJNE A,#2H,DDTT ;从B端返回A端时,不用检测B端黑线
LCALL TC ;已经返回A端,停车
LCALL QDJS ;停止计时,显示从B返回A所用时间
;************************基本功能与发挥部分的程序接口*************************************
LCALL CDSL5 ;延时5S,等待进入发挥部分程序
LCALL CSZT
CLR P2.4 ;状态灯亮5S
LCALL DELAY1S
LCALL DELAY1S
CLR P2.5 ;蜂鸣器叫3S
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL CSZT ;关状态灯,进入发挥部分程序
;**********************发挥部分主程序*********************************************
FHBF:
LCALL QJ
QJXHX:
JNB P1.1,JX1 ;若P1.1为0(黑线),则继续查询P1.0 (左边遇到黑线,则检查右边的状态)
JNB P1.0,JX2 ;若P1.0为0(黑线),则继续查询P1.1 (右边遇到黑线,则检查左边的状态)
LJMP QJXHX
JX1:
JNB P1.0,PHCL
LJMP CZZW ;若P1.0也为黑线,则平衡处理,否则左转弯
JX2:
JNB P1.1,PHCL
LJMP CYZW
CZZW:
LCALL ZZW
LCALL ZWSJ ;转弯时间
LCALL TC
LCALL DELAY30
LCALL QJ
LJMP QJXHX
CYZW:
LCALL YZW
LCALL ZWSJ ;转弯时间
LCALL TC
LCALL DELAY30
LCALL QJ
LJMP QJXHX
;*****************平衡调整*******************
PHCL:
LCALL QJ ;前进3S
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL TC
LCALL DELAY30 ;消除传感器摆动
FHPHTZ:
JNB P1.6,FHZHT ;如果前倾,转慢速后退
JNB P1.7,FHZQJ ;如果后仰,转慢速前进
LCALL DELAY1S ;延时判断是否真正平衡
LCALL DELAY1S
LCALL DELAY1S
JNB P1.6,FHPHTZ ;如果前倾,转继续调整平衡
JNB P1.7,FHPHTZ ;如果后仰,转继续调整平衡
LCALL TC ;停车
LCALL QDJS ;停止计时,显示平衡调整所用时间
CLR P2.5 ;蜂鸣器鸣叫
CLR P2.4 ;七彩灯亮
LCALL CDSL5 ;转到车灯闪亮5次,表示5S时间
LJMP FHPHTZ ;转平衡调整
;***********转长跳***********
FHZQJ:
LCALL CSZT ;初始状态关报警
LJMP FHWWW
FHZHT:
LCALL CSZT ;初始状态关报警
LJMP FHTPH
;***********调整平衡*********
FHTPH:
LCALL DELAY30 ;消除传感器摆动
TP: LCALL HT
LCALL DELAY
LCALL TC
LCALL DELAYTC ;消除传感器摆动
JNB P1.6,TP
LJMP FHPHTZ
FHWWW:
LCALL DELAY30 ;消除传感器摆动
DH: LCALL QJ
LCALL DELAY
LCALL TC
LCALL DELAYTC ;消除传感器摆动
JNB P1.7,DH
LJMP FHPHTZ

;******************子程序****************************************************
;*******设置初始状态*************
CSZT:
SETB P2.6 ;关灯
SETB P2.7
SETB P2.4
SETB P2.5 ;关蜂鸣器
RET

;***********停转*******************
TC:
CLR P1.2
CLR P1.3
CLR P1.4
CLR P1.5
RET

;***********前进********************
QJ:
CLR P1.2
SETB P1.3
CLR P1.4
SETB P1.5
RET

;**********后退********************
HT:
SETB P1.2
CLR P1.3
SETB P1.4
CLR P1.5
RET

;*********左转弯******************
ZZW:
CLR P1.2
CLR P1.3
CLR P1.4
SETB P1.5
RET
;*********右转弯******************
YZW:
CLR P1.2
SETB P1.3
CLR P1.4
CLR P1.5
RET

;**********秒表控制************************
;*******启动/停止计时**********
QDJS:
CLR P2.1
LCALL DELAY10
LCALL DELAY10
LCALL DELAY10
LCALL DELAY10
SETB P2.1
RET

;************显示清零*************
QL:
CLR P2.3
LCALL DELAY10
LCALL DELAY10
LCALL DELAY10
LCALL DELAY10
SETB P2.3
RET

;************延时程序*********************
;*****延时1秒****
DELAY1S:
MOV R3,#02H
DEL1: MOV R2,#0FAH
DEL2: MOV R1,#0FAH
DEL3: DJNZ R1,DEL3
NOP
DJNZ R2,DEL2
DJNZ R3,DEL1
RET

;*****延时10毫秒*****
DELAY10:
MOV R2,#20
DB1:MOV R1,#248
DB2:DJNZ R1,DB2
DJNZ R2,DB1
RET

;*********前进或后退时间**********
DELAY:
MOV R2,#30
DD1:MOV R1,#200
DD2:DJNZ R1,DD2
DJNZ R2,DD1
RET

;***********停车时间****************
DELAYTC:
MOV R2,#100
D11:MOV R1,#200
D22:DJNZ R1,D22
DJNZ R2,D11
RET

;*********延时程序****************
;*********延时0.5秒****
DELAY30:
MOV R2,#250
DL2: MOV R1,#250
DL1: DJNZ R1,DL1
DJNZ R2,DL2
RET

;*********转弯时间32MS**********
ZWSJ:
MOV R2,#50
D1:MOV R1,#100
D2:DJNZ R1,D2
DJNZ R2,D1
RET

;****延时约250毫秒(12M晶振)****
DELAY250:
MOV R3,#2
L3: MOV R2,#250
L1: MOV R1,#250
L2: DJNZ R1,L2
DJNZ R2,L1
DJNZ R3,L3
RET

;*****用状态灯显示终点停车5S时间(亮5次)*****
CDSL5:
MOV R5,#5H
PY: SETB P2.6
SETB P2.7
LCALL DELAY250
LCALL DELAY250
CLR P2.6
CLR P2.7
LCALL DELAY250
LCALL DELAY250
DJNZ R5,PY
RET
END

Ⅳ 求用51单片机控制 MMA7361 倾角传感器 的C 语言代码。最好有注释,详尽者 追加30分。

#include "STC12C5410AD.H"

sbit MMA7260sleep=P1^0; //MMA7260休眠与否,0-休眠;1-正常工作

//---------------------------------------
//名称: 延时约1毫秒函数

//日期:20081111
//-----------------------------------------
void delay1ms()
{
word k;
for(k=0;k<12000;k++);
}
void delayms(word ms)
{
word k,j;
for(j=0;j<ms;j++)
for(k=0;k<12000;k++);
}

//---------------------------------------
//名称: 串口数据发送函数

//日期:20081111
//-----------------------------------------
void uart_putchar(byte ch)
{
TI=0;
if (ch == '\n')
{

SBUF= 0x0d; //output'CR'
while(!TI);
return;
}
SBUF=ch;
while(!TI);
}
//---------------------------------------
//名称: 串口数据接收函数

//日期:20081111
//-----------------------------------------
byte uart_getchar(void)
{

if(RI)
{
RI=0;
return SBUF; //有数据接收到,返回1
}
else
{
return 0; //无数据接收到,返回0
}
}

void putstr(char ch[])
{
byte ptr=0;
while(ch[ptr])
{
uart_putchar((byte)ch[ptr++]);
}

}
//---------------------------------------
//名称: 模数转换函数(8位)

//日期:20081111
//-----------------------------------------
byte ReadAD(byte ch)
{
ADC_DATA = 0; //清A/D转换结果寄存器

ADC_CONTR = 0xF8|ch; //0000,1000ADCS = 1,启动转换
delay1ms();
do{;}
while((ADC_CONTR&0x10)==0); //0001,0000等待A/D转换结束
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换
return ADC_DATA;
}
/***************************************************
把0--255的数值转化为3位字符串格式
****************************************************/
void Byte2Str3(char zifu[],byte val,byte StartPtr)
{
char characters[11]="0123456789";
byte tv=0;

tv=val/100;
zifu[StartPtr++] = characters[tv];
tv=(val%100)/10;
zifu[StartPtr++] = characters[tv];
tv=val%10;
zifu[StartPtr] = characters[tv];
//zifu[3] = '\0';
return;
}

//---------------------------------------
//名称: 初始化函数函数

//日期:20081111
//-----------------------------------------
void init_ad(void)
{
P1M0=0x07; //设置P1.012为高阻输入,以准备AD
P1M1=0x00;
ADC_CONTR = 0xf8; //1000,0000打开A/D转换电源
delay1ms();
ADC_CONTR = ADC_CONTR&0xe0; //1110,0000 清ADC_FLAG,ADC_START位和低3位

}

void init_uart(void) //P3.0,3.1
{
TMOD=0x20; //TH1=256-INT(22118400/32/12/baud+0.5)
TH1=0xfa; //0xfa,9600
TL1=0xfd; //0xff,57600
PCON=0x00;
TR1=1;
SCON=0xd0;
}
void init_dev(void)
{
init_ad();
init_uart();
}

//---------------------------------------
//名称: 主函数

//日期:20081111
//-----------------------------------------
void main()
{
char txtbuf[17]="\n ADC Val: ";
byte adbuf;
init_dev();
putstr("\n MMA7260 starts working!\n");
MMA7260sleep=1;//MMA7260开始工作
while(1)
{
//ADC
adbuf=ReadAD(0); //X AXIS
Byte2Str3(txtbuf,adbuf,11);
putstr(txtbuf);

adbuf=ReadAD(1); //Y AXIS
Byte2Str3(txtbuf,adbuf,11);
putstr(txtbuf);

adbuf=ReadAD(2); //Z AXIS
Byte2Str3(txtbuf,adbuf,11);
putstr(txtbuf);

delayms(300);
}
}

Ⅵ 倾角传感器测出的角度怎么用单片机去控制步进电机转几步使平台平衡

您做的貌似是一个电子科技大赛的题目。就像瞄准器一样。你可以引进反馈控制,当倾角传感器有信号时,误差就来了,这时候马上控制电机转,全速转,同时继续看倾角传感器传来的信号和参考值之间的误差,只要还有误差就继续转。当误差为零的时候,马上停下来。你也可以设计一个程序当误差很小时就先停下来,让电机的惯性把系统平衡下来。这就是比例调节和积分调节相结合起来用。但不要轻易用微分,会使系统飘摇。

阅读全文

与单片机倾角传感器相关的资料

热点内容
基本初等函数的导数公式及导数的运算法则 浏览:914
为什么小米app启动广告关不了 浏览:877
空调压缩机一直不停 浏览:511
养殖系统开发源码 浏览:82
pdf的目录 浏览:406
光遇安卓如何一个人拍视频 浏览:277
怨女pdf 浏览:708
扭曲服务器什么时候开 浏览:23
加密货币换平台 浏览:609
手机内存压缩软件 浏览:33
生成树是否与遍历算法有关 浏览:728
python强化学习迷宫 浏览:450
老包子解压视频 浏览:885
服务器注册是什么意思 浏览:418
程序员群体焦虑如何破局 浏览:585
程序员在广州上班 浏览:803
androidlinuxadt 浏览:512
广联达软件加密锁原装芯片 浏览:338
如何打开数据库服务器 浏览:310
kppm是什么app 浏览:538