| #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);
 }
 
 |