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

📄 程序.txt

📁 基于I2C总线的AD存储DA的proteus仿真
💻 TXT
字号:
#include <reg52.h>
#include <intrins.h>
#include <absacc.h> 

#define uchar unsigned char
#define uint unsigned int

sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^4;

sbit CLK=P3^1;
sbit DIO=P3^2;
sbit CS1=P3^3;
sbit sda=P1^6;
sbit scl=P1^7;

sbit k1=P3^0;
sbit k2=P3^7;
uchar x,t,FLAG,fa;
void delay(uint x)
{
	uint a,b;
	for(a=x;a>0;a--)
		for(b=110;b>0;b--); 
}
void delay20ms(void)   //误差 0us
{
    unsigned char a,b;
    for(b=215;b>0;b--)
        for(a=45;a>0;a--);
}

void delay1(uint x)
{								
	uint a,b;
	for(a=x;a>0;a--)
		for(b=100;b>0;b--); 
}
void delay2()
{;;}
void init_24c256()
{  scl=0;
   delay2();
   sda=1;
   delay2();
   }
void start()
 { sda=1;
   delay2();
   scl=1;
   delay2();
   sda=0;
   delay2();
 }
void stop()
 { sda=0;
   delay2();
   scl=1;
   delay2();
   sda=1;
   delay2();
 }
void response()
 {	uchar i;
     scl=1;
 	 delay2();
	 while((sda==1)&&(i<255))
	  i++;
	  scl=0;
	  delay2();
 
 } 
void write_24c256(uchar dataa)
{	uchar i,temp;
    temp=dataa;
	for(i=0;i<8;i++)
	{ temp=temp<<1;
	  scl=0;
	  sda=CY;
	  delay2();
	  scl=1;
	  delay2();
	}
   scl=0;
  delay2();
  sda=1;
  delay2();
}
 uchar read_24c256()
{  uchar i,k;
  // scl=0;
   //delay2();
   //sda=1;  //shi fang 
  	for(i=0;i<8;i++)
	{  scl=1;
	  delay2();
	  k=(k<<1)|sda;
	  scl=0;
	  delay2();
	  }
   delay2();
   return k;
}
void write_add(uchar address,uchar dat)
 {	start();
    write_24c256(0xa0);
    response();
    write_24c256(address);
	response();
	write_24c256(dat);
	response();
 	stop();
	
 }
 uchar read_add(uchar address)
 {	 uchar date;
     start();
	 write_24c256(0xa0);
 	 response();
 	 write_24c256(address);
	 response(); 
	 start();
	 write_24c256(0xa1);
      response();
	 date=read_24c256();
 	  stop();
   return date;
 }
/*void write_com(uchar com)
{
	P0=com;
	rs=0;
	lcden=0;
	delay(10);
	lcden=1;
	delay(10);
	lcden=0;
	
}

void write_date(uchar date)
{
	P0=date;
	rs=1;
	lcden=0;
	delay(10);
	lcden=1;
	delay(10);
	lcden=0;
	
}

void init()
{

	wr=0;
	write_com(0x38);
	delay(20);
	write_com(0x0c);
	delay(20);
	write_com(0x06);
	delay(20);
	write_com(0x01);
	delay(20);	

} */
unsigned char  A_D()
{
  unsigned char i,dat;
   CS1=1;   //一个转换周期开始
   CLK=0;  //为第一个脉冲作准备
   CS1=0;  //CS置0,片选有效

   DIO=1;    //DIO置1,规定的起始信号  
   CLK=1;   //第一个脉冲
   CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   DIO=1;   //DIO置1, 通道选择信号  
   CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 
   CLK=0;   //第二个脉冲下降沿 
   DIO=0;   //DI置0,选择通道0
   CLK=1;    //第三个脉冲
   CLK=0;    //第三个脉冲下降沿 
   DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      CLK=1;         //第四个脉冲
      CLK=0; 
      dat<<=1;       //将下面储存的低位数据向右移
		dat|=(unsigned char)DIO; 	 //将输出数据DIO通过或运算储存在dat最低位 
    }	  		        
    CS1=1;          //片选无效 
	 return dat;	 //将读书的数据返回     
  }

/*void keyscan()
{  uint i;
	if(k1==0)
	{
		delay20ms();
		if(k1==0)
		{	while(!k1);
	    	EA=1;
			ET0=1;
			TR0=1;
		}
	}
	if(k2==0)
	{
		delay20ms();
		if(k2==0)
		{	while(!k2);
		    EA=0;
		//	ET0=0;
		//	TR0=0;
			FLAG=1;
		}
	}

	
} */
void main()
{ uchar bb,cc;
  //init();
  init_24c256();
  //x=read_add(0x00);
   TMOD=0X01;
   ET0=1;
   EA=1;
   TL0=(65535-5000)%256;
   TH0=(65535-5000)/256;
   TR0=1; 
  while(1)
	{ 
	  if(fa==1)
	 { fa=0;
	   bb=x;
	   write_add(bb);	
	   delay20ms();
	    P2=read_add(0x00);
	 }
	  
	}
 }
void time0_interrupt(void)interrupt 1
 {  TL0=(65535-5000)%256;
   TH0=(65535-5000)/256;
   t++;
   if(t==20)
  { t=0;
    x=A_D();
	fa=1;
 		}
 }

⌨️ 快捷键说明

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