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

📄 max197.c

📁 本程序是AD MAX197驱动程序。精度高。
💻 C
字号:
#include  "reg52.h"
#include  " ABSACC.h"

#define   uchar  unsigned char 
#define   uint   unsigned int
#define   refvcc   2.5           // 定位基准电压
#define   manpian  4096         // 
#define  max197_data  P0
#define  adch0  XBYTE[0x0200]

uchar    max197_low8 , /* 地8位 */  max197_high4 ,/* 高四位*/  channel  , /* 通道*/ i , display_data[]   ;
float    vi , ad_data ;
int      Number ;  //= 0xfff    ;

//sbit     max197_cs   =  P2^5 ;    //片选择
sbit     max197_hben =  P2^7 ;    // 地8位和高四位的选择信号
sbit     max197_int  =  P2^6 ;    // 数据转换完成中段信号, 使用的int0.
//sbit     max197_wr   =  P3^6 ;    //max197读信号
//sbit     max197_rd   =  P3^7 ;    // max197写信号


unsigned char Status , Data ,Command , i  ;
unsigned  char code max197 []   = "MAX197AD转换 " ;
unsigned  char code shuru  []   = "输入电压:      V";
#define LCD_Data  P1


sbit	LCD_RS		=P3^2;
sbit	LCD_E		=P3^0;
sbit	LCD_WR		=P3^1;


 LCDBusyWait()							//等待LCD就绪
{
	unsigned char Status;
	LCD_RS=0;
	LCD_WR=1;
	LCD_Data=0xFF; 

	LCD_E=1;
	Status=LCD_Data;
	LCD_E=0;
	while(Status & 0x80)
	{
		LCD_E=1;
		Status=LCD_Data;
		LCD_E=0;
	}
	LCD_WR=0;
	return Status;
}

 WriteLCD_Data( unsigned char  Data )			//向LCD写入一个字节的数据
{
	LCDBusyWait();
	LCD_RS=1;
	LCD_Data = Data;
	LCD_E=1;
	LCD_E=0;
}

 WriteLCD_Command( unsigned char Command )	//向LCD写入一个字节的命令
{  
	LCDBusyWait();
	LCD_RS=0;
	LCD_Data=Command;
	LCD_E=1;
	LCD_E=0;
}

lcd_init ()
{

	unsigned int  i;
	WriteLCD_Command(0x01);	  //清屏
     for(i=0;i<2000;i++);
	WriteLCD_Command(0x30);	  //功能设置8位界面,
     for(i=0;i<2000;i++);
	WriteLCD_Command(0x0C);	  //显示开,光、光标关,反白显示
     for(i=0;i<2000;i++);
    WriteLCD_Command(0x06);	  //DDRAM地址自加
	   for(i=0;i<2000;i++);
    WriteLCD_Command(0x81) ;
       for(i=0;i<2000;i++);

}  

lcd_init_display (  )
 {
  i  = 0 ;
  while ( max197  [i] != '\0')
   {
     Data = max197 [i] ;
	 WriteLCD_Data(Data) ;
     i++ ;
   }
    WriteLCD_Command(0x88);
    i  = 0 ;
   while ( shuru [i] != '\0')
    {
      Data = shuru [i] ;
	  WriteLCD_Data(Data) ;
      i++ ;
   }

} 

  


    
 
max197_data_lcddisplay ()   //   在lcd上面显示模拟电压的值.
{
    WriteLCD_Command(0x8d);
    vi   = (ad_data  / 4096.0 ) * refvcc ;
    Number   =  vi *1000 ;
   	if ( Number >=10000 )
	{
      WriteLCD_Data((Number /10000 ) + 0x30);	   		//取出10位数字	
      WriteLCD_Data((Number % 10000 / 1000) + 0x30);	   	//取出个位数字
	  WriteLCD_Data(0x2e); 
	  WriteLCD_Data(Number % 1000 / 100 + 0x30);	   		//取出.0位数字
	  WriteLCD_Data(Number % 100/ 10 + 0x30);	   	//取出.00位
      WriteLCD_Data(Number % 10 + 0x30); 	   	//取出.000位数
    }
	if ( Number < 10000 )
	{ 
	  WriteLCD_Data((Number /1000) + 0x30);
	  WriteLCD_Data(0x2e);	
      WriteLCD_Data((Number % 1000 / 100) + 0x30);	   	//取出.0位数字
	  WriteLCD_Data(Number % 100 / 10 + 0x30);	   		//取出.00位数字
      WriteLCD_Data(Number % 10 + 0x30);               ////取出.000位数字
	 }

}


 
 void  intsvr  ( void )  interrupt 1
 { 
  
  //EX1  = 0 ;
  TR0  =  0;
  adch0  = 0x40 ;
  while ( max197_int !=0 )
   {
    max197_hben  = 0 ; 
   }

	max197_low8  = adch0 ;
    max197_hben  = 1 ;
    max197_high4 = adch0 ;

	ad_data =  max197_high4;
	ad_data =  ad_data  * 255 ; 
	ad_data =  ad_data+ max197_low8 ;//将高四位的数据前移8位在加上低位的数据.  	
//	ad_data  = 0xff ;

	max197_hben  = 1 ;
//	EX1  = 1 ;
    TH0   = 0xff ;
    TL0   = 0xde ;
    TR0  = 1 ;
	

    }
        
main ()
{
  uchar i , j ;
  lcd_init () ;
  lcd_init_display (  )	 ;
 
  TMOD  = 0x01 ;
  TH0   = 0xff ;
  TL0   = 0xde ;
  ET0   = 1 ;
  TR0   = 1 ; 	
  EA    =   1 ;	
  //EX1   = 1	 ;		  // 打开外部中
 // max197_int = 1 ;

 // ad_data  = 0xff ;
 

 // max197_data_lcddisplay () ;
  while (1)						// 等待外部中断。
  {
  
	max197_data_lcddisplay () ;
//	for ( i = 0  ; i <255 ; i++ )
	 // for ( j = 0 ; j <255 ; j++) ;
  }                
 
  }


⌨️ 快捷键说明

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