STC单片机串口输出ADXL335角度值
STC单片机串口输出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/+0x30 ;
- temp_data=temp_data%; //取余运算
- qian=temp_data/+0x30 ;
- temp_data=temp_data%; //取余运算
- bai=temp_data/+0x30 ;
- temp_data=temp_data%; //取余运算
- shi=temp_data/+0x30 ;
- temp_data=temp_data%; //取余运算
- 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<<=;
- 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///BAUD); //Set Uart baudrate
- TR1 = ; //T1 start running
- }
- /*----------------------------
- Initial ADC sfr
- ----------------------------*/
- void InitADC()
- {
- P1ASF = 0xff; //Open 8 channels ADC function
- AUXR1=AUXR1|0X04; //ad值左对齐
- ADC_RES = ; //Clear previous result
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
- Delay(); //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 = ; //Clear TI flag
- SBUF = dat; //Send current data
- }
- /*----------------------------
- Software delay function
- ----------------------------*/
- void Delay(WORD n)
- {
- WORD x;
- while (n--)
- {
- x = ;
- 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 ()
- {
- x=GetADCResult();
- y=GetADCResult();
- z=GetADCResult();
- // 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)*)/3.14159265)+);
- Pitch=(float)(((atan2(K,T)*)/3.14159265)+);
- conversion(Roll); //横滚角0-360度
- //conversion(Pitch); //俯仰角0-360度
- SendData(bai);
- SendData(shi);
- SendData(ge);
- SendData(0x0d);
- SendData(0x0a);//换行,回车
- Delay();
- }
- }
STC单片机串口输出ADXL335角度值的更多相关文章
- 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别
STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...
- STC单片机控制28BYJ-48步进电机
STC单片机4*4按键控制步进电机旋转 28BYJ-48型步进电机说明 四相永磁式的含义 28BYJ-48工作原理 让电机转起来 最简单的电机转动程序 电机转速缓慢的原因分析 便于控制转过圈数的改进程 ...
- STC 单片机ADC实现原理
模数转换器原理 数模转换器( analog to digitI converter,ADC),简称为A/D,ADC是链接模拟世界和数字世界的桥梁.它用于将连续的模拟信号转换为数字形式离散信号.典型的, ...
- STC单片机Flash做EEPROM的代码
STC官方给出的建议: /***************************************************************Author:Liming*** * @brie ...
- STC单片机 IAP(EEPROM)的使用
STC89C51.52内部都自带有2K字节的EEPROM,54.55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次 ...
- STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载
//为了方便大家调试,另附程序工程共大家下载,下载地址:https://www.90pan.com/b1908750 //************************** //程序说明:stc ...
- TI CC2541的串口输出.
http://blog.csdn.net/feilusia/article/details/47431659 基本上看上面这个博客的. 重点是: 1. 关闭流控, 在npi.h里面, 将 #defin ...
- c++ 弧度值与角度值的转换
Rad_to_deg --- 弧度_到_角度 的 比率Rad_to_deg = 45.0 / atan(1.0): 弧度值到角度值的转换 用 角度 = 弧度值* Rad_to_deg 角度值到弧度值的 ...
- verilog实验3:AD转换后串口输出到PC端
一.实验任务 通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上.此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配.等待串口发送完后,再进行下一次AD转换. ...
随机推荐
- 【Java】阿里巴巴Java开发手册(纪念版)
下载地址:(最新纪念版 2017-11-30 V1.3.1) <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断的完善,系统化 ...
- 如何使用Android studio打开eclipse项目
转: http://blog.csdn.net/zcw93219/article/details/50770445
- 基于ARM的模拟器
ARM的ARMulator: ARMulator 是一个在 ARM 公司推出的集成开发环境 ADS (ARM Developer Suite)中提供的指令集模拟器.它与运行在通用计算机(通常是x86体 ...
- mac切换root
方法一: sudo -i sudo su或是su. 转自:http://blog.csdn.net/duanyipeng/article/details/8621967
- tail 命令
转自:http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项 ...
- git Alias 设置
git Alias 设置 Git 使用比較多的话能够设置一些命令的 Alias ,简单的说就是用简写取代整个完整的命令. 如co 代表 checkout. Mac下,到根文件夹 cd ~ 然后 vi ...
- IO multiplexing 与 非阻塞网络编程
使用I/O multipexing 的网络编程中,一般需要采用非阻塞网络编程的风格,防止服务端在处理高连接量大时候阻塞在某个文件描述符上面,比如某个socket 有大量的数据需要写,但是内核发送缓冲区 ...
- MyBatis - (一) 基本数据操作命令和简单映射
1. 简单的select映射 <mapper namespace="com.mybatis3.mappers.StudentMapper"> <select id ...
- thick置备和 thin置备,克隆,模板和快照
共享shared VMDK和共享RDM实验,参见http://wenku.it168.com/d_000773128.shtml 假如你有一个磁盘是100G的虚拟机,磁盘格式是厚置备,即Thick,当 ...
- stingray 页面布局与设计
前言 前面我们已经了解了系统中的HTML组件,现在我们就可以开始用这些组件来设计页面了,他们就像是一块块小积木,我们要盖起高楼大厦. 两种页面容器组件 我们将关联性较强的多个HTML组件放到一个容器组 ...