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

📄 max197.c

📁 MAX197子程序,实现12位AD转换,高精度高速转换
💻 C
字号:
//MAX197
#include <reg51.h>
#include<absacc.h> 
#include <intrins.h>
#define  delayNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();};
#define uchar unsigned char
#define uint unsigned int
/*****MAX197片外地址定义***/
#define adch0 XBYTE[0xfeff]
sbit ADINT=P2^4;
sbit HBEN=P2^5;	
/*************************LCD************************/
#define  LINE1     0
#define  LINE2     1
#define  LINE1_HEAD    0x80
#define  LINE2_HEAD    0xC0
#define  LCD_DELAY_TIME   40
#define  DATA_MODE    0x38
#define  OPEN_SCREEN    0x0C
#define  DISPLAY_ADDRESS   0x80
#define  CLEARSCREEN    LCD_en_command(0x01)
//common part 
#define  HIGH   1
#define  LOW    0
#define  TRUE    1
#define  FALSE    0
#define  ZERO    0 
#define  MSB    0x80
#define  LSB    0x01
#define  LCDIO     P1
sbit LCD1602_RS=P2^1;  
sbit LCD1602_RW=P2^2;  
sbit LCD1602_EN=P2^3;
sbit MAX197_WR=P3^6;
sbit MAX197_RD=P3^7;
//sbit MAX197_CS=P3^2;
unsigned char code tab[]={'0','1','2','3','4','5','6','7','8','9'};
/***************************************************************/
/******************** LCD PART *************************************/
void LCD_delay(void)   
{
 unsigned char i;
 for(i=LCD_DELAY_TIME;i>ZERO;i--)//be sure lcd reset
   ;
}
/********************************************************************/  
void LCD_en_command(unsigned char command)
{
 LCDIO=command;
 LCD1602_RS=LOW;   
 LCD1602_RW=LOW;
 LCD1602_EN=LOW;
 LCD_delay();
 LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_en_dat(unsigned char dat)
{
 LCDIO=dat;
 LCD1602_RS=HIGH;
 LCD1602_RW=LOW;
 LCD1602_EN=LOW;
 LCD_delay();
 LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
 unsigned char address;
 if (y == LINE1) 
  address = LINE1_HEAD + x;
 else 
     address = LINE2_HEAD + x;
 LCD_en_command(address); 
}
/********************************************************************/
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
{
 LCD_set_xy( x, y ); 
 LCD_en_dat(dat);
}
/********************************************************************/
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
    LCD_set_xy( X, Y ); //set address 
    while (*s)  // write character
    {
     LCDIO=*s;
        LCD_en_dat(*s);   
 s ++;
    }
}
/********************************************************************/
void LCD_init(void)
{ 
 CLEARSCREEN;//clear screen 
 LCD_en_command(DATA_MODE);//set 8 bit data transmission mode 
 LCD_en_command(OPEN_SCREEN);//open display (enable lcd display)
 LCD_en_command(DISPLAY_ADDRESS);//set lcd first display address 
 CLEARSCREEN;//clear screen
}
/********************************************************************/
/*********************** OTHER PART *********************************/
void delay_nms(unsigned int n)      
{
    unsigned int i=0,j=0;
    for (i=n;i>0;i--)
     for (j=0;j<1140;j++);  
}
/********************************************************************/

uint max197(void)					//使用内部基准
{
uint CH0Data;	
uchar CH0DataL,CH0DataH;
adch0=0x40;
while(ADINT)  HBEN=0;
CH0DataL=adch0;
HBEN=1;
CH0DataH=adch0;
CH0Data=(uint)(CH0DataH)*256+(uint)(CH0DataL);
return(CH0Data);
}
/***************************************************************/
uchar *change(uint dd)
{
uchar ddd[3];
ddd[0]=dd/1000 ;
ddd[1]=dd%1000/100;
ddd[2]=dd%100/10;
return(ddd)	  ;
}
/***************************************************************/
void main()
{ uint chan;
uchar i,*zhi,aaa[3]; 
LCD_init(); 
CLEARSCREEN;
delay_nms(2);
LCD_write_string(1,LINE1,"Work");
while(1)
 {
chan=max197();
zhi=change(chan);
for(i=0;i<3;i++)
 {
 aaa[i]=tab[*(zhi+i)]  ;
 }
LCD_write_string(1,LINE1,"Working...");
LCD_write_char(0,LINE2,aaa[0]);
LCD_write_string(1,LINE2,".");
LCD_write_char(2,LINE2,aaa[1]);
LCD_write_char(3,LINE2,aaa[2]);
  }

 }

⌨️ 快捷键说明

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