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

📄 cs5460a.c

📁 RM0038红外传感器接收电视机摇控的源码
💻 C
字号:
#include "CS5460A.h"
#include "default.h"

sbit SK=P3^4;           /* SPI时钟 */
sbit SO=P3^2;           /*  SDO    */ 
sbit SI=P3^3;           /*  SDI    */ 
sbit RST = P3^5;

uchar Read8(void);          //SPI 读一个字节的 程序
void Write8(uchar cData);   //SPI 写一个字节的 程序
void initspi(void);         // 复位CS5460A的SPI模式  程序
void Write_CS5460A(uchar *p,uchar len);// 写 CS5460A 的状态寄存器
void Read_CS5460A(uchar *p,uchar CommData );// 读 CS5460A 的状态寄存器

xdata uchar buf5460[4];
code long *lbuf = (long *)&buf5460;
//-------------------------------------------------
//SPI 读一个字节的 程序
uchar Read8(void) 
{ 
	bit bData; uchar cLoop; uchar cData; 
	cData=0x00;
	SI=1;
	for(cLoop = 0; cLoop < 8; cLoop++) 
	{ 
		SK=1; 
		SK=0;        //下降沿输出
	    cData<<=1; 
		bData=SO; 
		if(bData) { cData|=0x01; } 
  	}	
  	return cData;
}

//SPI 写一个字节的 程序
void Write8(uchar cData) 
{
	uchar cLoop; 
	for(cLoop = 0; cLoop < 8; cLoop++) 
	{
		if((cData&0x80)==0) { SI=0; } 
			else { SI=1; }
		SK=0;      //上升沿写入 
		SK=1; 
		cData <<= 1; 
	}
}

// 写 CS5460A 的状态寄存器
void Write_CS5460A(uchar *p,uchar len)
{
   uchar i;
   initspi();
   for(i=0;i<len;i++)
    { Write8(p[i]);}
}


// 读 CS5460A 的状态寄存器
void Read_CS5460A(uchar *p,uchar CommData )
{
   uchar i;
   initspi();
   Write8(CommData);
   for(i = 1; i < 4; i++)
	{
      p[i] = Read8();
    }
}

void initspi(void)
{
	Write8(SYNC1);
	Write8(SYNC1);
	Write8(SYNC1);
	Write8(SYNC0);
}

void Clear_DRDY()
 {
 	code uchar tBuf[] = {0x5E,0xFF,0xFF,0xFF};
 	initspi();
	Write_CS5460A(tBuf,4);
}

bit Waite_DRDY_High()
{
	uchar i;
	while(i < 250)
	{
		initspi();
		Read_CS5460A(buf5460,0x1E);
		if(buf5460[1]&0x80)
			return TRUE;
		i++;
		delay(1000);
	}
	return FALSE;
}

void Reset5460A()
{
	RST = 0;
	delay(100);
	RST = 1;
}

//获得当前重量数据
long GetWeight(void)
{
	long xdata tWeight;
	Read_CS5460A(buf5460,0x16);   //读状态寄存器
	buf5460[0] = 0;
	tWeight = *lbuf;
	for(;;)
	{
		Read_CS5460A(buf5460,0x16);   //读状态寄存器
		buf5460[0] = 0;
		if(tWeight == *lbuf)
		{
			Read_CS5460A(buf5460,0x16);   //读状态寄存器
			buf5460[0] = 0;
			if(tWeight == *lbuf)
			{
				break;
			}else tWeight = *lbuf;
		}else tWeight = *lbuf;
	}
	{
		code uchar buf[] = {0x5E, 0xFF,0xFF,0xFF};
		Write_CS5460A(buf,4);    //写状态寄存器,对应位产生的标志清除
	}
	return tWeight;
}

⌨️ 快捷键说明

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