導航:首頁 > 操作系統 > 單片機傾角感測器

單片機傾角感測器

發布時間: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);
}
}

Ⅵ 傾角感測器測出的角度怎麼用單片機去控制步進電機轉幾步使平台平衡

您做的貌似是一個電子科技大賽的題目。就像瞄準器一樣。你可以引進反饋控制,當傾角感測器有信號時,誤差就來了,這時候馬上控制電機轉,全速轉,同時繼續看傾角感測器傳來的信號和參考值之間的誤差,只要還有誤差就繼續轉。當誤差為零的時候,馬上停下來。你也可以設計一個程序當誤差很小時就先停下來,讓電機的慣性把系統平衡下來。這就是比例調節和積分調節相結合起來用。但不要輕易用微分,會使系統飄搖。

閱讀全文

與單片機傾角感測器相關的資料

熱點內容
android滅屏流程 瀏覽:491
如何更改站點文件夾名字 瀏覽:894
如何看伺服器幾核 瀏覽:274
找酒吧設計公司用什麼app 瀏覽:680
基本初等函數的導數公式及導數的運演算法則 瀏覽:915
為什麼小米app啟動廣告關不了 瀏覽:877
空調壓縮機一直不停 瀏覽:511
養殖系統開發源碼 瀏覽:82
pdf的目錄 瀏覽:406
光遇安卓如何一個人拍視頻 瀏覽:277
怨女pdf 瀏覽:708
扭曲伺服器什麼時候開 瀏覽:23
加密貨幣換平台 瀏覽:610
手機內存壓縮軟體 瀏覽:33
生成樹是否與遍歷演算法有關 瀏覽:728
python強化學習迷宮 瀏覽:450
老包子解壓視頻 瀏覽:885
伺服器注冊是什麼意思 瀏覽:419
程序員群體焦慮如何破局 瀏覽:585
程序員在廣州上班 瀏覽:803