收藏 分销(赏)

K10AD转换实例.doc

上传人:仙人****88 文档编号:12073021 上传时间:2025-09-06 格式:DOC 页数:5 大小:26.50KB 下载积分:10 金币
下载 相关 举报
K10AD转换实例.doc_第1页
第1页 / 共5页
K10AD转换实例.doc_第2页
第2页 / 共5页


点击查看更多>>
资源描述
#include "sys.h" #include "delay.h" #include "gpio.h" #include "wdog.h" #include "uart.h" #include "led.h" #include "pit.h" #include "ftm.h" #include "lcd.h" #include "exti.h" #include "adc.h" // K10核心板 // 实验8 ADC 实验 // YANDLD@UPC int main(void) { uint8_t i; DELAY_Init(96); //延时初始化 CORE/SYSTEM CLOCK 96M BUSCLOCK 48M LED_Init(); //LED初始化 LCD_Init(); //SPILCD初始化 BACK_COLOR=BLACK; //背景色黑色 LCD_Clear(BLACK); //黑色背景 POINT_COLOR =0X5458;//前景浅蓝色 LCD_ShowString(30,50," ADC TEST"); LCD_ShowString(30,70," YANDLD@UPC"); LCD_ShowString(10,90, "AD-4 E16:"); LCD_ShowString(10,110,"AD-5 E17:"); LCD_ShowString(10,130,"AD-6 E18:"); LCD_ShowString(10,150,"AD-7 E19:"); //注意单端下只开通ADC0-4,5,6,7通道 其余请自行配置 ADC_Init(ADC0,0,16,4); //ADC0-4通道 PTE16 ADC_Init(ADC0,0,16,5); //ADC0-5通道 PTE17 ADC_Init(ADC0,0,16,6); //ADC0-6通道 PTE18 ADC_Init(ADC0,0,16,7); //ADC0-7通道 PTE19 while(1) { for(i=0;i<4;i++) { LCD_ShowNum(110,90+20*i,ADC_Get(ADC0,i+4)>>8,4,ASCII1608C); //显示AD数据 } LED0=!LED0; DELAY_Ms(100); } } #include "adc.h" //******************************************************************************** //本程序只供学习使用 祝愿每一个参加智能车比赛的队伍都有出色发挥! //硬件 :超核电子K10 核心板 //目标芯片:K10N512VLL10 //作者 :YANDLD 中国石油大学(华东) //修改日期:2012/1/5 //版本:V1.0 //Copyright(C) YANDLD 2012-2022 //All rights reserved //******************************************************************************** //开启adc0或1,默认使用a通道即软件触发,配置时钟源为bus clock,不分频, //转换速度正常,参考电压选择外部电压,配置为软件触发转换 (大部分为默认值) //并进行了校准。这里在单端模式下仅开启adc0的4,5,6,7通道的引脚, //在差分模式下可以开启adc0,1的所有差分通道 //但每次也仅能一个通道进行转换 //////////////////////////////////// //函数名:ADC_Init //功 能:adc初始化 //说 明:adc 模块端口号,在单端模式下代表 ADC0,在差分模式下代表ADC0,ADC1 // diff 测量模式选择,0 代表单端,1 代表差分 // mode 转换精度选择,填写8,10,12,16 这四个数中的一个 // channel 转换的通道选择,在单端模式下仅开启adc0的4,5,6,7通道的引脚, // 在差分模式下可以开启adc0,1的所有差分通道 /////////////////////////////////// void ADC_Init(ADC_Type *adc,uint8_t diff,uint8_t mode, uint8_t channel) { if((uint32_t)adc==ADC0_BASE) SIM->SCGC6|=SIM_SCGC6_ADC0_MASK;//开启模块时钟,参见官方k10手册270页 else SIM->SCGC3|=SIM_SCGC3_ADC1_MASK;//开启模块时钟,参见官方k10手册270页 switch(mode) { case 8: adc->CFG1&=~(ADC_CFG1_MODE_MASK); adc->CFG1|=ADC_CFG1_MODE(0); // 配置为8位精度,参见官方k10手册718页 break; case 10: adc->CFG1&=~(ADC_CFG1_MODE_MASK); adc->CFG1|=ADC_CFG1_MODE(2); //配置为10位精度,参见官方k10手册718页 break; case 12: adc->CFG1&=~(ADC_CFG1_MODE_MASK); adc->CFG1|=ADC_CFG1_MODE(1); //配置为12位精度,参见官方k10手册718页 break; case 16: adc->CFG1&=~(ADC_CFG1_MODE_MASK); adc->CFG1|=ADC_CFG1_MODE(3); //配置为16位精度,参见官方k10手册718页 break; } if(diff==0) { adc->SC1[A]&=~ADC_SC1_DIFF_MASK; //选择为单端模式,参见官方k10手册717页 SIM->SCGC5|=SIM_SCGC5_PORTE_MASK; //开启port口的模块时钟,详见k10手册268页; if(channel<=26) { PORTE->PCR[(channel+12)]&=~(PORT_PCR_MUX_MASK); PORTE->PCR[(channel+12)]|=PORT_PCR_MUX(0); //配置io口为adc通道,详见k10手册238页; } } else adc->SC1[A]|=ADC_SC1_DIFF_MASK; //选择为差分模式,参见官方k10手册717页 } //////////////////////////////////// //函数名: ADC_Get //功 能: 进行一个ad转换 //说 明:adc 模块端口号,在单端模式下代表 ADC0,在差分模式下代表ADC0,ADC1 // channel 转换的通道选择,在单端模式下仅开启adc0的4,5,6,7通道的引脚, // 在差分模式下可以开启adc0,1的所有差分通道,其中DP引脚接高电平,DM引脚接低电平 // 注意:此函数仅返回一个16位的二进制数,在差分模式下用户需要自己编写数据转换程序 /////////////////////////////////// uint16_t ADC_Get(ADC_Type *adc,uint8_t channel) { if(channel>26) return 0; //Channel输入无效则直接返值 adc->SC1[A]&=~(ADC_SC1_ADCH_MASK); adc->SC1[A]|=ADC_SC1_ADCH(channel); //选择通道,参见官方k10手册717页 while((adc->SC1[A]&ADC_SC1_COCO_MASK) == 0x00);//等待转换完成 return adc->R[A]; } //调用内部温度 //返回温度值 比如26.5° 返回265 uint16_t ADC_Temp() { float vtemp; float temp; unsigned int value; // ADC_Init(ADC0,0,16,26); value=ADC_Get(ADC0,26); //以下为复制DEMO的公式 //return value; vtemp=((float)value/65535)*3.3; if(vtemp>=.7012) { temp=(vtemp-.7012)/.001646; } else { temp=(vtemp-.7012)/.001769; } temp=25-temp; temp*=10; //扩大十倍 return ((uint16_t)temp); } #ifndef __adc_h__ #define __adc_h__ //1 头文件 #include <MK10DZ10.H> //******************************************************************************** //本程序只供学习使用 祝愿每一个参加智能车比赛的队伍都有出色发挥! //硬件 :超核电子K10 核心板 //目标芯片:K10N512VLL10 //作者 :YANDLD 中国石油大学(华东) //修改日期:2012/1/5 //版本:V1.0 //Copyright(C) YANDLD 2012-2022 //All rights reserved //******************************************************************************** #define A 0 #define B 1 //3 函数体 //////////////////////////// //开启adc0或1,默认使用a通道即软件触发,配置时钟源为bus clock,不分频, //转换速度正常,参考电压选择外部电压,配置为软件触发转换 (大部分为默认值) //并进行了校准。这里在单端模式下仅开启adc0的4,5,6,7通道的引脚, //在差分模式下可以开启adc0,1的所有差分通道 //但每次也仅能一个通道进行转换 //////////////////////////////////// //////////////////////////////////// //函数名:ADC_Init //功 能:adc初始化 //说 明:adc 模块端口号,在单端模式下代表 ADC0,在差分模式下代表ADC0,ADC1 // diff 测量模式选择,0 代表单端,1 代表差分 // mode 转换精度选择,填写8,10,12,16 这四个数中的一个 // channel 转换的通道选择,在单端模式下仅开启adc0的4,5,6,7通道的引脚, // 在差分模式下可以开启adc0,1的所有差分通道 /////////////////////////////////// void ADC_Init(ADC_Type *adc,uint8_t diff,uint8_t mode, uint8_t channel); //////////////////////////////////// //函数名: ADC_Get //功 能: 进行一个ad转换 //说 明:adc 模块端口号,在单端模式下代表 ADC0,在差分模式下代表ADC0,ADC1 // channel 转换的通道选择,在单端模式下仅开启adc0的4,5,6,7通道的引脚, // 在差分模式下可以开启adc0,1的所有差分通道 // 注意:此函数仅返回一个16位的二进制数,在差分模式下用户需要自己编写数据转换程序 /////////////////////////////////// uint16_t ADC_Get(ADC_Type *adc,uint8_t channel); #endif
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服