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

📄 26l.c

📁 接触式IC卡的读写函数
💻 C
字号:
#include "iot26v.h"
#include "macros.h"

#define uchar unsigned char
#define uint unsigned int

#define anjianweikai DDRA|=(1<<7);PORTA&=~(1<<7);
#define anjianweiguan DDRA&=~(1<<7);

#define fengmingkai PORTB|=(1<<6);PORTB|=(1<<7);
#define fengmingguan PORTB&=~(1<<6);PORTB&=~(1<<7);

#define rst0 PORTB&=~(1<<5) 
#define rst1 PORTB|=(1<<5) 
#define sda0 DDRB|=(1<<0);PORTB&=~(1<<0); 
#define sda1 DDRB|=(1<<0);PORTB|=(1<<0); 
#define scl0 DDRB|=(1<<2);PORTB&=~(1<<2); 
#define scl1 DDRB|=(1<<2);PORTB|=(1<<2); 
#define sdawei DDRB&=~(1<<0);PORTB|=(1<<0);


unsigned char com1=6,com2=5,cnt1=0;
unsigned int temp=0,qiangdu=368;

unsigned char disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
signed char kashu[2]={3,0};
unsigned char kawei=1,jianshu=0;

uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
void x24c02_write(uchar address,uchar info);//向24c02的address地址中写入一字节数据info
void x24c02_init(void);   //24c02初始化子程序
void delay1(uchar x);
void x24c01_init(void);
void start(void);
void stop(void);
void writex(uchar j);
unsigned char readx(void);
void clock(void);
/*延时函数*/
void delayus(int a)             //微秒级
{
  do
  a--; 
 while(a>1);
 //WDR();
}

void delayms(unsigned int a)        //毫秒级
{
 while(a!=0)
 {
  delayus(250);
  a--;
 }
}

void fengming(unsigned char a)             ////蜂鸣器
{
    fengmingkai;
	while(a>1)
	{
	a--;
	delayms(1);
	}
	fengmingguan;
}	

void x24c02_init(void)
{
   scl1; delayus(1); sda1; delayus(1);
}
void start(void)
{
   sda1; delayus(1); scl1;delayus(1); sda0; delayus(1); scl0; delayus(1);
}
void stop(void)
{
   sda0; delayus(1); scl1; delayus(1); sda1; delayus(1);
}
void writex(uchar j)
{
   uchar i,temp;
   temp=j;
   for (i=0;i<8;i++){
      scl0; delayus(1); 
	  if((temp&0x80)==0){sda0;}
	  else{sda1;}
	  delayus(1); scl1; delayus(1);
	  temp=temp<<1; 
   }
   scl0; delayus(1); sda1; delayus(1);
}

unsigned char readx(void)
{
   uchar i,j,k=0;
   scl0; delayus(1); sda1;
   for (i=0;i<8;i++){
      delayus(1); scl1; delayus(1);
	  sdawei;
      if ((PINB&0X01)==0){j=0;}
      else {j=1;}
      k=(k<<1)|j; scl0;
   }
   delayus(1); return(k);
}

void clock()
{
   uchar i=0;
   scl1; delayus(1);
   sdawei;
   while ((PINB&0X01!=0)&&(i<255)){i++;sdawei;}
   scl0; delayus(1);
}
uchar x24c02_read(uchar address)
{
   uchar i;
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); start();
   writex(0xa1); clock();
   i=readx(); stop();
   delayus(10);
   return(i);
}
void x24c02_write(uchar address,uchar info)
{  
   //CLI();
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); writex(info);
   clock(); stop();
   delayus(50);
   //SEI();
}
   
void jiancheicka(void)//检测IC卡
{
  uchar a=0;
 DDRB&=~(1<<5);
 PORTB|=(1<<5);
  if(((PINB&0X20)==0)&(kawei==1))
  {
   delayus(100);
    if(((PINB&0X20)==0)&(kawei==1))
	{ 
	  kawei=0;
                          kashu[0]=x24c02_read(2);
                             delayus(200);
							  kashu[1]=x24c02_read(4);
                             delayus(200);
							 fengming(10);
   }
  }
    if(((PINB&0X20)!=0)&(kawei==0))
  {
   delayus(100);
    if(((PINB&0X20)!=0)&(kawei==0))
	{
	 kawei=1;
	 fengming(10);
     }
	}	 
}    							 
	 
	 
	 
void xianshu(void)
{ 
  //anjianweiguan;
  DDRA=0Xff;
  PORTA=0X7F;
  PORTB&=~(0<<1);
  PORTA=disp[kashu[0]]&0x7f;
  delayms(1);
  PORTB|=(0<<3); 
  PORTA=disp[kashu[1]]&0x7f;
  PORTB&=~(0<<3);
  delayms(1);
  PORTB|=(0<<3);
  //anjianweikai;
    DDRA=0X80;
  PORTA=0x7f;
  ;
}
  
 void anjian(void)
 {
  
  DDRA=0X80;
  PORTA=0x7f;
delayus(10);
 if((PINA&0X4B)!=0x4B)
 {
  
    DDRA=0X80;
  PORTA=0x7f;
  delayms(1);
  if((PINA&0X4b)!=0X4b)
  {
   fengming(10);
     DDRA=0X80;
  PORTA=0x7f;
   if((PINA&0X40)==0)            //+
   {
   kashu[1]++;
   if(kashu[1]>9)
   {
    kashu[1]=0;
	kashu[0]++;
	if(kashu[0]>9)
	{
	 kashu[0]=9;
	 kashu[1]=9;
	 }
    } 
    while((PINA&0X40)==0)
	 {
	  xianshu();
    }	
   }
	if((PINA&0X08)==0)  //-档
	{
	 kashu[1]--;
	 if(kashu[1]<0)
	 {
	  kashu[1]=0;
	  kashu[0]--;
	  if(kashu[0]<0)
	  {
	   kashu[0]=0;
	   kashu[1]=0;
	  }
	 }  
	 while((PINA&0X08)==0)
	 {
	  xianshu();
	 } 
	}
	if((PINA&0X02)==0)  //2档
	{
	 jianshu=1;
	 while((PINA&0X02)==0)
	 {
	  xianshu();
	 }
	} 
	if((PINA&0X01)==0)
	{
	 jianshu=2;
	 while((PINA&0X01)==0)
	 {
	  xianshu();
	 }
	} 
   }	
  }	
  //anjianweiguan;
}


 void main(void)        //主程序
{
    MCUCR=0;
    DDRA = 0XFF;      /*方向输出*/ 
    PORTA = 0X7F;      /*高电平*/ 
	DDRB = 0xCA;
	PORTB = 0x35;
	kashu[0]=4;
	kashu[1]=5;
	//WDR();
	//WDTCR=0X0D;       //
	
	//SEI();
	
    while (1)
	{
	jiancheicka();
	 anjian();
	 xianshu();
	}
 
}


 

⌨️ 快捷键说明

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