单片机课程设计--单通道模拟量采集器.docVIP

单片机课程设计--单通道模拟量采集器.doc

  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文档。上传文档
查看更多
单片机课程设计--单通道模拟量采集器

实验四 单通道模拟量采集器(A/D) 实验目的 在实践中加深理解PIC单片机片内ADC模块功能; 理解和掌握A/D转换的编程方法; 熟悉C语言中的算术运算符指令。 实验器材 一台PC机和一块万用表; 一套PIC仿真编程器教学系统(仿真编程器+开发板+数据线+9V电源+万用表)。 实验原理 硬件原理图 电路功能: 连接在RA0/AN0引脚上的1K微调电阻RP2充当模拟量提供者。当利用小改锥旋转其芯轴,可以提供一量值在VDD—VSS范围内的模拟电压。启动A/D转换过程,利用开发板上的6个数码管中的第1,2,3个数码管作为输出显示器件,把每次A/D转换产生的结果显示在这3个数码管上。详见电路图。 软件设计思路和程序清单: 本例的软件设计思路: 转换结果采用了左对齐方式。忽略了最低2位,将10位AD当做8位来用了,A/D转换的时钟源选用了系统周期的8倍,本例对于ADC的电压基准要求不高我们就选用了电源电压VDD和VSS作为基准电压,对于A/D转换过程是否完成也没有利用ADC模块的中断功能而是以软件方式查询其状态兼控制位GO/DONE是否被硬件自动清零。本例中选用的模拟通道为AN0。 参考程序清单如下: /********************************************************* * Copyright (c) 2007, Guangdong Vocational College of Industry and Commerce * All rights reserved: RD Team * 文件名称: PIC16F877--10BITAD.c * 摘 要: * 版 本: V1.0 * 作 者: Chunru_Xiong * 完成日期: 2007年3月26日 **********************************************************/ #include pic.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //共阴极数码管0--9字符表 Const uchar led[10]= { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; uchar ADResult0; void display(); void delay(uint); void delayus(); //系统各I/O口初始化子程序 void initial() { PORTE=0x00; //E口输出0 PORTD=0x00; //D口输出0 TRISA=0X01; //A口RA0作为输入,其余作为输出 TRISD=0X00; // D口作为段码驱动,全部为输出 TRISE=0X00; // E口作为位选通,全部为输出 ADCON0=0x41; //选择A/D通道为RA0,打开A/D转换器 //在工作状态,且使A/D转换时钟源为FOSC/8 ADCON1=0X0E; //转换结果左对齐,只选1个A/D通道RA0/AN0 //选择VDD和VSS作参考源,(分辩率取8位) } //延时子程序 void delay(uint x) { uint j; while(x--) { for(j=5535;--j;); } } //延时子程序 void delayus() { uint j; for(j=1000;--j;); } //显示初始化子程序 void initdis( ) { PORTE=0x00; //选通数码管1 PORTD=0x3F; PORTE=0x01; //选通数码管2 PORTD=0x3F; PORTE=0x02; //选通数码管3 PORTD=0x3F; } //读AD值 void ADReadFunc() { ADCON0=0x41; delayus(); ADGO=1; while(ADGO); ADResult0=ADRESH; } //显示子程序 void display() { uchar ADData1,ADData2,ADData3; PORTE=0xFF; PORTD=0XFF; ADData1=ADResult0/100; PORTD=led[ADData1]; PORTE=0x02; //选通数码管3 delayus(); ADData2=(ADResult0-ADData1*100)/10; PORTD=led

文档评论(0)

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

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

1亿VIP精品文档

相关文档