📄 gm8166rd.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 + -