收藏 分销(赏)

PIC单片机自学手记之ADC采样 采集 模数转换.doc

上传人:s4****5z 文档编号:8820690 上传时间:2025-03-03 格式:DOC 页数:3 大小:27KB 下载积分:10 金币
下载 相关 举报
PIC单片机自学手记之ADC采样 采集 模数转换.doc_第1页
第1页 / 共3页
PIC单片机自学手记之ADC采样 采集 模数转换.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
//ADC采样实验// #include <pic.h> #define uchar unsigned char #define uint unsigned int uchar LED_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//不带小数点的字型码 uchar LED_CODE1[]={0x40,0x79,0x24,0x30,0x19,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//带小数点的字型码 void delay(uchar x); void init(); void display(uchar num1,uchar num2,uchar num3,uchar num4); void beep(); uint get_ad()//整型带返回值子函数 { uint adval,ad;//定义两个无符号整型变量 ADGO=1;//启动AD转换 //while(ADGO);//查询AD转换是否完成,此行可以不用,程序一样运行正常 //if(ADGO==1);//可以采用while查询也可以用if查询AD转换是否完成,此行一样可以不要 //adval=ADRESH;//注释此行可以不要 adval=ADRESH<<8|ADRESL;//ADRESH高8位数据左移8位,然后再与ADRESL低8位数据相加 ad=adval*41;//这里的41是VDD电压,adval的值在0-1023之间,假设adval当前数字量是800,那么800*41=32800 adval=ad/10;//因为我的是4位数码显示,将得到的32800除以10以后给数码管显示当前电压值即:3280(3.28V) return(adval); //返回adval值给主程序调用的地方 } void main() { init();//程序初始化 uint tempad;//定义临时整型变量 uchar s1,s2,s3,s4;//定义4个无符号字符型变量 while(1) { tempad=get_ad();//调用ad子程序 s1=tempad/1000;//将得到的值3280除以1000取商丢去余数,所以s1的值是3(即千位) s2=tempad%1000/100;//3280除1000求余280再除以100取商,所以s2的值是2(取百位) s3=tempad%100/10;//3280除100求余80再除以10取商,所以s3的值是8(取十位) s4=tempad%10;//3280除10求余,余数是0(取个位) display(s1,s2,s3,s4); //给数码管分别显示四位值 /////以下是判断ad采样的电压是否大于4v,大于或等于4v时led等亮///// if(s1>=4)//判断千位值 { RA5=0; } /////////////~~~~~~~~~~~~~~~~~~~~~~~~~~/////////////////////////////////// } } void init() { TRISA=0x01;//RA0设置为输入AN0(AD采集端口) TRISD=0;//D端口全部设置成输出 PORTA=0x01; PORTD=0xFF; TRISE=0; PORTE=0; ADCON0=0x41; ADCON1=0x8e; delay(1);//延时5ms稳定AD采用 } void display(uchar num1,uchar num2,uchar num3,uchar num4) { PORTD=LED_CODE[num4];//数码管个位显示值 PORTA=0xfd;//1111 1101 开数码管个位位选 delay(1); PORTD=LED_CODE[num3];//数码管十位显示值 PORTA=0xfb;//1111 1011 delay(1); PORTD=LED_CODE[num2];//数码管百位显示值 PORTA=0xf7;//1111 0111 delay(1); PORTD=LED_CODE1[num1];//数码管千位显示值(这个值是带小数点的) PORTA=0xef; delay(1); } void delay(uchar x)//5ms延时子函数 { uint y,k; for(y=0;y<x;y++) for(k=0;k<200;k++); } void beep() { RE1=0; delay(20); RE1=1; delay(20); }
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服