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

📄 main.c

📁 128液晶点阵与AT89C51并行接口
💻 C
字号:
//============================================================
//	FILE:      main.c
//	FUNCTION:  ADC_SHOW_LCD
//	DATA:      2006-07-20 By fenglover 
//	RESOURCE:   http://www.unsp.com.cn
//============================================================
#include <SPCE061A.h>
#include "JM12864M.h"
#define AD_END_FLAG *P_ADC_MUX_Ctrl&0x8000
#define AD_EXZCTITUDE  0.96379                       //误差调整
void AD_Initial(void);
unsigned int AD_1(void);
unsigned long int AD_Go(void); 
int main(void)
{   		
   unsigned int i,AdcValueEnd; 
   unsigned char vstr[6]={0},vstrtemp;
   float AdcValueFloat=0.0; 
   unsigned long int AdcValueInt;
   IO_Initial();
   LCD_Initial();   		
   AD_Initial();
   LCD_Print_xyString(0,0,"当前电压值:(V)");
   while(1)
      {   
         AdcValueInt=AD_Go();
         AdcValueFloat=(float)AdcValueInt/0xffc0*3.3;   //在这里可以进行调整以实现较小误差,理论上为0xffc0,3.3v。
         AdcValueFloat/=AD_EXZCTITUDE;                    
         AdcValueEnd=(int)(AdcValueFloat*10000);
         vstr[5] = (AdcValueEnd % 10) + 0x30;
         vstr[4] = (AdcValueEnd / 10) % 10 + 0x30;
         vstr[3] = (AdcValueEnd / 100) % 10 + 0x30;
         vstr[2] = (AdcValueEnd / 1000) % 10 + 0x30;
         vstr[1] = '.';
         vstr[0] = (AdcValueEnd / 10000) % 10 + 0x30;
         LCD_Set_xy(0,1);
         for(i=0;i<6;i++)
            { 
               *P_Watchdog_Clear=0x0001;
               vstrtemp=vstr[i];
               LCD_W_Data(vstrtemp);
            }
         for(i=100;i>=0;i--)
            ;
         *P_Watchdog_Clear=0x0001;
      }
}

//*=================================================================
unsigned int AD_1(void) 
{ 
   unsigned int uiData; 
   while(!AD_END_FLAG);        //等待ADC转换结束    
   uiData=*P_ADC_LINEIN_Data;  
   return(uiData&0xffc0); 
}
//*===============================================================
unsigned long int AD_Go(void)
{   
    unsigned long int adc_value=0;
    unsigned int i;
    
    for(i=0;i<16;i++)                        //16次取平均值
      {
          adc_value += AD_1(); 
          *P_Watchdog_Clear=0x0001;
      }
    adc_value>>=4;
    return (adc_value);
} 
//*===============================================================
void AD_Initial(void)
{
   unsigned int Read_Start;
   *P_ADC_MUX_Ctrl=C_ADC_CH1;   //选择LINE_IN1通道,从IOA0输入 
   *P_ADC_Ctrl= C_ADCE;     //AD使能打开   
   Read_Start=*P_ADC_LINEIN_Data;    //AD开始转换 
}
//*=================================================================

⌨️ 快捷键说明

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