zoukankan      html  css  js  c++  java
  • STC单片机串口输出ADXL335角度值

    STC单片机串口输出ADXL335角度值:

      1 //*****************************************************
      2 //名称:单片机串口输出ADXL335角度值
      3 //使用单片机:stc12c5a60s2
      4 //供电:电压5v
      5 //晶振:11.0592m
      6 //X轴->(ADC0)P1.0  
      7 //Y轴->(ADC1)P1.1 
      8 //Z轴->(ADC1)P1.2
      9 //用pc串口助手显示时,选择字符显示 
     10 //参考宏晶网址例程
     11 //*****************************************************
     12 #include "reg51.h"
     13 #include "intrins.h"
     14 #include  <math.h>    //Keil library  
     15 #include  <stdio.h>   //Keil library
     16 
     17 //#define FOSC    18432000L
     18 #define FOSC    11059200L  //晶振11.0592M
     19 #define BAUD    9600
     20 
     21 typedef unsigned char BYTE;
     22 typedef unsigned int WORD;
     23 
     24 #define   uchar unsigned char
     25 #define   uint unsigned int    
     26 
     27 /*Declare SFR associated with the ADC */
     28 sfr AUXR1       =   0XA2;
     29 sfr ADC_CONTR   =   0xBC;           //ADC control register
     30 sfr ADC_RES     =   0xBD;           //ADC high 8-bit result register
     31 sfr ADC_RESL    =   0xBE;
     32 sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
     33 sfr P1ASF       =   0x9D;           //P1 secondary function control register
     34 
     35 /*Define ADC operation const for ADC_CONTR*/
     36 #define ADC_POWER   0x80            //ADC power control bit
     37 #define ADC_FLAG    0x10            //ADC complete flag
     38 #define ADC_START   0x08            //ADC start control bit
     39 #define ADC_SPEEDLL 0x00            //420 clocks
     40 #define ADC_SPEEDL  0x20            //280 clocks
     41 #define ADC_SPEEDH  0x40            //140 clocks
     42 #define ADC_SPEEDHH 0x60            //70 clocks
     43 
     44 void InitUart();
     45 void InitADC();
     46 void SendData(BYTE dat);
     47 int GetADCResult(BYTE ch);
     48 void Delay(WORD n);
     49 uchar ge,shi,bai,qian,wan;           //显示变量
     50 
     51 void conversion(uint temp_data)  
     52 {  
     53     wan=temp_data/10000+0x30 ;
     54     temp_data=temp_data%10000;   //取余运算
     55     qian=temp_data/1000+0x30 ;
     56     temp_data=temp_data%1000;    //取余运算
     57     bai=temp_data/100+0x30   ;
     58     temp_data=temp_data%100;     //取余运算
     59     shi=temp_data/10+0x30    ;
     60     temp_data=temp_data%10;      //取余运算
     61     ge=temp_data+0x30;     
     62 }
     63 
     64 /*----------------------------
     65 Get ADC result
     66 ----------------------------*/
     67 int GetADCResult(BYTE ch)
     68 {   int AD10bitResult; 
     69     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
     70     _nop_();                        //Must wait before inquiry
     71     _nop_();
     72     _nop_();
     73     _nop_();
     74     while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
     75     ADC_CONTR &= ~ADC_FLAG;         //Close ADC
     76 
     77     AD10bitResult=ADC_RES;
     78     AD10bitResult<<=8;
     79     AD10bitResult|=ADC_RESL;
     80     return AD10bitResult;                  //Return 10BIT ADC result
     81 }
     82 /*----------------------------
     83 Initial UART
     84 ----------------------------*/
     85 void InitUart()
     86 {
     87     SCON = 0x5a;                    //8 bit data ,no parity bit
     88     TMOD = 0x20;                    //T1 as 8-bit auto reload
     89     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
     90     TR1 = 1;                        //T1 start running
     91 }
     92 
     93 /*----------------------------
     94 Initial ADC sfr
     95 ----------------------------*/
     96 void InitADC()
     97 {
     98     P1ASF = 0xff;                   //Open 8 channels ADC function
     99 
    100     AUXR1=AUXR1|0X04;              //ad值左对齐
    101     ADC_RES = 0;                    //Clear previous result
    102     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
    103     Delay(2);                       //ADC power-on and delay
    104 }
    105 
    106 /*----------------------------
    107 Send one byte data to PC
    108 Input: dat (UART data)
    109 Output:-
    110 ----------------------------*/
    111 void SendData(BYTE dat)
    112 {
    113     while (!TI);                    //Wait for the previous data is sent
    114     TI = 0;                         //Clear TI flag
    115     SBUF = dat;                     //Send current data
    116 }
    117 
    118 /*----------------------------
    119 Software delay function
    120 ----------------------------*/
    121 void Delay(WORD n)
    122 {
    123     WORD x;
    124 
    125     while (n--)
    126     {
    127         x = 5000;
    128         while (x--);
    129     }
    130 }
    131 
    132 //******************************************************************************
    133 
    134 void main()
    135 {   int x,y,z;
    136     float Q,T,K,Roll,Pitch;
    137     InitUart();                     //Init UART, use to show ADC result
    138     InitADC();                      //Init ADC sfr
    139     while (1)
    140     {
    141         x=GetADCResult(0);
    142         y=GetADCResult(1);
    143         z=GetADCResult(2);
    144         // 0-5v 对应 0-1024  
    145         // 3.3v/2  = 1.65v(0g时候值)
    146         // 1.65v ->= 338   (AD值即0X0152)
    147         x-=0X0152; //
    148         y-=0X0152;
    149         z-=0X0152;    
    150     Q=x;
    151     T=y;
    152     K=z;
    153     Q=-Q;
    154     Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);
    155     Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);
    156     conversion(Roll);    //横滚角0-360度
    157   //conversion(Pitch); //俯仰角0-360度
    158     SendData(bai);
    159     SendData(shi);
    160     SendData(ge);
    161 
    162     SendData(0x0d); 
    163     SendData(0x0a);//换行,回车
    164 
    165     Delay(30);
    166     }
    167 }
  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6385587.html
Copyright © 2011-2022 走看看