模数转换ADC0804的应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模数转换ADC0804的应用.doc

模数转换ADC0804的应用 [实验要求] 从ADC0804 的模拟量通道输入0-5V 之间的模拟量,通过ADC0804 转换成数字量送给单片机,经单片机处理后在数码管上以十进制形成显示出来。 说明:2006年9月份之前购买TX-1B单片机学习板的用户光盘中ADC0804的源程序编译后不能正常运行,但光盘中的BIN下载文件可正常运行,正确的源程序现在改正如下. ?[实验目的] ???? 学习如果用单片机控制ADC0804芯片进行数模转换,掌握数码管动态扫描显示的原理。 动态扫描:就六位数码管显示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信号。 ? ?[硬件电路] [源代码] //拧动AD旁边的电位器,会在数码管的前三位显示0-255之间的数//值。这就是把模拟信号转换成数字信号,即模数转换。 #includereg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit adrd=P3^7;????????????????????????? //IO口定义 sbit adwr=P3^6; sbit diola=P2^5; sbit dula=P2^6; sbit wela=P2^7; unsigned char j,k,adval; void delay(unsigned char i)??//延时程序 { ? for(j=i;j0;j--) ??? for(k=125;k0;k--); } uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,????//数码管编码 ??????????????????????? 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void display(uchar bai_c,uchar sh_c,uchar g_c)???//显示程序 {? ?? P0=table[bai_c];??//显示百位 ?? dula=1; ?? dula=0; ?? P0=0xfe; ?? wela=1; ?? wela=0; ?? delay(5); ?? dula=0; ?? P0=table[sh_c];??//显示十位 ?? dula=1; ?? dula=0; ?? wela=0; ?? P0=0xfd; ?? wela=1; ?? wela=0; ?? delay(5); ?? P0=table[g_c];??//显示个位 ?? dula=1; ?? dula=0; ?? P0=0xfb; ?? wela=1; ?? wela=0; ?? delay(5); } void main()??//?主程序 { ? uchar a,A1,A2,A2t,A3; ??? while(1) ? { ??? wela=1; ??? P0=0;?????????????????????? //选通ADCS ??? adwr=0;???//AD写入(随便写个什么都行,主要是为了启动AD转换) ??? _nop_(); ??? adwr=1; ??? P0=0xff;??????????????????? //关闭ADCS ??? delay(10); ??? wela=0;???????????????????? //关闭有AD片选信号锁存器的锁存端以防止在操作数码管时使AD的片选发生变化 ?????? for(a=20;a0;a--)??????? //需要注意

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档