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

📄 ad转换.c

📁 MC14433的51单片机程序
💻 C
字号:
 
 
 /*********************************************************
   A/D转换应用程序,外部中断0用来开启一次新的转换,
   每次中断结束,自动申请中断1,进行数据的采集和显示 
 *********************************************************/
 #include <reg51.h>
 #include <absacc.h>

 #define DIGPOT   XBYTE[0x200]	             //定义字位口 
 #define WORDPOT  XBYTE[0x100]	             // 定义字型口
 #define fosc   11.0592			             //晶振频率
 #define timer0 2000				         //延时时间
 											 	
  unsigned char t;   					     //计算延时临时变量					                 
 sbit P10=P1^0;
 sbit P11=P1^1;
 sbit P12=P1^2;
 sbit P13=P1^3;
 sbit P14=P1^4;
 sbit P15=P1^5;
 sbit P16=P1^6;
 sbit P17=P1^7;
 
 unsigned char wordbuf[4];                 //字型码缓冲区
 void rdp1(void);
 unsigned int bcd_convt(unsigned char i);
 void yanshi(void);    //保留

                       
 void TIMEER_DELAY(void);                  //延时函数
 void display(void);  //显示函数
 void main(void)
 {		
    
 	IT0=1;		//	中断0下降沿触发  
	EA=1;
	EX0=1;		//中断0开中断
	IT1=1;
	EX1=1;

						
      
	P1=0xff;
	
	  wordbuf[0]=0xbf;
	  wordbuf[1]=0x3f;
	  wordbuf[2]=0x3f;
	  wordbuf[3]=0x3f;



	while(1)
	{			     
	    display( );	
	
	}

  }

  void int0(void) interrupt 0
  {		
        IT1=1;
  		EX1=1;   //	中断1开中断
		
	    	
  		wordbuf[0]=0xbf;
	    wordbuf[1]=0x3f;
	    wordbuf[2]=0x3f;
	    wordbuf[3]=0x3f;


  }


  void int1(void) interrupt 2
  {
 		
			
			
		rdp1();			// 读取转换结果
		
	     EX1=1;	     //中断1关	 	 
  		
  }

  
  
 
 
  /***************读取转换结果*******************/ 
  
 void rdp1(void)
  {		
  	    unsigned char  i;
    	P1=0xFF;
   	    while(P14==0){};
		while(P14==1)   //等待选通信号DS1
	    {
		     if ( P10==0 && P13==0  )  wordbuf[0]=0x86;	 //读最高位 
   	       	 if (P10==0 && P13==1 )    wordbuf[0]=0xbf;	  
    	}
  		
		
		i=0;
		
		while(P15==0){};						  
		yanshi();
		i=P1;												   
		i=i&0x0f; 			
	    if (i<0x0a) wordbuf[1]=	bcd_convt(i);
		
	    i=0;	
	    while(P16==0){};    //等待选通信号DS3
		yanshi();
		i=P1;
		i=i&0x0f;  			
    	if (i<0x0a) wordbuf[2]=	bcd_convt(i);
		
		i=0;
		while(P17==0){};		   //等待选通信号DS4
		yanshi();
  	    i=P1;
        i=i&0x0f;			
	    if (i<0x0a) wordbuf[3]=bcd_convt(i);


  }	
 
 
 /******************BCD码和7段码转换**********************/
 
 unsigned int bcd_convt(unsigned char i)
 {
 	   unsigned  char p;

	   switch (i)
	   {		    
		   case 0: 	 p=0x3f;    break;
		   case 1:   p=0x06;    break; 
	   	   case 2:   p=0x5b;    break; 
	   	   case 3:   p=0x4f;    break; 		     
  		   case 4:   p=0x66;    break; 
	   	   case 5:   p=0x6d;    break; 
	       case 6:   p=0x7D;    break; 
	   	   case 7:   p=0x07;    break;
		   case 8:   p=0x7f;    break; 
		   case 9:   p=0x6f;    break;
		   default:  p=0x76;    break;   //乱码显示H	   
		     
	   }  
	   
	  return(p)   ;
}	





/***************2毫秒延时函数***************/	 
void TIMEER_DELAY(void)
{
  	TMOD=0x01;
	t=65536-timer0*fosc/12;
    TH0= (t/256);
	TL0= (t%256);
	TR0=1;
	ET0=0;
	while(TH0!=0 && TL0!=0){};
	


}

/*******************结果显示函数***********************/				                          
void display(void)
{	
  	 WORDPOT=wordbuf[0];             
	 DIGPOT=0x01;			 
  	 TIMEER_DELAY();
	 DIGPOT=0x00;
	
	
	 WORDPOT=wordbuf[1];
	 DIGPOT=0x02;
	 TIMEER_DELAY();
	 DIGPOT=0x00;
	

		
     WORDPOT=wordbuf[2];
     DIGPOT=0x04;
     TIMEER_DELAY();
     DIGPOT=0x00;	
  
		
	 WORDPOT=wordbuf[3];		
	 DIGPOT=0x08;
	 TIMEER_DELAY();
     DIGPOT=0x00;	
	
}	

 void yanshi(void)
 {
   int j;
   for(j=0;j++;j<1000){};
 
 }











⌨️ 快捷键说明

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