ADC获取滑块的值(8通道)
#include "TgcConfig.h"
#include "my_usb.h"
/*******************************************************************************
* Function Name : TgcAdcInitial
* Description : ADC1³õʼ»¯£¬8¹æÔòͨµÀ
* Input : ÎÞ
* Return : ÎÞ
*******************************************************************************/
void TgcAdcInitial(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //ʹÄÜADC1ͨµÀʱÖÓ
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //ÉèÖÃADC·ÖƵÒò×Ó6 72M/6=12,ADC×î´óʱ¼ä²»Äܳ¬¹ý14M
//PA1 ×÷ΪģÄâͨµÀÊäÈëÒý½Å
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈëÒý½Å
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //¸´Î»ADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC¹¤×÷ģʽ:ADC1ºÍADC2¹¤×÷ÔÚ¶ÀÁ¢Ä£Ê½
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //Ä£Êýת»»¹¤×÷ÔÚµ¥Í¨µÀģʽ
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //Ä£Êýת»»¹¤×÷ÔÚµ¥´Îת»»Ä£Ê½
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ת»»ÓÉÈí¼þ¶ø²»ÊÇÍⲿ´¥·¢Æô¶¯
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADCÊý¾ÝÓÒ¶ÔÆë
ADC_InitStructure.ADC_NbrOfChannel = 1; //˳Ðò½øÐйæÔòת»»µÄADCͨµÀµÄÊýÄ¿
ADC_Init(ADC1, &ADC_InitStructure); //¸ù¾ÝADC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèADCxµÄ¼Ä´æÆ÷
ADC_Cmd(ADC1, ENABLE); //ʹÄÜÖ¸¶¨µÄADC1
ADC_ResetCalibration(ADC1); //ʹÄܸ´Î»Ð£×¼
while(ADC_GetResetCalibrationStatus(ADC1)); //µÈ´ý¸´Î»Ð£×¼½áÊø
ADC_StartCalibration(ADC1); //¿ªÆôADУ׼
while(ADC_GetCalibrationStatus(ADC1)); //µÈ´ýУ׼½áÊø
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ
}
/*******************************************************************************
* Function Name : AdcGetData
* Description : »ñȡͨµÀÖµ
* Input : ͨµÀ
* Return : ÎÞ
*******************************************************************************/
int AdcGetData(int Channel)
{
int GetData;
//ÉèÖÃÖ¸¶¨ADCµÄ¹æÔò×éͨµÀ£¬Ò»¸öÐòÁУ¬²ÉÑùʱ¼ä
ADC_RegularChannelConfig(ADC1, Channel, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADCͨµÀ,²ÉÑùʱ¼äΪ239.5ÖÜÆÚ
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//µÈ´ýת»»½áÊø
GetData = ADC_GetConversionValue(ADC1);
GetData = GetData * 100 / 4095; //Ó³Éäµ½0-100
return GetData; //·µ»Ø×î½üÒ»´ÎADC1¹æÔò×éµÄת»»½á¹û
}
/*******************************************************************************
* Function Name : TgcGetData
* Description : »ñȡÿ¸öͨµÀƽ¾ùÖµ£¬È¡10´Î
* Input : ͨµÀ
* Return : ƽ¾ùÖµ
*******************************************************************************/
int TgcGetData(int Channel)
{
int i;
int DataSum = 0;
for(i = 10; i > 0; i--)
DataSum = DataSum + AdcGetData(Channel);
return DataSum/10;
}
/*******************************************************************************
* Function Name : TgcSendUsb
* Description : ͨ¹ýUSB½«Ã¿¸öͨµÀÖµ·¢Ë͸øÉÏλ»ú
* Input : ÎÞ
* Return : ÎÞ
*******************************************************************************/
void TgcSendUsb(void)
{
uint8_t UsbDataSend[4];
UsbDataSend[0] = 0x02;
UsbDataSend[2] = 0x00;
if(TgcTimeCnt > 20)
{
TgcTimeCnt = 0;
//TGCͨµÀ0·¢ËÍ
UsbDataSend[1] = 0x00; //channel_0
UsbDataSend[3] = TgcGetData(TgcChannel_0);
if(UsbDataSend[3] != TgcOldData_0)
UsbSendData(UsbDataSend,4);
TgcOldData_0 = UsbDataSend[3];
//TGCͨµÀ1·¢ËÍ
UsbDataSend[1] = 0x01; //channel_1
UsbDataSend[3] = TgcGetData(TgcChannel_1);
if(UsbDataSend[3] != TgcOldData_1)
UsbSendData(UsbDataSend,4);
TgcOldData_1 = UsbDataSend[3];
//TGCͨµÀ2·¢ËÍ
UsbDataSend[1] = 0x02; //channel_2
UsbDataSend[3] = TgcGetData(TgcChannel_2);
if(UsbDataSend[3] != TgcOldData_2)
UsbSendData(UsbDataSend,4);
TgcOldData_2 = UsbDataSend[3];
//TGCͨµÀ3·¢ËÍ
UsbDataSend[1] = 0x03; //channel_3
UsbDataSend[3] = TgcGetData(TgcChannel_3);
if(UsbDataSend[3] != TgcOldData_3)
UsbSendData(UsbDataSend,4);
TgcOldData_3 = UsbDataSend[3];
//TGCͨµÀ4·¢ËÍ
UsbDataSend[1] = 0x04; //channel_4
UsbDataSend[3] = TgcGetData(TgcChannel_4);
if(UsbDataSend[3] != TgcOldData_4)
UsbSendData(UsbDataSend,4);
TgcOldData_4 = UsbDataSend[3];
//TGCͨµÀ5·¢ËÍ
UsbDataSend[1] = 0x05; //channel_5
UsbDataSend[3] = TgcGetData(TgcChannel_5);
if(UsbDataSend[3] != TgcOldData_5)
UsbSendData(UsbDataSend,4);
TgcOldData_5 = UsbDataSend[3];
//TGCͨµÀ6·¢ËÍ
UsbDataSend[1] = 0x06; //channel_6
UsbDataSend[3] = TgcGetData(TgcChannel_6);
if(UsbDataSend[3] != TgcOldData_6)
UsbSendData(UsbDataSend,4);
TgcOldData_6 = UsbDataSend[3];
//TGCͨµÀ7·¢ËÍ
UsbDataSend[1] = 0x07; //channel_7
UsbDataSend[3] = TgcGetData(TgcChannel_7);
if(UsbDataSend[3] != TgcOldData_7)
UsbSendData(UsbDataSend,4);
TgcOldData_7 = UsbDataSend[3];
}
if(Tgc1sCnt > 2000)
{
Tgc1sCnt = 0;
//TGCͨµÀ0·¢ËÍ
UsbDataSend[1] = 0x00; //channel_0
UsbDataSend[3] = TgcGetData(TgcChannel_0);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ1·¢ËÍ
UsbDataSend[1] = 0x01; //channel_1
UsbDataSend[3] = TgcGetData(TgcChannel_1);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ2·¢ËÍ
UsbDataSend[1] = 0x02; //channel_2
UsbDataSend[3] = TgcGetData(TgcChannel_2);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ3·¢ËÍ
UsbDataSend[1] = 0x03; //channel_3
UsbDataSend[3] = TgcGetData(TgcChannel_3);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ4·¢ËÍ
UsbDataSend[1] = 0x04; //channel_4
UsbDataSend[3] = TgcGetData(TgcChannel_4);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ5·¢ËÍ
UsbDataSend[1] = 0x05; //channel_5
UsbDataSend[3] = TgcGetData(TgcChannel_5);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ6·¢ËÍ
UsbDataSend[1] = 0x06; //channel_6
UsbDataSend[3] = TgcGetData(TgcChannel_6);
UsbSendData(UsbDataSend,4);
while(Tgc1sCnt < 20);
Tgc1sCnt = 0;
//TGCͨµÀ7·¢ËÍ
UsbDataSend[1] = 0x07; //channel_7
UsbDataSend[3] = TgcGetData(TgcChannel_7);
UsbSendData(UsbDataSend,4);
}
}
ADC获取滑块的值(8通道)的更多相关文章
- grails项目获取前后台的值
grails项目中前台传值给后台: 加入我有a.gsp这个页面,a.gsp中有如下代码: 姓名:<input type="text" name="xing" ...
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- 在java中获取attr的值
首先说如何获取已经在style里面定义好的attr的值,以colorPrimary为例: TypedValue value = new TypedValue(); mContext.getTheme( ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- RadGrid使用技巧:从RadGrid获取绑定的值
本文主要介绍从RadGrid获取绑定的值,仅适用于Telerik RadControls for asp.net ajax. 获取方式 RadGrid把绑定的值存储在VIewState中,即使View ...
- jQuery easyui combobox获取值|easyui-combobox获取多个值
Query easyui combobox事例: name="language" data-options=" ...
- MVC控制器获取@Html.DropDownList值
MVC控制器获取@Html.DropDownList值 发表于 2014 年 4 月 1 日 作者 efour — 暂无评论 先贴一段代码,演示@Html.DropDownList的使用. 前台 前台 ...
- 获取radio和select的值,获取select的值
获取radio的值 var val=$('input:radio[name="_objId"]:checked').val(); jQuery中获得选中select值 第一种方法$ ...
- jquery 获取属性的值
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr( 属 ...
随机推荐
- Java多线程打辅助的三个小伙子
前言 之前学多线程的时候没有学习线程的同步工具类(辅助类).ps:当时觉得暂时用不上,认为是挺高深的知识点就没去管了.. 在前几天,朋友发了一篇比较好的Semaphore文章过来,然后在浏览博客的时候 ...
- confd+etcd实现高可用自动发现
Confd是什么 Confd是一个轻量级的配置管理工具. 通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload. 对应的后端存储可以是etcd,redi ...
- MySQL优化小建议
背景 "那啥,你过来一下!" "怎么了?我代码都单元测试了的,没出问题啊!"我一脸懵逼跑到运维大佬旁边. "你看看!你看看!多少条报警,赶快优化一下! ...
- Cannot execute request on any known server或DiscoveryClient_UNKNOWN/DESKTOP-MQ8D0C9:8761
报错信息如下: 2018-08-31 11:45:33.619 WARN 1068 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClien ...
- oracle锁表与解表
查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo ...
- XSS攻击之窃取Cookie
10 年前的博客似乎有点老了,但是XSS 攻击的威胁依然还在,我们不得不防. 窃取Cookie是非常简单的,因此不要轻易相信客户端所声明的身份.即便这个Cookie是在数秒之前验证过,那也未必是真的, ...
- 在虚拟机中搭建qduoj(一)——准备工作
为缩减篇幅,已略去ubuntu镜像下载.虚拟机(VirtualBox.VMware)安装等操作,若有疑问请搜索相关教程. 1.虚拟机系统安装 本教程使用Ubuntu16.04 server版本(des ...
- 关于图片适配不同尺寸的image View(实战)
分享人:广州华软 佐罗 一. 前言 在前端开发过程中,设计稿中往往只提供一张图片,但是app内需要用到的尺寸各种各样. 同时图片不仅是信息的直接表达,也会为网站起到美观点缀的作用,图片的变形.过分裁切 ...
- C# 文件绝对路径与相对路径的转换
class Program { const string CONFIG_PATH = @"C:\SoftWare\Config.xml"; const string IMAGE_P ...
- shell 中 if then语句中会跟着-ne -ge之类的参数的含义
if [ 1 -ne 1 ];then...fi这是指当1不等于1时执行then后的语句 -eq:等于-ne:不等于-le:小于等于-ge:大于等于-lt:小于-gt:大于