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

📄 main.c

📁 利用aRM编程实现点阵的显示功能
💻 C
字号:
/****************************************************************************
********                 石家庄智讯科技有限公司                      ********
********                                                             ********
******** ShijiaZhuang Intelligence&Communication Scientific CO.,LTD. ********
****************************************************************************/


/****************************************************************************
********                      系统配置                                *******
*****************************************************************************/
#define IN_MAIN
#include "config.h"
#include "disp.h"
uint8 password[]={0xff,0xff,0xff};
uint8 zhang[]={"持卡人: 张  巍  "};
uint8 kahao[]={"卡号:20060603001"};
uint8 riqi[]= {"发卡日期:2006-06"};
uint8 gongsi[]= {"单位: 智讯公司  "};
uint8 mao[]={"持卡人: 毛力峰  "};
uint8 kahao1[]={"卡号:20060603002"};
uint8 daima[]={0x00,0x00,0x01};
uint8 daima1[]={0x00,0x00,0x02};
/****************************************************************************
********                       子程序                                 *******
*****************************************************************************/
void  IRQ_EXE(void)//非向量中断入口,勿删
{
    while(1);//用户替换自己的程序
}


void ic_delay()
{
	uint8 i;
	for(i=100;i>0;i--);
}
void delayms(uint32 x)
{
	uint32 j;
	for(;x>0;x--)
		for(j=50000;j>0;j--);
}
void init_iccard()
{
	PINSEL0=0;
	PINSEL1=0;
	IO0DIR=IO0DIR|ic_clk;
	IO0DIR=IO0DIR|ic_dat;
	IO0DIR=IO0DIR|ic_rst;

}
void ic_start()
{
	IO0SET=ic_dat;
	ic_delay();
	IO0SET=ic_clk;
	ic_delay();
	IO0CLR=ic_dat;
	ic_delay();
	IO0CLR=ic_clk;
}

void ic_end()
{
	IO0CLR=ic_dat;
	ic_delay();
	IO0SET=ic_clk;
	ic_delay();
	IO0SET=ic_dat;
	ic_delay();
	IO0CLR=ic_clk;
	IO0CLR=ic_dat;
}
void ic_sclk()
{
	ic_delay();
	IO0SET=ic_clk;
	ic_delay();
	IO0CLR=ic_clk;
	ic_delay();
}
void ic_wrbyte(uint8 dat)
{
	uint8 i,j;
	i=dat;
	for(j=8;j>0;j--)
	{
		if(i&0x01)IO0SET=ic_dat;
		else IO0CLR=ic_dat;
		ic_sclk();
		i>>=1;
	}
}
uint8 ic_rdbyte()
{
	uint8 i,dat;
	dat=0;
	IO0CLR=ic_clk;
	ic_delay();
	IO0DIR=IO0DIR&(~ic_dat);
	for(i=8;i>0;i--)
	{
		
		if(IO0PIN&ic_dat)
		{
			dat>>=1;
			dat=dat|0x80;
			
		}
		else dat>>=1;
		ic_sclk();
		ic_delay();
	}
	IO0DIR=IO0DIR|ic_dat;
	return(dat);
}
void ic_wrdata(uint8 com,uint8 addr,uint8 dat)
{
	ic_start();
	ic_wrbyte(com);
	ic_wrbyte(addr);
	ic_wrbyte(dat);
	ic_end();
}
void ic_process()
{
	uint8 i;
	ic_sclk();
	for(i=255;i>0;i--)ic_sclk();
}

