51hei论坛混这么多年,第一次发贴,搜索了下我们论坛有关这方面的帖子不多,决定发一个。本人不是科班出身,学的法律专业,单片机纯属自己爱好,所以不专业之处还请各位大侠包涵。
我用的是4位595驱动的数码管作为数据显示;
#include "STC15w408as.H"
#include "intrins.h"
#define U8 unsigned char
#define U16 unsigned int
#include "EEPROM.H" //这个文件在附件中可以下载
sbit DS=P1^2; //测试键
sbit SDA=P1^1; //595驱动数码管
sbit CLK=P1^0;
sbit ST=P3^7;
U8 shuzi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管编码
void SEND_595(U8 D_dat) //向595发送一个字节
{ U8 i;
for(i=0;i<8;i++)
{ CLK = 0;
if(D_dat&0x80) {SDA=1;} else{SDA=0;}
D_dat<<=1;
CLK = 1;
}
}
void disp(U16 R_dat) //数码管显示
{ U8 ge,shi,bai,qian;
ge=R_dat%10;
shi=R_dat/10; shi=shi%10;
bai=R_dat/100; bai=bai%10;
qian=R_dat/1000;
SEND_595(shuzi[ge]);
SEND_595(shuzi[shi]);
SEND_595(shuzi[bai]);
SEND_595(shuzi[qian]);
ST=1;ST=0;
}
void main ()
{ DS=1;
while(1)
{IAP_READ(0x0001); // 读取地址为0x0001里的数据
disp(IAP_READ_DAT); // 显示地址为0x0001里的数据
if(DS==0)
{IAP_del(0x0001); // 擦除0x0001里的数据 (发现每次写新的数据进去都要先擦除)
IAP_Write_DAT++; // 对原有的数据+1
IAP_Write(0x0001);} // 将新数据写入地址为0x0001里
}
}
说明:DS键每低电平一次EEPROM的地址为0x0001里的数据就加1 ,显示在数码管上。
最重要的是断电后,重新上电,刚才累加计数依然可以显示出来,这就是EEPROM的作用!
不是很专业,只希望给刚玩单片机的朋友们一点点帮助!!!
全部资料51hei下载地址:
EEPROM测试.zip
(28.61 KB, 下载次数: 59)
|