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

📄 bc7281a.c

📁 利用SMALL RTOS51做的一个项目
💻 C
字号:
#include"config.h"



//*******************************************************************************************************
//*****************************         GLOBAL   PERAMETER          *************************************
//*******************************************************************************************************




/*********************************************************************************************************
** 函数名称: send_byte
** 功能描述: 写入BC728X
**
** 输 入: 	sbyte		//数据
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/

		void send_byte(unsigned char sbyte)
{
	unsigned char i;

	BC728X_CLK=0;
	BC728X_CLK=1;

	for(i=0;(i<250)&&BC728X_DAT;i++)
	{
		BC728X_CLK=0;
		BC728X_CLK=1;
	}//while(BC728X_DAT);

	if(BC728X_DAT)
		return;
	
	BC728X_CLK=0;
	BC728X_CLK=1;
	
	//while(!BC728X_DAT);
	for(i=0;(i<250)&&(!BC728X_DAT);i++);
	
	if(!BC728X_DAT)
		return;
	

	for(i=0;i<8;i++)
	{
		if(sbyte&0x80)
		{
			BC728X_DAT=1;
		}
		else
		{
			BC728X_DAT=0;
		}
		sbyte<<=1;

		BC728X_CLK=0;
		BC728X_CLK=1;

	//	_Nop();
	//	_Nop();
	//	_Nop();
	//	_Nop();
	//	_Nop();
	//	_Nop();
	//	_Nop();
		
	}

	BC728X_DAT=1;

	_Nop();
	_Nop();
	_Nop();
	_Nop();
//	_Nop();
//	_Nop();
//	_Nop();
}

/*********************************************************************************************************
** 函数名称: recieve_byte
** 功能描述: 写入BC728X
**
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/

		unsigned char receive_byte(void)
{
	unsigned char i,ibyte;

	BC728X_CLK=0;
	BC728X_CLK=1;

	//while(!BC728X_DAT);
	for(i=0;(i<250)&&(!BC728X_DAT);i++);
	if(!BC728X_DAT)
		return;

	BC728X_CLK=0;
	BC728X_CLK=1;


	for(i=0;i<8;i++)
	{
		_Nop();
		_Nop();
//		_Nop();
//		_Nop();
//		_Nop();
//		_Nop();
//		_Nop();

		ibyte<<=1;

		if(BC728X_DAT)
		{
			ibyte++;
		}
		
		BC728X_CLK=0;
		BC728X_CLK=1;

		
	}

	BC728X_DAT=1;

	_Nop();
	_Nop();
//	_Nop();
//	_Nop();
//	_Nop();
//	_Nop();
//	_Nop();	

	return(ibyte);
}

/*********************************************************************************************************
** 函数名称: Write728x
** 功能描述: 写入BC728X
**
** 输 入: 	addr,		//地址
**			wdata		//数据
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/

		void Write728x(unsigned char addr,unsigned char wdata)
{
	ES=0;

	send_byte(addr);
	send_byte(wdata);

	ES=1;
}

/*********************************************************************************************************
** 函数名称: Read728x
** 功能描述: 读入BC728X
**
** 输 入: 	addr,		//地址
**			
** 输 出:  receive_byte()		//数据
** 全局变量: 无
** 调用模块: receive_byte()
********************************************************************************************************/

		unsigned char Read728x(unsigned char addr)
{
	addr|=0x80;

	send_byte(addr);

	return(receive_byte());
}


/*********************************************************************************************************
** 函数名称: DispNum
** 功能描述: 显示数字
**
** 输 入: 	addr,		//地址
**			
** 输 出:   无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/


void DispNum(unsigned char address,unsigned long num)
{
	idata char i,j;
	
	ES=0;
	
	switch(address)
	{
		case 0	:	j=1;
					for(i=6;i&&j;i--)
					{
						j=num%10;
						
						j+=((i-1)<<4);

						Write728x(0x14,j);
						
						num/=10;
				
						if(num>0)
							j=1;
						else
							j=0;
					}

					if(i)
					{
						for(;i--;)
							Write728x((i-1),0xFF);
					}
					
					break;
		case 1	:	j=1;
					for(i=12;(i>6)&&j;i--)
					{
						j=num%10;
						
						j+=((i-1)<<4);

						Write728x(0x14,j);
					
						num/=10;
				
						if(num>0)
							j=1;
						else
							j=0;
					}

					if(i>6)
					{
						for(;i>6;i--)
							Write728x((i-1),0xFF);
					}
					
					break;
		case 2	:	for(i=13;i<15;i++)
					{
						Write728x((i-1),0xFF);
					}

					if(_Flag_StateLed)
						Write728x(0x18,0x77);

					j=1;
					for(i=15;i>12&&j;i--)
					{
						j=num%10;
						j+=((i-1)<<4);
						num/=10;
						Write728x(0x14,j);
						j=num;
					}
					break;

		case 3	:	for(i=12;i>6;i--)
					{
						j=num%10;

						j+=((i-1)<<4);
						Write728x(0x14,j);
					
						j&=0x0F;

						num/=10;

						if(j)
							break;
						if(!num)
							break;

					
					}			
					
					break;
		default	:	return;
	}

	ES=1;
		
}


⌨️ 快捷键说明

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