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

📄 ex08-5.c

📁 本文件好似一系列的仿真
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define _NOP() _nop()
sbit sda=P3^1;
sbit scl=P3^0;
uchar j;
void delay()
{ ;; }
void start()  //开始信号	    //当scl为高时,SDA有个负跳变
{	
	sda=1;
	delay();
	scl=1;
	delay();
	
	sda=0;
	delay();
}

void stop()   //停止		 SCL为高时,SDA有个正跳变
{
	sda=0;
	delay();
	scl=1;
	delay();
	sda=1;
	delay();
}

void respons()  //应答	信号
{
	uchar i;
	scl=1;
	delay();
	while((sda==1)&&(i<250))i++;//超过时间或者sda为1则没有受到应答信号
	scl=0;		  //时钟拉低 第9个时钟结束
	delay();
}

void init()		  //总线初始化
{
	sda=1;
	delay();
	scl=1;
	delay();
} 

void write_byte(uchar date)			 //写数据	 一位一位的写进去
{
	uchar i,temp;		 //写8次,定义一个中间变量
	temp=date;

	for(i=0;i<8;i++)
	{
	    scl=0;
		temp=temp<<1;	   //左移一位
					   //数据可变
	    delay();
		sda=CY;		//最高位移入CY中并赋值给SDA,CY为PWM中的最高一位	  
		delay();
		scl=1;	    //高电平器件数据要稳定
		delay();
	
	  }
	scl=0;
	delay();
	sda=1;						 //释放总线	 ,以便读取应答信号
	delay();
}

/*void delay3( uchar z )
{
	uchar x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}	   */



void delay1(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}	

void write_add(uchar date)
{
	start();
	write_byte(0x58);	  //写入器件的地址	01011 00 0 前四位固定   最后一个0表示要写
	respons();
	write_byte(0x00);	 //器件内部的地址	命令字节
	respons();
	write_byte(date);	 //写入数据
	respons();
	stop();
}


void main()
{
  
   
	init();	
	j=0;  

	while(1)

	 {
	  
	  write_add(j);
	  delay1(1);  //必须留=一定时间		通过延时时间可以控制波形的折度
	   j++;
	 }
}



⌨️ 快捷键说明

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