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

📄 wigen.c

📁 监控行业车辆检测器源代码
💻 C
字号:
#include "STC12C5410AD.h"
#include "app.h"
#include <string.h>
#include <stdio.h>
#include <INTRINS.H>



sbit  DATA0   =  P1^0;	   // green
sbit  DATA1   =  P3^7;	   // white
void send_wiegand26(unsigned char *str)
{
     unsigned char i;
     static unsigned char  one_num; //计算 1 的个数
     unsigned char check_temp; //韦根包奇偶效验中间暂存
     bit data even; //韦根包前 12 位偶效验
     bit data odd; //韦根包后 12 位齐效验
     static unsigned char wiegand[3]; //韦根包数据 24 位
//================================数组到韦根包的转化
     wiegand[0] = wiegand[0]|((*str)<<4);//原理是把每个字节的低 4 位取出,来计算这个字节的值
     wiegand[0] = wiegand[0]|(*(str+1)&0x0f);
//--------------------------------计算前 8 位 1 的个数,为偶效验用
     check_temp = wiegand[0];
	 for(i = 0;i<8;i++)
		{
		    if(check_temp&0x01) //(check_temp&0x01)
		     {
		         one_num++;
		      }
		    check_temp >>= 1;
		}
	wiegand[1] = wiegand[1]|(*(str+2)<<4);
		//--------------------------------计算接下来的 4 位 1 的个数,为偶效验用
	check_temp = wiegand[1];

	for(i = 0;i<4;i++)
		{
		    if(check_temp&0x80)
		     {
		        one_num++;
		      }
		   check_temp<<=1;
		}
		//--------------------------------判断 1 的个数
	one_num%2 == 0 ? (even = 0):( even = 1);
	one_num = 0;
	wiegand[1] = wiegand[1]|(*(str+3)&0x0f);
		//--------------------------------计算接下来的 4 位 1 的个数,为奇效验用
	check_temp = wiegand[1];
	for(i = 0;i<4;i++)
		{
		   if(check_temp&0x01)
		    {
		      one_num++;
		    }
		   check_temp>>=1;
		}
	wiegand[2] = wiegand[2]|(*(str+4)<<4);
	wiegand[2] = wiegand[2]|(*(str+5)&0x0f);
		//--------------------------------计算接下来的 8 位 1 的个数,为奇效验用
	check_temp = wiegand[2];
	for(i = 0;i<8;i++)
		{
		    if(check_temp&0x01)
		    {
		     one_num++;
		    }
		   check_temp >>= 1;
		}
		//--------------------------------判断 1 的个数
	one_num%2 == 0 ? (odd = 1):( odd = 0);
	one_num = 0;

}


⌨️ 快捷键说明

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