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

📄 wg.c

📁 该程序是将读到的IC卡卡号转换成韦根26代码进行输出。读卡芯片采用的是飞利浦公司的Mf500,单片机采用的是atmel公司的atmeg8
💻 C
字号:
#include <iom8v.h>
#include <eeprom.h>
#include <e:\avr\avr_soft\main.h>
#include <e:\avr\avr_soft\wg.h>
unsigned char start_flag=0;
unsigned char stop_flag=0;
unsigned int time_counter=0;
unsigned char start_bit=0;
unsigned char stop_bit=0;
unsigned char counter_byte=0;
//unsigned int temp1,temp2;

void write_data(unsigned char data)
{
 	 unsigned char i,j;
	 for(i=0;i<8;i++)
	 {
	  	timer0_init();
//	  	if(data&0x01)
		if(data&0x80)
		{
			CLEAR_WD1();
		}
		else
		{
			CLEAR_WD0();
		}
		WAIT_BITS();
		SET_WD0();
		SET_WD1();
		timer0_init();
		for(j=0;j<50;j++)
		WAIT_BITS();
//		data>>=1;
		data<<=1;	
	}
}
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0xD8; //set count
 TCCR0 = 0x02; //start timer
}
void WAIT_BITS(void)
{    
     while (TCNT0!=0);
     TCNT0 = 0xD8;// reload counter.    
} 
unsigned char cac_byte(unsigned char data)
{
 	 unsigned char temp,i,counter=0;
	 temp=data;
	 for(i=0;i<8;i++)
	 {
	  	if(temp&0x01)counter++;
		temp>>=1;
	 }
	 return counter;
} 
void cac_4byte(unsigned char *array)
{
 	 unsigned char temp1,temp2;
	 temp1=cac_byte(array[2])+cac_byte(array[3]);
	 temp2=cac_byte(array[0])+cac_byte(array[1]);
	 if(temp1%2)
	 start_bit=1;
	 else
	 start_bit=0;
	 if(temp2%2)
	 stop_bit=0;
	 else
	 stop_bit=1;
}   

void senddata(unsigned char *data)
{
 	 unsigned char i;
	 CLEAR_HOLD();
	 timer0_init();
 	 if(start_bit)
	 {
	  	CLEAR_WD1();
		WAIT_BITS();
		SET_WD1();
		for(i=0;i<50;i++)
		WAIT_BITS();
	 }
	 else
	 {
	  	CLEAR_WD0();
		WAIT_BITS();
		SET_WD0();
		for(i=0;i<50;i++)
		WAIT_BITS();
	 }
	 write_data(data[3]);
	 write_data(data[2]);
	 write_data(data[1]);
	 write_data(data[0]);
	 
	 timer0_init();
	 if(stop_bit)
	 {
	  	CLEAR_WD1();
		WAIT_BITS();
		SET_WD1();
		for(i=0;i<50;i++)
		WAIT_BITS();
	 }
	 else
	 {
	  	CLEAR_WD0();
		WAIT_BITS();
		SET_WD0();
		for(i=0;i<50;i++)
		WAIT_BITS();
	 }
	 SET_HOLD();
}


void write_26data(unsigned int data)
{
 	 unsigned char i,j;
	 for(i=0;i<12;i++)
	 {
	  	timer0_init();
		if(data&0x800)
		{
			CLEAR_WD1();
		}
		else
		{
			CLEAR_WD0();
		}
		WAIT_BITS();
		SET_WD0();
		SET_WD1();
		timer0_init();
		for(j=0;j<50;j++)
		WAIT_BITS();
		data<<=1;	
	}
}

unsigned char cac_26byte(unsigned int data)
{
 	 unsigned char i,counter=0;
	 unsigned int temp;
	 temp=data;
	 for(i=0;i<12;i++)
	 {
	  	if(temp&0x01)counter++;
		temp>>=1;
	 }
	 return counter;
} 

void process_array(unsigned char *data)
{
 	 unsigned int temp1,temp2;
 	 unsigned int i;
	 unsigned char hi,lo;
	 unsigned char ll[3];
	
	 ll[0]=data[2];
	 ll[1]=data[1];
	 ll[2]=data[0];
	  
//	 lo=ll[1]<<4;
//	 lo=lo>>4;            //移出中间一个字节的低位
	 lo=ll[1]%16;
	 hi=ll[1]>>4;         //移出中间一个字节的高位

	 temp1=ll[0]*16+hi;
	 temp2=lo*256+ll[2];

	 CLEAR_HOLD();
	 timer0_init();
 	 if(cac_26byte(temp1)%2)
	 {
	  	CLEAR_WD1();
		WAIT_BITS();
		SET_WD1();
	 }
	 else
	 {
	  	CLEAR_WD0();
		WAIT_BITS();
		SET_WD0();
	 }
	 for(i=0;i<50;i++) WAIT_BITS();
	 
	 write_26data(temp1);
	 write_26data(temp2);
	 timer0_init();
	 if(cac_26byte(temp2)%2)
	 {
	  	CLEAR_WD0();
		WAIT_BITS();
		SET_WD0();
	 }
	 else
	 {
	  	CLEAR_WD1();
		WAIT_BITS();
		SET_WD1();
	 }
	 for(i=0;i<50;i++) WAIT_BITS();
	 SET_HOLD();
	 for(i=0;i<5000;i++) WAIT_BITS();
}

⌨️ 快捷键说明

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