蓝桥杯单片机学习过程记录(十)EEPROM读写
基础内容学了这些,明天开始做真题试试看。
#include<STC15F2K60S2.H>
#include<intrins.H>
sbit SCL=P2^0;
sbit SDA=P2^1;
unsigned char eep;
void delayms(int ms);
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void Delay6us();
void allinit();
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char yi,er,san,si,wu,liu,qi,ba;
void eep_stop();
void eep_start();
void eep_wait();
void eep_send(unsigned char dat);
unsigned char eep_rect();
unsigned char eep_read(unsigned char address);
void eep_write(unsigned char address,unsigned char dat);
void main(void){
allinit();
yi=10;er=10;san=10;si=10;wu=10;liu=10;qi=10;ba=10;
eep=eep_read(0x00);
delayms(2);
eep_write(0x00,eep+1);delayms(2);
yi=eep/100;
er=eep%100/10;
san=eep%10;
while(1){
display_12(yi,er);
display_34(san,si);
display_56(wu,liu);
display_78(qi,ba);
}
}
//eep¶Æô¶¯
void eep_start(){
SDA=1;SCL=1;Delay6us();
SDA=0;Delay6us();
SCL=0;
}
//eepֹͣ
void eep_stop(){
SDA=0;SCL=1;Delay6us();
SDA=1;
}
//eep·¢ËÍ
void eep_send(unsigned char dat){
unsigned char i;
for(i=0;i<8;i++){
if(dat&0x80)SDA=1;
else
SDA=0;
Delay6us();
SCL=1;
dat<<=1;
Delay6us();
SCL=0;
}
}
//eepµÈ´ý
void eep_wait(){
SDA=1;
Delay6us();
SCL=1;
Delay6us();
if(SDA){
SCL=0;
eep_stop();
}
else
SCL=0;
}
//eep½ÓÊÕ
unsigned char eep_rect(){
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++){
SCL=1;
Delay6us();
dat<<=1;
if(SDA){
dat|=0x01;
}
SCL=0;Delay6us();
}
return dat;
}
//eep¶Á
unsigned char eep_read(unsigned char address){
unsigned char temp;
eep_start();
eep_send(0xa0);
eep_wait();
eep_send(address);
eep_wait();
eep_stop();
eep_start();
eep_send(0xa1);
eep_wait();
temp=eep_rect();
eep_stop();
return temp;
}
//eepд
void eep_write(unsigned char address,unsigned char dat){
eep_start();
eep_send(0xa0);
eep_wait();
eep_send(address);
eep_wait();
eep_send(dat);
eep_wait();
eep_stop();
}
void Delay6us() //@11.0592MHz
{
unsigned char i;
i = 14;
while (--i);
}
void allinit(){
P2=0XA0;P0=0X00;
P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
P2=0X80;P0=0XFF;
}
void delayms(int ms){
int q,w;
for(q=0;q<ms;q++)
for(w=0;w<845;w++);
}
void display_12(yi,er){
P2=0XC0;P0=0X01;P2=0XE0;P0=seg[yi];
delayms(1);
P2=0XC0;P0=0X02;P2=0XE0;P0=seg[er];
delayms(1);
}
void display_34(san,si){
P2=0XC0;P0=0X04;P2=0XE0;P0=seg[san];
delayms(1);
P2=0XC0;P0=0X08;P2=0XE0;P0=seg[si];
delayms(1);
}
void display_56(wu,liu){
P2=0XC0;P0=0X10;P2=0XE0;P0=seg[wu];
delayms(1);
P2=0XC0;P0=0X20;P2=0XE0;P0=seg[liu];
delayms(1);
}
void display_78(qi,ba){
P2=0XC0;P0=0X40;P2=0XE0;P0=seg[qi];
delayms(1);
P2=0XC0;P0=0X80;P2=0XE0;P0=seg[ba];
delayms(1);
}