//实验目的:熟悉A/D转换//软件思路:选择RA0做为模拟输入通道;//结果只取低8位//连续转换5次再求平均值做为转换结果//结果送数码管的高低3位显示//硬件要求:跳线J18接通//拨码开关S6全部置ON,S5第4-6位置ON,第1-3位置OFF//为不影响结果,其他拨码开关置OFF。#includepic.h//包含单片机内部资源预定义__CONFIG(0x1832);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡constcharTABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};//定义常数0-9的数据表格voidDELAY();//delay函数申明voidinit();//I/O口初始化函数申明voiddisplay(intx);//显示函数申明//------------------------------------------------//主程序开始voidmain(){intresult=0x00;//定义转换结果寄存器while(1)//死循环{inti;//定义循环次数控制寄存器result=0x00;//转换结果清0for(i=5;i0;i--)//求5次转换结果的平均值{init();//调用初始化函数ADGO=0X1;//开启转换过程while(ADGO);//等待转换完成result=result+ADRESL;//累计转换结果}result=result/5;//求5次结果的平均值display(result);//调用显示函数}}//-----------------------------------------------//初始化函数voidinit(){PORTA=0XFF;PORTD=0XFF;//熄灭所有显示TRISA=0X1;//设置RA0为输入,其他为输出TRISD=0X00;//设置D口全为输出ADCON1=0X8E;//转换结果左对齐,RA0做模拟输入口,其它做普通I/OADCON0=0X41;//系统时钟Fosc/8,选择RA0通道,允许ADC工作DELAY();//保证采样延时}//----------------------------------------------//延时程序voidDELAY()//延时程序{inti;//定义整形变量for(i=0x100;i--;);//延时}//-----------------------------------------------//显示函数voiddisplay(intx){intbai,shi,ge,temp;//定义4个临时变量temp=x;//暂存AD转换的结果bai=temp/0x64;//求显示的百位shi=(temp%0x64)/0xa;//求显示的十位ge=(temp%0x64)%0xa;//求显示的个位PORTD=TABLE[bai];//查表得百位显示的代码PORTA=0x1f;//RA3输出低电平,点亮百位显示DELAY();//延时一定时间,保证显示亮度PORTD=TABLE[shi];//查表得十位显示的代码PORTA=0x2F;//RA4输出低电平,点亮十位显示DELAY();//延时一定时间,保证亮度PORTD=TABLE[ge];//求个位显示的代码PORTA=0x37;//RA5输出低电平,点亮个位显示DELAY();//延时一定时间,保证亮度}