久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2104|回復: 0
打印 上一主題 下一主題
收起左側

利用GY-61 ADXL335模塊與51單片機結合測量角度源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:707040 發表于 2020-6-5 12:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用GY-61 ADXL335模塊與51單片機結合測量角度,相關·代碼和ADXL335資料全都在壓縮包里
//*****************************************************
//名稱:單片機串口輸出ADXL335角度值
//使用單片機:stc12c5a60s2
//供電:電壓5v
//晶振:11.0592m
//X軸->(ADC0)P1.0  
//Y軸->(ADC1)P1.1
//Z軸->(ADC1)P1.2
//用pc串口助手顯示時,選擇字符顯示
//參考宏晶網址例程
//*****************************************************
#include "reg51.h"
#include "intrins.h"
#include  <math.h>    //Keil library  
#include  <stdio.h>   //Keil library

//#define FOSC    18432000L
#define FOSC    11059200L  //晶振11.0592M
#define BAUD    9600

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define   uchar unsigned char
#define   uint unsigned int        

/*Declare SFR associated with the ADC */
sfr AUXR1       =   0XA2;
sfr ADC_CONTR   =   0xBC;           //ADC control register
sfr ADC_RES     =   0xBD;           //ADC high 8-bit result register
sfr ADC_RESL    =   0xBE;
sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
sfr P1ASF       =   0x9D;           //P1 secondary function control register

/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks

void InitUart();
void InitADC();
void SendData(BYTE dat);
int GetADCResult(BYTE ch);
void Delay(WORD n);
uchar ge,shi,bai,qian,wan;           //顯示變量

void conversion(uint temp_data)  
{  
    wan=temp_data/10000+0x30 ;
    temp_data=temp_data%10000;   //取余運算
        qian=temp_data/1000+0x30 ;
    temp_data=temp_data%1000;    //取余運算
    bai=temp_data/100+0x30   ;
    temp_data=temp_data%100;     //取余運算
    shi=temp_data/10+0x30    ;
    temp_data=temp_data%10;      //取余運算
    ge=temp_data+0x30;         
}

/*----------------------------
Get ADC result
----------------------------*/
int GetADCResult(BYTE ch)
{   int AD10bitResult;
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

    AD10bitResult=ADC_RES;
    AD10bitResult<<=8;
    AD10bitResult|=ADC_RESL;
    return AD10bitResult;                  //Return 10BIT ADC result
}
/*----------------------------
Initial UART
----------------------------*/
void InitUart()
{
    SCON = 0x5a;                    //8 bit data ,no parity bit
    TMOD = 0x20;                    //T1 as 8-bit auto reload
    TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
    TR1 = 1;                        //T1 start running
}

/*----------------------------
Initial ADC sfr
----------------------------*/
void InitADC()
{
    P1ASF = 0xff;                   //Open 8 channels ADC function

        AUXR1=AUXR1|0X04;              //ad值左對齊
    ADC_RES = 0;                    //Clear previous result
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
    Delay(2);                       //ADC power-on and delay
}

/*----------------------------
Send one byte data to PC
Input: dat (UART data)
Output:-
----------------------------*/
void SendData(BYTE dat)
{
    while (!TI);                    //Wait for the previous data is sent
    TI = 0;                         //Clear TI flag
    SBUF = dat;                     //Send current data
}

/*----------------------------
Software delay function
----------------------------*/
void Delay(WORD n)
{
    WORD x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}

//******************************************************************************

void main()
{   int x,y,z;
        float Q,T,K,Roll,Pitch;
    InitUart();                     //Init UART, use to show ADC result
    InitADC();                      //Init ADC sfr
    while (1)
    {
                x=GetADCResult(0);
                y=GetADCResult(1);
                z=GetADCResult(2);
                // 0-5v 對應 0-1024  
                // 3.3v/2  = 1.65v(0g時候值)
                // 1.65v ->= 338   (AD值即0X0152)
                x-=0X0152; //
                y-=0X0152;
                z-=0X0152;        
    Q=x;
    T=y;
    K=z;
    Q=-Q;
    Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);
    Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);
    conversion(Roll);    //橫滾角0-360度
  //conversion(Pitch); //俯仰角0-360度
    SendData(bai);
        SendData(shi);
        SendData(ge);

        SendData(0x0d);
        SendData(0x0a);//換行,回車

    Delay(30);
    }
}

51黑論壇_GY-61 ADXL335模塊發送資料.rar

672.39 KB, 下載次數: 22, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久青草 | 伊人超碰 | 我要看免费一级毛片 | 亚洲一一在线 | 亚洲国产一区二区三区在线观看 | 亚洲免费在线 | 国际精品鲁一鲁一区二区小说 | 精品1区 | 免费在线一区二区 | 97精品视频在线观看 | 日韩一级免费观看 | 91精品国产乱码麻豆白嫩 | 国内精品视频一区二区三区 | 亚洲精品大全 | 成人亚洲片 | 久草视频在线播放 | 久久久免费观看视频 | 欧美日韩国产在线观看 | 欧美成人一区二区三区片免费 | 91精品国产乱码久久久久久久久 | 精品视频在线一区 | 亚洲黄色高清视频 | 国产在线观看av | 国产精品久久久久久妇女 | 免费看大片bbbb欧美 | 国产午夜精品一区二区三区嫩草 | 美女爽到呻吟久久久久 | 欧美极品少妇xxxxⅹ免费视频 | 91久久久久久久久 | 欧美天堂 | 日韩欧美国产精品 | 欧美伊人久久久久久久久影院 | 一区中文字幕 | 亚洲国产高清在线 | 国产精品久久99 | 国精久久 | 国产91在线播放 | 亚洲瑟瑟 | 国产精品亚洲精品日韩已方 | 精品欧美一区二区在线观看视频 | 91精品国产91久久久久久吃药 |