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

📄 24c64ok.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 C
字号:
//ic system
#include <INTRINS.H>
#include <AT89x51.H>
#define uchar unsigned char
#define uint unsigned int
uint o=1,p=0;
//*************************************************
uchar  system[]={0x20,0x49,0x43,0x20,0x43,0x41,0x52,0x44,
                      0x20,0x53,0x59,0x53,0x54,0x45,0x4d,0x00};
uchar  beyond[]={0x20,0x42,0x45,0x59,0x4f,0x4e,0x44,0x20,
                      0x20,0x20,0x55,0x45,0x53,0x54,0x43,0x20};
uchar  id[]={0x20,0x20,0x20,0x20,0x39,0x38,0x31,0x32,
                  0x31,0x2D,0x30,0x07,0x20,0x20,0x20,0x00};
uchar  money[]={0x20,0x07,0x07,0x07,0x2e,0x07,0x07,0x20,
				0x20,0x5c,0x3a,0x30,0x30,0x2e,0x30,0x30};
//*******************************************************
sbit en=P1^7;     sbit rs=P1^5;     sbit rw=P1^6;
sbit ATSDA=P1^1;  sbit ATSCL=P1^0;  sbit IC=P1^3;
sbit a0=ACC^0;	  sbit a1=ACC^1;	sbit a2=ACC^2;	sbit a3=ACC^3;
sbit a4=ACC^4;	  sbit a5=ACC^5;	sbit a6=ACC^6;	sbit a7=ACC^7;
//*******************************************************
void delay (char t)
	{uchar s;while (t--){for (s=0xff;s>0;s--){_nop_();_nop_();_nop_();}}}
//*************************************************
//lcd
//*************************************************
void wait(void){	en=0;	rs=0;	rw=1;	
	do {en=0;en=1;_nop_();ACC=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(0x09);
	en=0;rs=0;rw=0;en=1;P0=0x38;_nop_();en=0;delay(0x06);command(0x38);}
//*************************************************
void lcdstart(void){
	reset();
	command(0x38); 
	command(0x06);		
	command(0x0c);
	command(0x01);}	
//*************************************************
void display(s)		uchar data *s;	
	{uint m=0;while (s[m]!=0x00){en=0;rs=1;rw=0;
	en=1;P0=s[m];en=0;wait();m++;_nop_();}	}	
//*************************************************
//  c64
//************************************************* 
void delay_12us(void)
{
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
_nop_();
_nop_();
}
//****************************************************
void at24cxx_start(void)
{
   ATSDA=1;
   ATSCL=1;
   _nop_();
   _nop_();
   ATSDA=0;
   delay_12us();
   ATSCL=0;
   _nop_();
   _nop_();
}
//***************************************************
void at24cxx_stop(void)
{
   ATSCL=0;
   ATSDA=0;
   _nop_();
   _nop_();
   ATSCL=1;
   delay_12us();
   ATSDA=1;
   _nop_();
   _nop_();
}
//**********************************************************
void at24cxx_si(uchar si)
{
   uchar i=8;
   while(i--)
   {
      ATSDA=(bit)(si&0x80);
      ATSCL=1;
      delay_12us();
      ATSCL=0;
      delay_12us();
      si<<=1;
   }
   ATSDA=0;        //* acknowledge */
   delay_12us();
   ATSCL=1;
   delay_12us();
   ATSCL=0;
   delay_12us();
   ATSDA=1;
}
//*******************************************************
uchar at24cxx_so(void)
{
   uchar so,i=8;
   ATSDA=1;
   do {
      so <<= 1;
      if (ATSDA) so |=0x01;
      ATSCL=1;
      delay_12us();
      ATSCL=0;
      delay_12us();
   }  while(--i);
   return(so);
}
//*******************************************************************
uchar at24c32_rb(uint addr)      /* random read */
{
   uchar f_addr,s_addr;
   f_addr=addr/256;
   s_addr=addr%256;
   at24cxx_start();
   at24cxx_si(0xa0);
   at24cxx_si(f_addr);
   at24cxx_si(s_addr);
   at24cxx_start();
   at24cxx_si(0xa1);
   f_addr=at24cxx_so();
   at24cxx_stop();
   return(f_addr);
}
//*************************************************************
char at24c32_wb(uint addr, uchar dat)    
{
   uchar f_addr,s_addr;
   f_addr=addr/256;
   s_addr=addr%256;
   at24cxx_start();
   at24cxx_si(0xa0);
   at24cxx_si(f_addr);
   at24cxx_si(s_addr);

   at24cxx_si(dat);
   at24cxx_stop();
   delay(0x5f);
   return(at24c32_rb(addr));
}
//*************************************************
//232
//*************************************************

//*************************************************
void txd(uchar z)	//串口发送子程序
{ SBUF=z;while (TI==0);TI=0;
}
//*************************************************
rxd() interrupt 4 using 2	//串口接收子程序
{uchar x;//a,b,c,d,e;
	
	
	while (RI==0);RI=0;
	x=SBUF;
	
/*	money[2]=x;
	command(0xc0);display(money);
*/	
	
	if(o==1){money[1]=x;o++;}
	else if(o==2){money[2]=x;o++;}
	else if(o==3){money[3]=x;o++;}
	else if(o==4){money[5]=x;o++;}
	else if(o==5){money[6]=x;o++;}
	
	else if(o==6){money[11]=x;o++;}
	else if(o==7){money[12]=x;o++;}
	else if(o==8){money[14]=x;o++;}
	else {money[15]=x;o=1;p=1;IE=0x80;	
		command(0xc0);display(money);

	
/*	money[1]=at24c32_wb(1,0x35);
	money[2]=at24c32_wb(2,0x30);
	money[3]=at24c32_wb(3,0x30);
	money[5]=at24c32_wb(4,0x30);
	money[6]=at24c32_wb(5,0x30);*/
	
	}
		

}

//*************************************************
main()
{ 
	P1=0xff;
	TMOD=0x20;
	TL1=0xfd;TH1=0xfd;	//256-11059200/384/9600=0xfd
	SCON=0x50;PCON=0x00;	//fang shi 1
	TR1=1;IE=0x80;		//ji shu qi 
	
	lcdstart();
while(1)
{	IE=0x80;

	if(IC!=0)
	{id[11]=at24c32_rb(0);
	money[1]=at24c32_rb(1);
	money[2]=at24c32_rb(2);
	money[3]=at24c32_rb(3);
	money[5]=at24c32_rb(4);
	money[6]=at24c32_rb(5);
	txd(id[11]);
	txd(money[1]);
	txd(money[2]);
	txd(money[3]);
	txd(money[5]);
	txd(money[6]);
	
	command(0x80);display(id); 	
	command(0xc0);display(money); 
	delay(0xff);
	IE=0x90;
	while(IC!=0){_nop_();_nop_();_nop_();
				if(p!=0){at24c32_wb(1,money[1]);
						 at24c32_wb(2,money[2]);
						 at24c32_wb(3,money[3]);
						 at24c32_wb(4,money[5]);
						 at24c32_wb(5,money[6]);
							p=0;}}
	money[11]=0x30;money[12]=0x30;money[14]=0x30;money[15]=0x30;
	}
	else {	command(0x80);display(system); 	
			command(0xc0);display(beyond);
			delay(0xff);};
}
}


⌨️ 快捷键说明

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