⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad2.c

📁 16f877电压表
💻 C
字号:
/***************************************************/
/*内部ADC测试电压演示程序						  */
/*目标器件:PIC16F877A							  */
/*晶振:4.0MHZ		       						  */
/*编译环境:MPLAB V8.00			      		  */
/****************************************************/
//包含头文件
#include<pic.h>                 
/****************************************************************************
共阴LED段码表
****************************************************************************/
const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};  
                              
/***************************************************************************
函数功能:数码管延时子程序
入口参数:
出口参数:
***************************************************************************/
void  DELAY()              
{
   int i;                     //定义整形变量
   for(i=200;i--;);           //延时
}

/****************************************************************************
函数功能:数码管延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(char x,char y) 
{
  char z;
  do{
      z=y;
      do{;}while(--z);
     }while(--x);
}

/****************************************************************************
函数功能:数码管显示子程序
入口参数:x
出口参数:
****************************************************************************/
void display(int x)          
{
   int  ad1,ad2,ad3,ad4;       //定义4个AD转换临时变量
   float temp;
   temp=x*5.0/1023;            //暂存AD转换的结果 10位AD 2的10次方=1024
   ad1=(int)temp;
   ad2=((int)(temp*10)-ad1*10);
   ad3=((int)(temp*100)-ad1*100-ad2*10);
   ad4=((int)(temp*1000)-ad1*1000-ad2*100-ad3*10);

   PORTC=TABLE[ad1]&0X7F;      //查表得个位及小数点显示的代码 B 1110 1111
   PORTA=0xEF;                
   delay(7,80); 
   PORTA=0xFC; 
 
   PORTC=TABLE[ad2];           //查表得小数点后第1位显示的代码 B 1101 1111
   PORTA=0xDF;                
   delay(7,80); 
   PORTA=0xFC; 

   PORTC=TABLE[ad3];           //查表得小数点后第2位显示的代码 B 1111 1011
   PORTA=0xFB;               
   delay(7,80); 
   PORTA=0xFC; 

   PORTC=TABLE[ad4];           //查表得小数点后第3位显示的代码 B1111 0111
   PORTA=0xF7;                 
   delay(7,80);               //延时一定时间,保证显示亮度
   PORTA=0xFC; 

}

/****************************************************************************
函数功能:初始化函数子程序
入口参数:
出口参数:
****************************************************************************/
void  init()               
{
   PORTA=0XFF;               
   PORTC=0XFF;                 //熄灭所有显示
   TRISA=0X01;                 //设置RA0为输入,其他为输出            
   TRISC=0X00;                 //设置C口全为输出
   ADCON1=0X8E;                //转换结果左对齐,RA0做模拟输入口,其它做普通I/O
   ADCON0=0X41;                //系统时钟Fosc/8,选择RA0通道,允许ADC工作
   DELAY();                    //保证采样延时
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void  main()               
{
   int result=0x00;           
   while(1)                    //死循环
   {
   int i;                      
   result=0x00;                //转换结果清0
   for(i=5;i>0;i--)            
   {
      init();                  //调用初始化函数
      ADGO=0X1;                //开启转换过程
      while(ADGO);             //等待转换完成
      result=result+ADRESL+ADRESH*256;  
                               //累计转换结果
   }
   result=result/5;            //求5次结果的平均值
   display(result);            //调用显示函数
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -