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

📄 x76f100.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 C
字号:
//X76F100 加密IC卡芯片驱动程序 
//16X2液晶显示屏接在板子上作显示	X76F100接在P1口
#include <AT89X51.H>
#include <ABSACC.H>
#include <INTRINS.H>
#define uchar unsigned char
#define unint unsigned int
//********************************************************************
uchar idata uestc[]={	0X55,0X45,0X53,0X54,0X43,0X20,0x20,0X39,0X38,0X31,
		 	0X34,0X31,0Xb0,0x32,0x20,0x20,0x20,0x00};//UESTC__98141-2
uchar idata gongjun[]={	0X67,0X6f,0X6e,0X67,0X20,0X6a,0x75,0X6e,0X20,
		 	0X47,0X6f,0X6f,0X64,0x21,0x20,0x20,0x20,0x00};//gong_jun_Good!
//********************************************************************
//en-p27  rs-p24  rw-p23  D0--D7<-->P0--P7  定义液晶的引脚
	sbit en=P2^7;		sbit rs=P2^4;		sbit rw=P2^3;
//********************************************************************
bdata uchar Bcc;	//定义一个可位寻址的全局变量
sbit b0=Bcc^0;	sbit b1=Bcc^1;	sbit b2=Bcc^2;	sbit b3=Bcc^3;
sbit b4=Bcc^4;	sbit b5=Bcc^5;	sbit b6=Bcc^6;	sbit b7=Bcc^7;
//*************************************************
void DELAYL (uchar t){ uchar s;while (t--) {	//长时间延时子程序
	for (s=0xff;s>0;s--)	{_nop_();_nop_();_nop_();} } }
//*************************************************
void DELAYS (uchar t){ while (t--) {_nop_();_nop_(); } }//短时间延时子程序
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void wait(void){	en=0;	rs=0;	rw=1;	//读忙标志,忙则继续等待
	do {en=0;en=1;_nop_();Bcc=P0;en=0;} 	while(a7==1);	}
//********************************************************************
void command(uchar a){		//向液晶里写入指令、控制字
	en=0;rs=0;rw=0;en=1;P0=a;_nop_();en=0;wait();}
//********************************************************************
void reset(void){		//液晶模块软件复位
	en=0;rs=0;rw=0;en=1;P0=0x38;_nop_();en=0;delay(0x04);
	en=0;rs=0;rw=0;en=1;P0=0x38;_nop_();en=0;delay(0x02);command(0x38);}
	//置功能	(8位总线宽度、双行显示、5X7点阵显示)
//********************************************************************
void lcdstart(void){	//液晶模块初始化
	reset();	//液晶模块软件复位
	command(0x38);	//置功能	(总线宽度、单/双行显示、5X7或5X10显示)
	command(0x06);	//置输入模式(地址计数器自加减、画面左右移动)		
	command(0x0c);	//显示、光标、光标闪烁的开关
	command(0x01);}	//清屏幕的显示
//********************************************************************
//	command(0x02);	//光标复位,返回到地址00H处		
//	command(0x14);	//光标或字符左右移位显示	
//	command(0x40);	//置字符发生存储器地址
//	command(0x80);	//置数据存储器地址	
//********************************************************************
//void mov(void){	uchar x;  for (x=0;x<0xff;x++){
//s	command(0x18);	delay(0xa0);}		}//光标或字符移位
//********************************************************************
void display(s)		uchar idata *s;	//向指定的显示存储器地址写入待显示的字符串
	{uchar i=0;while (s[i]!=0x00){en=0;rs=1;rw=0;	//写数据方式
	en=1;P0=s[i];en=0;wait();i++;_nop_();}	}	//输出数据
//********************************************************************
void word_w(uchar s){	//向指定的显示存储器地址写入待显示的单个字符
	en=0;rs=1;rw=0;en=1;P0=s;en=0;wait();}	//写数据方式输出数据




//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//  定义X76F100的引脚
	sbit X76_CS=P1^3; sbit X76_RST=P1^2; sbit X76_SDA=P1^7; sbit X76_SCK=P1^4;
//********************************************************************
void START(void) 	//start 串行传输开始条件
	{X76_CS=0;sda=1;scl=1;_nop_();_nop_();sda=0;_nop_();scl=0;}
//********************************************************************
void STOP(void){ 	//stop  串行传输结束条件
	sda=0;scl=1;_nop_();_nop_();sda=1;scl=0;X76_CS=1;}
//********************************************************************
uchar IN_RD(void){uchar a;  X76_SCK=0;	//输出8个脉冲,读入一个字节数据
	X76_SCK=1;b7=X76_SDA;X76_SCK=0;X76_SCK=1;b6=X76_SDA;X76_SCK=0;
	X76_SCK=1;b5=X76_SDA;X76_SCK=0;X76_SCK=1;b4=X76_SDA;X76_SCK=0;
	X76_SCK=1;b3=X76_SDA;X76_SCK=0;X76_SCK=1;b2=X76_SDA;X76_SCK=0;
	X76_SCK=1;b1=X76_SDA;X76_SCK=0;X76_SCK=1;b0=X76_SDA;X76_SCK=0;a=Bcc;return(a);}
//********************************************************************
void OUT_WR(uchar a){Bcc=a;  X76_SCK=0;
	b7=X76_SDA;X76_SCK=1;X76_SCK=0;b6=X76_SDA;X76_SCK=1;X76_SCK=0;
	b5=X76_SDA;X76_SCK=1;X76_SCK=0;b4=X76_SDA;X76_SCK=1;X76_SCK=0;
	b3=X76_SDA;X76_SCK=1;X76_SCK=0;b2=X76_SDA;X76_SCK=1;X76_SCK=0;
	b1=X76_SDA;X76_SCK=1;X76_SCK=0;b0=X76_SDA;X76_SCK=1;X76_SCK=0;}
//********************************************************************
void ACK(void){X76_SDA=0;X76_SCK=0;X76_SCK=1;X76_SCK=0;}	//主机应答
//********************************************************************
void NACK(void){X76_SDA=1;X76_SCK=0;X76_SCK=1;X76_SCK=0;}	//让IC卡应答
//********************************************************************
uchar RESET(void){uchar a,b,c,d;  X76_CS=1;X76_RST=0;X76_SCK=0;X76_SDA=1;
	X76_CS=0;X76_RST=1;X76_SCK=0;X76_SCK=1;X76_SCK=0;X76_RST=0;
	a=IN_RD();b=IN_RD();c=IN_RD();d=IN_RD();X76_CS=1;
	if((a==0x98)&(b==0x00)&(c==0x55)&(b==0xaa)){return(0x00);}else{return (0xff);}}
//********************************************************************
uchar ERASE(void){ uchar a;
//********************************************************************
uchar READ_IC(uchar a){START();OUT_WR(0x81|((a&0x0f)<1));NACK();
	OUT_WR(0x00);NACK();OUT_WR(0x00);NACK();
	OUT_WR(0x00);NACK();OUT_WR(0x00);NACK();
	OUT_WR(0x00);NACK();OUT_WR(0x00);NACK();
	OUT_WR(0x00);NACK();OUT_WR(0x00);NACK();DELAYL(0x03);
//********************************************************************
//********************************************************************
//********************************************************************
//********************************************************************
main(){
	//************************************************************
	RESET();
	CHECK();
	ERASE();
	READ_IC();
	WRITE_IC();
	PREAD_IC();
	PWRITE_IC();
	PASSWORD();
}
	

⌨️ 快捷键说明

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