/*-----------------------------------------------------
SPI93cXX系列時序函數(shù)調(diào)用(PDIP普通封裝)八位
----------------------------------------------------*/
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
#define UN unsigned char
void csf();
UN d10[4];
void delay();
void high46(void);
void low46(void);
void wd46(unsigned char dd);
unsigned char rd46(void);
void ewen46(void);
unsigned char read93c46_word(unsigned char address);
write93c46_word(unsigned char address,unsigned char dat);
void earal(void);
////#define di_93 dip3
/*file://#define sk_93 dip2
//#define cs_93 dip1
//#define do_93 dip4
//#define gnd_93 dip5
//#define org_93 dip6*/
sbit di_93=P2^5;
sbit do_93=P2^4;
sbit sk_93=P2^6;
sbit cs_93=P3^5;
sbit lsledcs =P3^7;
sfr16 DPTR=0x82;
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
UN code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9
0x88,0x83,0xa7,0xa1,0x86,0x8e};//數(shù)碼字型表
void main()
{ unsigned int i,j;
csf();
while(1)
{
P0=0xff;
lsledcs=1;
j=0;
while(j!=30)
{
i=0;
do{
P0=ledcode[0];
P1=0xfe;
delay();
P0=ledcode[1];
P1=0xfd;
delay();
P0=ledcode[2];
P1=0xfb;
delay();
P0=ledcode[3];
P1=0xf7;
delay();
i++;}
while(i!=10);
j++;
}
P1=0xff;
delay();delay();delay();delay();delay();delay();delay();delay();
}
}
void csf()
{ P0=ledcode[0];
P1=0xfe;
cs_93=0;sk_93=0;
ewen46();
TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;PCON|=0x80;TR1=1;
EA=1;
delay();
ES=0;
}
/*################################串口*/
void surt() interrupt 4
{UN surti; unsigned int cc1;
surti=0;
RI=0;ES=0;
P0=~P0;
d10[surti]=SBUF;
do
{cc1=0xfff;
surti++;
while(RI==0){cc1--;if(cc1==0){;goto out;}}
RI=0;d10[surti]=SBUF;}
while(1);
out:
if(d10[0]==0x55&&surti>2){write93c46_word(d10[1],d10[2]);}
else if(d10[0]==0xaa&&surti>1){SBUF=read93c46_word(d10[1]);while(TI==0){;}TI=0;}
else if(d10[0]==0xff){earal();}
ES=1;
}
void delay()
{ UN a, b;
for (a=0;a<=15;a++)
{
for (b=0;b<0x7f;b++)
{;}
}
}
//發(fā)送高電平1涵數(shù)
//-----------------------------------------------------
void high46(void)
{
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
}
/*-----------------------------------------------------
發(fā)送低電平0涵數(shù)
------------------------------------------------*/
void low46(void)
{
di_93=0;sk_93=1;_nop_();sk_93=0;_nop_();
}
/*-----------------------------------------------------
寫操作允許涵數(shù)
-------------------------------------------------*/
void ewen46(void)
{
cs_93=1;_nop_();
high46();low46();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
cs_93=0;
}
/*-----------------------------------------------------
從指定的地址中讀出一個字節(jié)數(shù)據(jù)(八位)涵數(shù)
-----------------------------------------------------*/
unsigned char read93c46_word(unsigned char address)
{
cs_93=1;_nop_();
ACC=address;
high46();high46();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC6;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC5;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC4;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC3;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC2;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC0;sk_93=1; _nop_();sk_93=0;_nop_();
sk_93=1; _nop_(); ACC7=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC6=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC5=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC4=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC3=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC2=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC1=do_93;sk_93=0;_nop_();
sk_93=1; _nop_(); ACC0=do_93;sk_93=0;_nop_();
cs_93=0;
return(ACC);
}
/*-----------------------------------------------------
向指定的地址中寫入一個字節(jié)數(shù)據(jù)(八位)涵數(shù)
-------------------------------------------------*/
write93c46_word(unsigned char address,unsigned char dat)
{cs_93=1;_nop_();
ACC=address;
high46();low46();
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC6;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC5;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC4;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC3;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC2;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=ACC0;sk_93=1; _nop_();sk_93=0;_nop_();
ACC=dat;
di_93=ACC7;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC6;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC5;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC4;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC3;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC2;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC1;sk_93=1;_nop_();sk_93=0;_nop_();
di_93=ACC0;sk_93=1;_nop_();sk_93=0;_nop_();
while(do_93==0){;}
cs_93=0;
}
//-----------------------------------------------------
//擦除所有單元涵數(shù)
//-----------------------------------------------------
void earal(void){
cs_93=1;_nop_();
high46();low46();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=0;sk_93=1; _nop_();sk_93=0;_nop_();
di_93=1;sk_93=1; _nop_();sk_93=0;_nop_();
while(do_93==0){;}
cs_93=0;
}