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/+0x30 ;
  54. temp_data=temp_data%; //取余运算
  55. qian=temp_data/+0x30 ;
  56. temp_data=temp_data%; //取余运算
  57. bai=temp_data/+0x30 ;
  58. temp_data=temp_data%; //取余运算
  59. shi=temp_data/+0x30 ;
  60. temp_data=temp_data%; //取余运算
  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<<=;
  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///BAUD); //Set Uart baudrate
  90. TR1 = ; //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 = ; //Clear previous result
  102. ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  103. Delay(); //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 = ; //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 = ;
  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 ()
  140. {
  141. x=GetADCResult();
  142. y=GetADCResult();
  143. z=GetADCResult();
  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)*)/3.14159265)+);
  155. Pitch=(float)(((atan2(K,T)*)/3.14159265)+);
  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();
  166. }
  167. }

STC单片机串口输出ADXL335角度值的更多相关文章

  1. 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别

    STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...

  2. STC单片机控制28BYJ-48步进电机

    STC单片机4*4按键控制步进电机旋转 28BYJ-48型步进电机说明 四相永磁式的含义 28BYJ-48工作原理 让电机转起来 最简单的电机转动程序 电机转速缓慢的原因分析 便于控制转过圈数的改进程 ...

  3. STC 单片机ADC实现原理

    模数转换器原理 数模转换器( analog to digitI converter,ADC),简称为A/D,ADC是链接模拟世界和数字世界的桥梁.它用于将连续的模拟信号转换为数字形式离散信号.典型的, ...

  4. STC单片机Flash做EEPROM的代码

    STC官方给出的建议: /***************************************************************Author:Liming*** * @brie ...

  5. STC单片机 IAP(EEPROM)的使用

    STC89C51.52内部都自带有2K字节的EEPROM,54.55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次 ...

  6. STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载

    //为了方便大家调试,另附程序工程共大家下载,下载地址:https://www.90pan.com/b1908750 ​ //************************** //程序说明:stc ...

  7. TI CC2541的串口输出.

    http://blog.csdn.net/feilusia/article/details/47431659 基本上看上面这个博客的. 重点是: 1. 关闭流控, 在npi.h里面, 将 #defin ...

  8. c++ 弧度值与角度值的转换

    Rad_to_deg --- 弧度_到_角度 的 比率Rad_to_deg = 45.0 / atan(1.0): 弧度值到角度值的转换 用 角度 = 弧度值* Rad_to_deg 角度值到弧度值的 ...

  9. verilog实验3:AD转换后串口输出到PC端

    一.实验任务 通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上.此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配.等待串口发送完后,再进行下一次AD转换. ...

随机推荐

  1. 【Java】阿里巴巴Java开发手册(纪念版)

    下载地址:(最新纪念版 2017-11-30 V1.3.1) <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化 ...

  2. 如何使用Android studio打开eclipse项目

    转: http://blog.csdn.net/zcw93219/article/details/50770445

  3. 基于ARM的模拟器

    ARM的ARMulator: ARMulator 是一个在 ARM 公司推出的集成开发环境 ADS (ARM Developer Suite)中提供的指令集模拟器.它与运行在通用计算机(通常是x86体 ...

  4. mac切换root

    方法一: sudo -i sudo su或是su. 转自:http://blog.csdn.net/duanyipeng/article/details/8621967

  5. tail 命令

    转自:http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项 ...

  6. git Alias 设置

    git Alias 设置 Git 使用比較多的话能够设置一些命令的 Alias ,简单的说就是用简写取代整个完整的命令. 如co 代表 checkout. Mac下,到根文件夹 cd ~ 然后 vi ...

  7. IO multiplexing 与 非阻塞网络编程

    使用I/O multipexing 的网络编程中,一般需要采用非阻塞网络编程的风格,防止服务端在处理高连接量大时候阻塞在某个文件描述符上面,比如某个socket 有大量的数据需要写,但是内核发送缓冲区 ...

  8. MyBatis - (一) 基本数据操作命令和简单映射

    1. 简单的select映射 <mapper namespace="com.mybatis3.mappers.StudentMapper"> <select id ...

  9. thick置备和 thin置备,克隆,模板和快照

    共享shared VMDK和共享RDM实验,参见http://wenku.it168.com/d_000773128.shtml 假如你有一个磁盘是100G的虚拟机,磁盘格式是厚置备,即Thick,当 ...

  10. stingray 页面布局与设计

    前言 前面我们已经了解了系统中的HTML组件,现在我们就可以开始用这些组件来设计页面了,他们就像是一块块小积木,我们要盖起高楼大厦. 两种页面容器组件 我们将关联性较强的多个HTML组件放到一个容器组 ...