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

📄 iic.c.bak

📁 QH_MCU_V1.1单片机C源码. 内含实验程序 这是修改版.
💻 BAK
字号:
#include <REG51.H>
#include <sys.h>
#include <intrins.h>

const	unsigned char	LedCode[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xF7,0xFC,0xB9,0XDE,0xF9,0xF1};
const	unsigned char	Sel[]={0x80,0x81,0x82,0x83};

sbit  scl = P1^5;
sbit  sda = P1^6;
void delay ();

void sel_bit0(void)
{
	 P2 = 0x00;
	 P2 = 0x10;
	 P0 = 0x0f;
   P2 = 0x00;
   P0 = 0x00;
	 P2 = 0x80;
}
  
void sel_bit1(void)
{
	 P2 = 0x00;
	 P2 = 0x10;
	 P0 = 0x1f;
   P2 = 0x00;
   P0 = 0x00;
	 P2 = 0x80;
}
  
void sel_bit2(void)
{
	 P2 = 0x00;
	 P2 = 0x10;
	 P0 = 0x2f;
   P2 = 0x00;
   P0 = 0x00;
	 P2 = 0x80;
}
  
void sel_bit3(void)
{
	 P2 = 0x00;
	 P2 = 0x10;
	 P0 = 0x3f;
   P2 = 0x00;
   P0 = 0x00;
	 P2 = 0x80;
}
   

void star()
  {
     	scl=0;
	 		sda=1;
     	scl=1;
		 _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
	 sda=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();    
    scl=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();

	 
  }
void stop()
  {
    sda=0;
	scl=0;
    scl=1;

    _nop_();
    _nop_();
    _nop_();
    _nop_();
    sda=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
   

  }

bit ack()
 { 
    bit a_ack;
    scl=0;
    _nop_();
    _nop_();
    sda=1;
    scl=1;

    if(sda==0)
    {
    a_ack=0;
    }
    else
    {
    a_ack=1;
    }
    scl=0;

	return(a_ack);
 }

 void noack()
  {
     scl=0;
     sda=1;
     scl=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     scl=0;
     sda=0;
  }

void senddata(uchar shu)
  {
    uchar i;
    scl=0;
   
    for(i=0;i<8;i++)
    {
       sda=(bit) (shu & 0x80);
	   scl=1;
        _nop_();
    	_nop_();
    	_nop_();
    	_nop_();
		scl=0;
		shu=shu<<1;
    }

   }
uchar receive()
  {
   
    uchar j,nn;
    scl=0;
    for(j=0;j<8;j++)
    {
        scl=1;
		nn=nn<<1;
		nn=nn|((uchar)(sda));
		 _nop_();
    	_nop_();
    	_nop_();
    	_nop_();
		scl=0;

    }
    return(nn);

  }  



 void writebyte(uchar addr, uchar databyte)
   {
    uchar datareg,addrreg;
	  datareg=databyte;
	  addrreg=addr;
	  star();
	  senddata(0xa0);
	  if (!ack())
	    {
		   P0=LedCode[0];
		   sel_bit0();
		   delay();
		   delay();
		   delay();
		}
	  senddata(addrreg);
       if (!ack())
	    {
		   P0=LedCode[1];
		   sel_bit0();
		    delay();
		   delay();
		   delay();
		}
	   senddata(datareg);
       if (!ack())
	    {
		   P0=LedCode[2];
		   sel_bit0();
		   delay();
		   delay();
		   delay();
		}  
       stop();
       delay();
   }
 uchar readbyte (uchar addr)
    {
	   uchar i,databuf;
	   star();
	   senddata(0xa0);
	  if (!ack())
	    {
		   P0=LedCode[0];
		   P2=Sel[0];
		   delay();
		   delay();
		   delay();
		}
	    senddata(addr);
	  if (!ack())
	    {
		   P0=LedCode[4];
		   P2=Sel[0];
		   delay();
		   delay();
		   delay();
		}
      star();
       senddata(0xa1);
	  if (!ack())
	    {
		   P0=LedCode[5];
		   P2=Sel[0];
		   delay();
		   delay();
		   delay();
		}
	   databuf=receive();
	   noack();
 	   stop();
	   return (databuf);
	}



void ISRit0(void) interrupt 0
  {
   uchar i;
   uchar databuf;
        IE0=0;
    for(i=0; i<16; i++)
 
	     {
		   // P0=LedCode[i];
		     databuf=readbyte(i);
             delay();
			 delay();
		     delay();
		 	 delay();
			 P0=databuf;
			 P2=Sel[1];
			 delay();
			 delay();
		     delay();
		 	 delay();
		  }

		  P2=0xFF;

   }

  

void main()
{
    uchar i;
	EA=1;
	IT0=1;
    EX0=1;
    for(i=0; i<16; i++)
 
	   {
	        writebyte(i,LedCode[i]);
		 
		  //   writebyte(0,0xFF);
			delay();
	    }



	while(1)
	{

	   P0=0xff;
		 sel_bit0();
	   P0=0xff;
		 sel_bit1();
	   P0=0xff;
		 sel_bit2();
	   P0=0xff;
		 sel_bit3();

	}
}

void delay()
{
    uchar i = 0;
	uchar j = 0;
  for (j=0;j<255;j++)
   {
    for (i=0; i<250; i++)
	  ;
   }
}


⌨️ 快捷键说明

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