uint8 ic_verify(uint8 *p)
{
	uint8 temp[4];
	uint8 dat;
	ic_wrdata(ic_rdsm,0,0);//读密码区
	temp[0]=ic_rdbyte();
	temp[1]=ic_rdbyte();
	temp[2]=ic_rdbyte();
	temp[3]=ic_rdbyte();
	if(temp[0]&0x07)//比较EC
	{
		if((temp[0]&0x07)==0x07)dat=0x06;
		if((temp[0]&0x07)==0x06)dat=0x04;
		if((temp[0]&0x07)==0x04)dat=0x00;
		ic_wrdata(ic_wrsm,0,dat);//写入EC
		ic_process();
		ic_wrdata(ic_cmps,0x01,*p);//校验密码
		ic_process();
		p++;
		ic_wrdata(ic_cmps,0x02,*p);//校验密码
		ic_process();
		p++;
		ic_wrdata(ic_cmps,0x03,*p);//校验密码
		ic_process();
		ic_wrdata(ic_wrsm,0,0xff);//刷新EC
		ic_process();
		ic_wrdata(ic_rdsm,0,0);//读密码区
		temp[0]=ic_rdbyte();
		temp[1]=ic_rdbyte();
		temp[2]=ic_rdbyte();
		temp[3]=ic_rdbyte();
		if(temp[0]==0x07)return(0x01);
		else return(0);
	}
	else return(0);
}
void ic_reset()
{
	IO0CLR=ic_rst;
	ic_delay();
	IO0CLR=ic_clk;
	ic_delay();
	IO0SET=ic_rst;
	ic_delay();
	IO0SET=ic_clk;
	ic_delay();
	IO0CLR=ic_clk;
	ic_delay();
	IO0CLR=ic_rst;
	ic_delay();
}

void ic_write()
{
	uint8 i;
	for(i=0;i<3;i++)
	{
		ic_wrdata(ic_wrmm,0x20+i,daima[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x30+i,zhang[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x40+i,kahao[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x50+i,riqi[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x60+i,gongsi[i]);
		ic_process();
	}
	
}


void ic_write1()
{
	uint8 i;
	for(i=0;i<3;i++)
	{
		ic_wrdata(ic_wrmm,0x20+i,daima1[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x30+i,mao[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x40+i,kahao1[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x50+i,riqi[i]);
		ic_process();
	}
	for(i=0;i<16;i++)
	{
		ic_wrdata(ic_wrmm,0x60+i,gongsi[i]);
		ic_process();
	}
	
}

void disp_code()
{
	uint8 i,k;
	uint32 j,dat;
	dat=0;
	ic_reset();
	delayms(200);
	i=ic_rdbyte();
	j=(uint32)i;
	dat+=j;
	i=ic_rdbyte();
	j=(uint32)i;
	j<<=8;
	dat+=j;
	i=ic_rdbyte();
	j=(uint32)i;
	j<<=16;
	dat+=j;
	i=ic_rdbyte();
	j=(uint32)i;
	j<<=24;
	dat+=j;
	disp_uint32(dat);
	delayms(100);

/***注意:此处以下为密码确认和修改程序,在不使用密码的情况应尽量屏蔽****/
/***注意:密码校验3次失败后,IC卡自动销毁,不要随意修改密码和程序*****/
/*	i=ic_verify(&password[0]);   
	disp_uint32(i);
	delayms(300);

	ic_write();

	ic_wrdata(ic_rdmm,0x00,0);
	for(k=255;k>0;k--)
	{
		i=ic_rdbyte();
		disp_uint32(i);
		delayms(300);
	}

	dat=0;
	ic_wrdata(ic_rdmm,0,0);
	for(k=255;k>0;k--)
	{
		i=ic_rdbyte();
		disp_uint32(i);
		delayms(200);
	}
	dat=0;
	ic_wrdata(ic_rdsm,0,0);
	i=ic_rdbyte();
	j=(uint32)i;
	dat+=j;
	i=ic_rdbyte();
	j=(uint32)i;
	j<<=8;
	dat+=j;
	i=ic_rdbyte();
	j=(uint32)i;
	j<<=16;
	dat+=j;
	i=ic_rdbyte();
	ic_sclk();
	j=(uint32)i;
	j<<=24;
	dat+=j;
	disp_uint32(dat);*/
	
}



/*****************************************************************************
*******                        主程序                                 ********
*****************************************************************************/
void Main(void)
{
    TargetInit();//系统初始化程序,勿删! 
    delayms(100);
    init_iccard();
    init_7289();
    delayms(100);
    sendcmd_key(reset_7289);
	sendcmd_key(test_7289);
	delayms(500);
	sendcmd_key(reset_7289);

    while(1)disp_code();
}

⌨️ 快捷键说明

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