找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3936|回复: 3
收起左侧

STC单片机串口输出ADXL335角度值源程序 GY-61资料

[复制链接]
ID:207151 发表于 2017-6-2 17:18 | 显示全部楼层 |阅读模式
GY-61 ADXL335模块发送资料

ADXL335引脚图:
0.png

GY-61模块资料:
0.png
0.png


单片机串口输出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. //#define FOSC    18432000L
  17. #define FOSC    11059200L  //晶振11.0592M
  18. #define BAUD    9600

  19. typedef unsigned char BYTE;
  20. typedef unsigned int WORD;

  21. #define   uchar unsigned char
  22. #define   uint unsigned int       

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

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

  38. void InitUart();
  39. void InitADC();
  40. void SendData(BYTE dat);
  41. int GetADCResult(BYTE ch);
  42. void Delay(WORD n);
  43. uchar ge,shi,bai,qian,wan;           //显示变量

  44. void conversion(uint temp_data)  
  45. {  
  46.     wan=temp_data/10000+0x30 ;
  47.     temp_data=temp_data%10000;   //取余运算
  48.         qian=temp_data/1000+0x30 ;
  49.     temp_data=temp_data%1000;    //取余运算
  50.     bai=temp_data/100+0x30   ;
  51.     temp_data=temp_data%100;     //取余运算
  52.     shi=temp_data/10+0x30    ;
  53.     temp_data=temp_data%10;      //取余运算
  54.     ge=temp_data+0x30;        
  55. }

  56. /*----------------------------
  57. Get ADC result
  58. ----------------------------*/
  59. int GetADCResult(BYTE ch)
  60. {   int AD10bitResult;
  61.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  62.     _nop_();                        //Must wait before inquiry
  63.     _nop_();
  64.     _nop_();
  65.     _nop_();
  66.     while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  67.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC

  68.     AD10bitResult=ADC_RES;
  69.     AD10bitResult<<=8;
  70.     AD10bitResult|=ADC_RESL;
  71.     return AD10bitResult;                  //Return 10BIT ADC result
  72. }
  73. /*----------------------------
  74. Initial UART
  75. ----------------------------*/
  76. void InitUart()
  77. {
  78.     SCON = 0x5a;                    //8 bit data ,no parity bit
  79.     TMOD = 0x20;                    //T1 as 8-bit auto reload
  80.     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
  81.     TR1 = 1;                        //T1 start running
  82. }

  83. /*----------------------------
  84. Initial ADC sfr
  85. ----------------------------*/
  86. void InitADC()
  87. {
  88.     P1ASF = 0xff;                   //Open 8 channels ADC function

  89.         AUXR1=AUXR1|0X04;              //ad值左对齐
  90.     ADC_RES = 0;                    //Clear previous result
  91.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  92.     Delay(2);                       //ADC power-on and delay
  93. }

  94. /*----------------------------
  95. Send one byte data to PC
  96. Input: dat (UART data)
  97. Output:-
  98. ----------------------------*/
  99. void SendData(BYTE dat)
  100. {
  101.     while (!TI);                    //Wait for the previous data is sent
  102.     TI = 0;                         //Clear TI flag
  103.     SBUF = dat;                     //Send current data
  104. }

  105. /*----------------------------
  106. Software delay function
  107. ----------------------------*/
  108. void Delay(WORD n)
  109. {
  110.     WORD x;

  111.     while (n--)
  112.     {
  113.         x = 5000;
  114.         while (x--);
  115.     }
  116. }

  117. //******************************************************************************

  118. void main()
  119. {   int x,y,z;
  120.         float Q,T,K,Roll,Pitch;
  121.     InitUart();                     //Init UART, use to show ADC result
  122.     InitADC();                      //Init ADC sfr
  123.     while (1)
  124.     {
  125.                 x=GetADCResult(0);
  126.                 y=GetADCResult(1);
  127.                 z=GetADCResult(2);
  128.                 // 0-5v 对应 0-1024  
  129.                 // 3.3v/2  = 1.65v(0g时候值)
  130.                 // 1.65v ->= 338   (AD值即0X0152)
  131.                 x-=0X0152; //
  132. ……………………

  133. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
GY-61 ADXL335模块发送资料.rar (672.39 KB, 下载次数: 32)
回复

使用道具 举报

ID:241806 发表于 2018-5-18 16:51 | 显示全部楼层
这个程序不是314就是315怎么回事呀?
回复

使用道具 举报

ID:632761 发表于 2019-10-30 16:12 | 显示全部楼层
程序怎么下载啊,看不到
回复

使用道具 举报

ID:720609 发表于 2020-4-1 22:56 | 显示全部楼层
ADXL335

GY-61 ADXL335模块发送资料.rar

672.39 KB, 下载次数: 5, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表