pic单片机ad转换c程序用的这段程序意思是什么

单片机的AD转换程序_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机的AD转换程序
你可能喜欢当前位置: >>
STC单片机AD转换程序设计
#include &reg52.H& #include &intrins.H& sfr P1_ADC_EN = 0x97; //A/D 转换功能 功能允许寄存器 功能 sfr ADC_CONTR = 0xC5; //A/D 转换控制寄存器 sfr ADC_DATA = 0xC6; //A/D 转换结果寄存器 sfr P1M0=0x91; sfr P1M1=0x92; #define
#defin void delay(uchar delay_time) // 延时函数 { for (n=0;n&delay_n++) { for(m=0;m&10000;m++); } } uchar get_AD_result(uchar channel) { uchar AD_finished = 0; // 存储 A/D 转换标志 ADC_DATA = 0; ADC_CONTR = // 选择 A/D 当前通道 电压达到稳定 delay(1); //使输入电压 电压 ADC_CONTR |= 0x08; // 令 ADC_START = 1, 启动 A/D 转换 AD_finished = 0; while ( AD_finished == 0 ) // 等待 A/D 转换结束 { AD_finished = (ADC_CONTR & 0x10); //, ADC_FLAG ==1 测试 A/D 转换结束否 } ADC_CONTR &= 0xF7; // 令 ADC_START = 0, 关闭 A/D 转换, return (ADC_DATA); // 返回 A/D 转换结果 } void main() { P1 = P1 | 0x03; // ,P1.0,P1.1 为 A/D 转换,即通道 0 与 1 P1_ADC_EN = 0x03; //, P1 的 P1.0,P1.1 设置为 A/D 转换输 入脚 // 断开 P1.0,P1.1 内部上拉电阻 电阻 while(1) { get_AD_result(0); delay(200); get_AD_result(1); delay(200); } }
*本程序 AD 部分使用了深圳宏晶公司官方 AD 转换示范程序修改, 特此鸣 谢 */ /*使用 STC12C5A60S2 1T 单片机,12M 外部晶振, Keil V3 编译通过,AD 转换脚...STC单片机AD转换并显示在1602液晶上_计算机软件及应用_IT/计算机_专业资料。/*-...程序创建时间:2015 年 11 月 9 日 20:47:45 ---*/ /*---液晶显示内容...STC12C5A60S2单片机的AD转换(8位)_计算机硬件及网络_IT/计算机_专业资料。A/D 转换测试程序 #include “stc12c5a.h”//头文件在 STC 公司主页上下载 #incl...STC12C5A60S2单片机的AD转换(8位)_计算机软件及应用_IT/计算机_专业资料。该AD转换程序只用于采集数据,无串口通信A/D 转换测试程序(ADC 查询方式) #include “...实验5 STC 单片机 ADC 转换实验-V.实验目的学习 STC12C5A 单片机 ADC 知识; 2.实验设备硬件:12 号节点,串口线; 软件:Keil u Vision4 编译软件,...stc12c5410ad单片机程序_电子/电路_工程科技_专业资料。用其内部AD动态采集电压,...开始转换 //等待 AD 转换结束 //转换结束 //读取转换结果 //将 ADC_FLAG ...STC12C5A60S2单片机AD转换程序_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 STC12C5A60S2单片机AD转换程序_信息与通信_工程科技_专业...STC12LE5A60S2单片机AD转换程序_信息与通信_工程科技_专业资料。STC12LE5A60S2 单片机 AD 转换程序 /*** 程序功能:用 STC12LE5A32S2 的内部 10 位 AD 转...stc12c5a56s2单片机AD转换+LED显示程序_计算机软件及应用_IT/计算机_专业资料。...STC单片机AD转换程序设计... 2页 免费 验证过的STC12C5A60S2单... 8页 ...STC12C5A60S2 系列单片机 AD 功能详解作者:裴博宇 作者原本旨在对 STC12C5A...AD 转换函数的编写 AD 转换函数编写时,我们设计函数返回值为转换结果,函数参数包括...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。单片机练习 - AD转换
10:54:49来源: eefocus 关键字:&&
继续像昨天一样, 今天也用TX-B参照模数转换ADC0804的应用中的实验要求和源代码, 自己也改进了一些代码.ADC0804与的连接电路图:6位与单片机的连接电路图数码管动态扫描显示的原理:就六位数码管显示123456举例说明如下:先让第一个数码管显示1,其余的全部不亮,1大约亮几毫秒,然后熄灭,紧接着立即让第二个数码管显示2,其余的全部不亮,2同样亮几毫秒,依次这样亮到第六个数码管,然后再回来显示1,如此这样以很快的速度不断循环下去,由于人眼的大约为20毫秒左右,所以是感觉不出有不亮的数码管存在的,看见的是六个数码管同时在显示,数值是123456,如果我们把这个过程一点点放慢,看见的是从第一个数码管显1,然后移到第二个再显2,。。。也就是说在任一时刻只有一位数码管是亮的。ADC0804: ADC0804是8位全MOS中速A/D 转换器、它是逐次逼近式A/D 转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为100us。ADC0804 转换时序是:当CS=0 许可进行A/D 转换。WR由低到高时,A/D开始转换,一次转换一共需要66-73 个时钟周期。CS与WR同时有效时启动A/D转换,转换结束INTR 信号(有效),可供查询或者中断信号。在CS和RD 的控制下可以读取数据结果。本实验没有使用INTR信号。源代码:ADC0804& 1# & 2//读取通过ADC0804将转换成, 并显示相应的数值& 3#include <intr.H> &//要使用到_nop_();函数, 延时一个空操作时间& 4& 5# uchar unsigned char& 6& 7unsigned char j,& 8//延时函数, 例i=10,则大概延时10ms.& 9 delay(unsigned char i)&10{&11 & &for(j = j > 0; j--)&12 & &{&13 & & & &for(k = 125; k > 0; k--);&14 & &}&15}&16&17unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,&18 & &0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F数码管的编码(共阴极)&19&20//控制数码管段选的锁存器锁存端 & 下降沿过后锁存,即先令dula = 1,再令dula=0,完成锁存&21sbit dula=P2^6; &&22//控制数码管位选的锁存器锁存端 & 过程如dula&23sbit wela=P2^7;&24sbit adrd = P3^7; &//一个上升沿脉冲, 打开读取ADC&25sbit adwr = P3^6; &//一个上升沿脉冲, 启动ADC&26uchar ds[] = {0, 0, 0}; //存放转换结果&27sbit s = P0^7; &//ADC的片选, 低电平有效&28&29//datas[0]百位数字,datas[1]十位, datas[2]个位&30void dlay(uchar datas[])&&31{&32 & &&33 & &for(count = 0; count < 3; count++)&34 & &{&35 & & & &//片选&36 & & & &wela = 0;&&37 & & & &P0 = ((0xfe <> (8 - count))) & 0x7f; //选择第(count + 1) 个数码管&38 & & & &wela = 1; //打开锁存, 给它一个下降沿量&39 & & & &wela = 0;&40 & & & &//段选&41 & & & &dula = 0;&42 & & & &P0 = table[datas[count]]; &//显示数字&43 & & & &dula = 1; &//打开锁存, 给它一个下降沿量&44 & & & &dula = 0;&45 & & & &delay(5); //延时5ms, 即亮5ms&46&47 & & & &//清除段先, 让数码管灭, 去除对下一位的影响, 去掉高位对低位重影&48 & & & &//若想知道影响效果如何, 可自行去掉此段代码&49 & & & &//因为数码管是共阴极的, 所有灭的代码为: 00H&50 & & & &dula = 0;&51 & & & &P0 = 0x00; &//显示数字&52 & & & &dula = 1; //打开锁存, 给它一个下降沿量&53 & & & &dula = 0;&54 & &}&55}&56&57//启动ADC&58void ADStart()&59{&60 & &adcs = 0; &//选中ADC&61 & &_nop_();&62 & &adwr = 0;&63 & &_nop_();&64 & &adwr = 1; &//一个上升沿脉冲&65 & &_nop_();&66 & &adcs = 1;&67}&68&69//读ADC&70uchar ADRead()&71{&72 & &&73 & &adcs = 0; //选中ADC&74 & &_nop_();&75 & &adrd = 0; //准备读取&76 & &_nop_();&77 & &_nop_(); &&78 & &tmp = P1; &//读取ADC数据&79 & &adrd = 1;&80 & &_nop_();&81 & &adcs = 1;&82 & &&83}&84&85void main()&86{&87 & &uchar adve,&88 & &&89 & &(1)&90 & &{&91 & & & &//启动&92 & & & &ADStart();&93 & & & &//读AD&94 & & & &advalue = ADRead();&95 & & & &&96 & & & &ds[0] = advalue / 100; & & & & & & //百位&97 & & & &ds[1] = (advalue % 100) / 10; & & &//十位&98 & & & &ds[2] = advalue % 10; & & & & & &//个位&99 & & & & //循环显示五十次, 再去电压, 留足够的时间让ADC0804完成模数转换100 & & & &for(icount = 0; icount < 50; icount++)101 & & & &{102 & & & & & &display(ds);103 & & & &}104 & &}105}特别对于数码管显示函数display()&1//datas[0]百位数字,datas[1]十位,&datas[2]个位&2void&display(uchar&datas[])&&3{&4&&&&uchar&&5&&&&for(count&=&0;&count&<&3;&count++)&6&&&&{&7&&&&&&&&//片选&8&&&&&&&&wela&=&0;&&9&&&&&&&&P0&=&((0xfe&<>&(8&-&count)))&&&0x7f;&//选择第(count&+&1)&个数码管10&&&&&&&&wela&=&1;&//打开锁存,&给它一个下降沿量11&&&&&&&&wela&=&0;12&&&&&&&&//段选13&&&&&&&&dula&=&0;14&&&&&&&&P0&=&table[datas[count]];&&//显示数字15&&&&&&&&dula&=&1;&&//打开锁存,&给它一个下降沿量16&&&&&&&&dula&=&0;17&&&&&&&&delay(5);&//延时5ms,&即亮5ms1819&&&&&&&&//清除段先,&让数码管灭,&去除对下一位的影响,&去掉高位对低位重影20&&&&&&&&//若想知道影响效果如何,&可自行去掉此段代码21&&&&&&&&//因为数码管是共阴极的,&所有灭的代码为:&00H22&&&&&&&&dula&=&0;23&&&&&&&&P0&=&0x00;&&//显示数字24&&&&&&&&dula&=&1;&//打开锁存,&给它一个下降沿量25&&&&&&&&dula&=&0;26&&&&}27}若去掉将数码灭掉的那4行代码, 显示效果将如下:而最理想的效果应如下:这是因为74HC573的锁存, 上一位的结果被锁存了, 在片选后, 也被显示在选中的位上.只要在片选前将锁存的结果清除, 即可消除这个影响.
关键字:&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。基于单片机实现AD转换程序_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于单片机实现AD转换程序
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
&#xe64e;加入VIP
还剩2页未读,
定制HR最喜欢的简历
你可能喜欢51单片机AD转换的程序
void&Read_init&(unsigned&char&CHA){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&CHA&&=&0x07;&&&&&&&&&&&&//选择ADC的8个接口中的一个(0000&0111&清0高5位)&&
&&&&ADC_CONTR&=&0x40;&&&&&&&//ADC转换的速度(0XX0&0000&其中XX控制速度,请根据数据手册设置)&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&CHA;&&&&&&&//选择A/D当前通道&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&0x80;&&&&&&//启动A/D电源&&
&&&&DELAY_MS(1);&&&&&&&&&&&&//使输入电压达到稳定(1ms即可)&&
unsigned&char&Read&(void){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&ADC_CONTR&|=&0x08;&&&&&&//启动A/D转换(0000&1000&令ADCS&=&1)&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&while&(AD_FIN&==0){&&&&&//等待A/D转换结束&&
&&&&&&&&AD_FIN&=&(ADC_CONTR&&&0x10);&//0001&0000测试A/D转换结束否&&
&&&&ADC_CONTR&&=&0xE7;&&&&&&//1111&0111&清ADC_FLAG位,&关闭A/D转换,&&&
return&(ADC_DATA);&&&&&&&&&&//返回A/D转换结果(8位)&&
以上- 8位ADC程序模块(适用于STC12C2052AD系列)&
#include&&STC12C2052AD.H&&//单片机头文件&&
#include&&intrins.h&&&//51基本运算(包括_nop_空函数)&&
void&DELAY_MS&(unsigned&int&a){&&
&&&&unsigned&int&i;&&
&&&&while(&a--&!=&0){&&
&&&&&&&&for(i&=&0;&i&&&600;&i++);&&
void&UART_init&(void){&&
&&&&//EA&=&1;&//允许总中断(如不使用中断,可用//屏蔽)&&
&&&&//ES&=&1;&//允许UART串口的中断&&
&&&&TMOD&=&0x20;&&&&//定时器T/C1工作方式2&&
&&&&SCON&=&0x50;&&&&//串口工作方式1,允许串口接收(SCON&=&0x40&时禁止串口接收)&&
&&&&TH1&=&0xF3;&//定时器初值高8位设置&&
&&&&TL1&=&0xF3;&//定时器初值低8位设置&&
&&&&PCON&=&0x80;&&&&//波特率倍频(屏蔽本句波特率为2400)&&
&&&&TR1&=&1;&&&&//定时器启动&&&&&&
void&UART_T&(unsigned&char&UART_data){&//定义串口发送数据变量&&
&&&&SBUF&=&UART_&&&//将接收的数据发送回去&&
&&&&while(TI&==&0);&&&&&//检查发送中断标志位&&
&&&&TI&=&0;&&&&&&&&&//令发送中断标志位为0(软件清零)&&
void&Read_init&(unsigned&char&CHA){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&CHA&&=&0x07;&&&&&&&&&&&&//选择ADC的8个接口中的一个(0000&0111&清0高5位)&&
&&&&ADC_CONTR&=&0x40;&&&&&&&//ADC转换的速度(0XX0&0000&其中XX控制速度,请根据数据手册设置)&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&CHA;&&&&&&&//选择A/D当前通道&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&0x80;&&&&&&//启动A/D电源&&
&&&&DELAY_MS(1);&&&&&&&&&&&&//使输入电压达到稳定(1ms即可)&&
unsigned&char&Read&(void){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&ADC_CONTR&|=&0x08;&&&&&&//启动A/D转换(0000&1000&令ADCS&=&1)&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&while&(AD_FIN&==0){&&&&&//等待A/D转换结束&&
&&&&&&&&AD_FIN&=&(ADC_CONTR&&&0x10);&//0001&0000测试A/D转换结束否&&
&&&&ADC_CONTR&&=&0xE7;&&&&&&//1111&0111&清ADC_FLAG位,&关闭A/D转换,&&&
return&(ADC_DATA);&&&&&&&&&&//返回A/D转换结果(8位)&&
void&main&(void){&&
&&&&unsigned&char&R;&&
&&&&UART_init();//串口初始程序&&
&&&&Read_init(0);//ADC初始化&&
&&&&P1M0&=&0x01;&//P1.7~.0:0000&0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。&&
&&&&P1M1&=&0x00;&//P1.7~.0:0000&0000(强推)&&
&&&&while(1){&&
&&&&&&&&R&=&Read&();&&
&&&&&&&&UART_T&(R);&//串口小秘书,将ADC读出值送入串口显示&&
以上- 8位ADC应用实例(适用于STC12C2052AD系列)&
void&Read_init&(unsigned&char&CHA){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&CHA&&=&0x07;&&&&&&&&&&&&//选择ADC的8个接口中的一个(0000&0111&清0高5位)&&
&&&&ADC_CONTR&=&0x40;&&&&&&&//ADC转换的速度(0XX0&0000&其中XX控制速度,请根据数据手册设置)&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&CHA;&&&&&&&//选择A/D当前通道&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&0x80;&&&&&&//启动A/D电源&&
&&&&DELAY_MS(1);&&&&&&&&&&&&//使输入电压达到稳定(1ms即可)&&
unsigned&int&ADC_Read&(void){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&ADC_CONTR&|=&0x08;&&&&&&//启动A/D转换(0000&1000&令ADCS&=&1)&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&while&(AD_FIN&==0){&&&&&//等待A/D转换结束&&
&&&&&&&&AD_FIN&=&(ADC_CONTR&&&0x10);&//0001&0000测试A/D转换结束否&&
&&&&ADC_CONTR&&=&0xE7;&&&&&&//1111&0111&清ADC_FLAG位,&关闭A/D转换,&&&
return&(ADC_RES*4+ADC_RESL);//返回A/D转换结果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中)&&
10位ADC程序模块(适用于STC12C5A60S2系列)&
#include&&STC12C5A60S2.H&&//单片机头文件&&
#include&&intrins.h&&&//51基本运算(包括_nop_空函数)&&
void&DELAY_MS&(unsigned&int&a){&&
&&&&unsigned&int&i;&&
&&&&while(&a--&!=&0){&&
&&&&&&&&for(i&=&0;&i&&&600;&i++);&&
void&UART_init&(void){&&
&&&&//EA&=&1;&//允许总中断(如不使用中断,可用//屏蔽)&&
&&&&//ES&=&1;&//允许UART串口的中断&&
&&&&TMOD&=&0x20;&&&&//定时器T/C1工作方式2&&
&&&&SCON&=&0x50;&&&&//串口工作方式1,允许串口接收(SCON&=&0x40&时禁止串口接收)&&
&&&&TH1&=&0xF3;&//定时器初值高8位设置&&
&&&&TL1&=&0xF3;&//定时器初值低8位设置&&
&&&&PCON&=&0x80;&&&&//波特率倍频(屏蔽本句波特率为2400)&&
&&&&TR1&=&1;&&&&//定时器启动&&&&&&
void&UART_T&(unsigned&char&UART_data){&//定义串口发送数据变量&&
&&&&SBUF&=&UART_&&&//将接收的数据发送回去&&
&&&&while(TI&==&0);&&&&&//检查发送中断标志位&&
&&&&TI&=&0;&&&&&&&&&//令发送中断标志位为0(软件清零)&&
void&Read_init&(unsigned&char&CHA){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&CHA&&=&0x07;&&&&&&&&&&&&//选择ADC的8个接口中的一个(0000&0111&清0高5位)&&
&&&&ADC_CONTR&=&0x40;&&&&&&&//ADC转换的速度(0XX0&0000&其中XX控制速度,请根据数据手册设置)&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&CHA;&&&&&&&//选择A/D当前通道&&
&&&&_nop_();&&
&&&&ADC_CONTR&|=&0x80;&&&&&&//启动A/D电源&&
&&&&DELAY_MS(1);&&&&&&&&&&&&//使输入电压达到稳定(1ms即可)&&
void&ADC_Read&(void){&&
&&&&unsigned&char&AD_FIN=0;&//存储A/D转换标志&&
&&&&ADC_CONTR&|=&0x08;&&&&&&//启动A/D转换(0000&1000&令ADCS&=&1)&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&_nop_();&&
&&&&while&(AD_FIN&==0){&&&&&//等待A/D转换结束&&
&&&&&&&&AD_FIN&=&(ADC_CONTR&&&0x10);&//0001&0000测试A/D转换结束否&&
&&&&ADC_CONTR&&=&0xE7;&&&&&&//1111&0111&清ADC_FLAG位,&关闭A/D转换,&&&
void&main&(void){&&
&&&&UART_init();//串口初始程序&&
&&&&Read_init(0);//ADC初始化&&
&&&&P1M1&=&0x01;&//P1.7~P1.0:0000&0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。&&
&&&&P1M0&=&0x00;&//P1.7~P1.0:0000&0000(强推)&&
&&&&while(1){&&
&&&&&&&&ADC_Read&();//调用ADC转换程序&&
&&&&&&&&UART_T&(ADC_RES);&//串口小秘书,将ADC读出值高8位送入串口&&0000&0000&&
&&&&&&&&UART_T&(ADC_RESL);&//串口小秘书,将ADC读出值低2位送入串口&&XXXX&XX00&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 单片机 进制转换程序 的文章

 

随机推荐