|
/*----------------------------------------------------- SPI93cXX系列時(shí)序函數(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; }
/*----------------------------------------------------- 從指定的地址中讀出一個(gè)字節(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); } /*----------------------------------------------------- 向指定的地址中寫入一個(gè)字節(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; }
|