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

📄 gm8166rd.c

📁 通过单片机去读GM8166芯片采集回来的数据
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit Dir   = P2^0;					//*SP/Mux*/
sbit M0    = P3^4;					//*M0*/
sbit M1    = P3^5;					//*M1*/
sbit IOEN  = P1^7;					//*OC/EN*/
sbit SData = P3^6;					//*SData */
sbit SClk  = P3^7;					//*SClk*/

ulong SwapHigh6Bit(ulong RecData)	//交换高六位
{
	uchar BitCnt;		//交换移位位数
	ulong OneH6Bit;		//高六位中的一位
	ulong H6Bit=0;

	for(BitCnt=0;BitCnt<6;BitCnt++)
	{	
		H6Bit<<=1;
		OneH6Bit=(RecData<<(5-BitCnt))&0x80000000;
		if(0x80000000==OneH6Bit)
		{
			H6Bit+=1;
		}
	}

	H6Bit<<=26;
	RecData=H6Bit|(RecData&0x03ffffff);
	return(RecData);
}

ulong GM8166Read()					//从GM8166读取32位数据
{	
	uchar BitCnt;					//移入位数
	ulong RecData = 0x00000000;		//接收数据,对应开关状态:最高位:开关1
	

	IOEN = 0;						//并行输入允许
	SClk = 0;
	SClk = 1;						//并行口数据置入寄存器
	IOEN = 1;						//并行输入禁止
	
	if(SData == 1)
	{
		RecData++;
	}
	RecData <<= 1;

	for(BitCnt=0;BitCnt<31;BitCnt++)
	{	
		SClk = 0;
		SClk = 1;
		if(SData == 1)
		{
			RecData++;
		}

		if(BitCnt<30)
		{
			RecData <<= 1;
		}
	}

	RecData=SwapHigh6Bit(RecData);
		
	return(RecData);
}

⌨️ 快捷键说明

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