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

📄 24c04.c

📁 单片机C语言程序设计实训100例
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP4() {_nop_();_nop_();_nop_();_nop_();}

sbit SCL = P1^0;
sbit SDA = P1^1;

uchar code DSY_CODE[]=
{
 	0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90	
};

uchar DISP_Buffer[]={0,0,0};
uchar Count = 0;

void DelayMS(uint x)
{
	uchar t;
	while(x--)
	{
	 	for(t=120;t>0;t--);
	}
}

void Start()
{
 	SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;
}

void Stop()
{
 	SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;
}

void RACK()
{
 	SDA=1;NOP4();SCL=1;NOP4();SCL=0;
}

void NO_ACK()
{
 	SDA=1;SCL=1;NOP4();SCL=0;SDA=0;
}

void Write_A_Byte(uchar b)
{
 	uchar i;
	for(i=0;i<8;i++)
	{
	 	b<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;
	}
	RACK();
}

uchar Receive_A_Byte()
{
 	uchar i,d;
	for(i=0;i<8;i++)
	{
	 	SCL=1;d<<=1;d|=SDA;SCL=0;
	}
	return d;
}

void Write_Random_Address_Byte(uchar add,uchar dat)
{
 	Start();
	Write_A_Byte(0xa0);
	Write_A_Byte(add);
	Write_A_Byte(dat);
	Stop();
	DelayMS(10);
}

uchar Read_Current_Address_Data()
{
 	uchar d;
	Start();
	Write_A_Byte(0xa1);
	d=Receive_A_Byte();
	NO_ACK();
	Stop();
	return d;
}

uchar Random_Read(uchar addr)
{
 	Start();
	Write_A_Byte(0xa0);
	Write_A_Byte(addr);
	Stop();
	return Read_Current_Address_Data();		
}

void Convert_And_Display()
{
 	DISP_Buffer[2] = Count/10;
	DISP_Buffer[1] = Count%100/10;
	DISP_Buffer[0] = Count%100%10;
	if(DISP_Buffer[2] == 0)
	{
	 	DISP_Buffer[2] = 10;
		if(DISP_Buffer[1] == 0)
		{
		 	DISP_Buffer[1] = 10;	
		}
	}
	P2 = 0x80;
	P0 = DSY_CODE[DISP_Buffer[0]];
	DelayMS(2);
	P2 = 0x40;
	P0 = DSY_CODE[DISP_Buffer[1]];
	DelayMS(2);
	P2 = 0x20;
	P0 = DSY_CODE[DISP_Buffer[2]];
	DelayMS(2); 
}

void main()
{
 	Count = Random_Read(0x00) + 1;
	Write_Random_Address_Byte(0x00,Count);
	while(1)
		Convert_And_Display();	
}

⌨️ 快捷键说明

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