存储器卡读写实验Word格式文档下载.docx
《存储器卡读写实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《存储器卡读写实验Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
3.实验结果
刚开始运行时,单片机没有读取任何数据,此时数码管显示数字为0;
当“读卡”按钮按下时,此时发光二极管亮,数码管显示预先存入24C04芯片的数值;
当“清除”按钮按下时,此时此时发光二极管灭,数码管数值清零。
图4
图5
图6
五、实验总结
通过本次实验我了解了存储器卡存、取数据的过程,同时了解
串行总线的工作原理。
实验在程序编写过程中遇到了问题,还是参考过老师以及网上的程序得到同学的帮助,才大体上完成。
每次实验都有新的收获,以后我会更加努力学习的。
六、实验代码
#include<
reg52.h>
#include<
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineNOP4(){_nop_();
_nop_();
}//延时4us
sbitSCL=P1^0;
//SCL引脚
sbitSDA=P1^1;
//SDA引脚
sbitBUTTON=P1^5;
//定义读卡按键
sbitLED=P1^6;
//定义模拟上电卡座
sbitBUTTONQ=P1^7;
//定义模拟取卡按键
uintshu;
//定义写入变量
//数码管显示数组
ucharcodeDUAN_XUAN[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
//延迟函数
voidDelay(uintx){
uchari;
while(x--){
for(i=0;
i<
120;
i++);
}
}
voidDelayMS(uintx){
uchart;
for(t=120;
t>
0;
t--);
/*IIC启动*/
voidStart(){
SDA=1;
SCL=1;
NOP4();
SDA=0;
SCL=0;
/*IIC停止*/
voidStop(){
SDA=0;
SDA=1;
/*读取应答*/
voidRACK(){
SDA=1;
/*发送非应答信号*/
voidNO_ACK(){
/*向24c04中写一字节*/
voidWrite_A_Byte(ucharb){
for(i=0;
8;
i++){//循环移入8位b<
<
=1;
SDA=CY;
RACK();
//读取应答
/*向24c04中读一字节*/
ucharReceive_A_Byte(){
uchari,d;
i++){
SCL=1;
d<
d|=SDA;
returnd;
/*任意地址写数据*/
voidWrite_Random_Address_Byte(ucharadd,uchardat){
Start();
Write_A_Byte(0xa0);
Write_A_Byte(add);
Write_A_Byte(dat);
Stop();
DelayMS(10);
/*当前地址读数据*/
ucharRead_Current_Address_Data(){
uchard;
Start();
Write_A_Byte(0xa1);
d=Receive_A_Byte();
NO_ACK();
/*任意地址读数据*/
ucharRandom_Read(ucharaddr){
Write_A_Byte(addr);
returnRead_Current_Address_Data();
//显示函数
voiddisplay(uintx){
ucharbai,shi,ge;
bai=x/100;
//取百位
shi=x%100/10;
//取十位
ge=x%10;
//取个位
P0=0xff;
//消影
Delay
(1);
P2=0x01;
P0=DUAN_XUAN[ge];
//显示个位
Delay(10);
P2=0x02;
P0=DUAN_XUAN[shi];
//显示十位
P2=0x04;
P0=DUAN_XUAN[bai];
//显示百位
//主函数
voidmain(){
uintx;
x=0;
shu=129;
//把要写的值赋给变量
BUTTON=1;
LED=0;
Write_Random_Address_Byte(0x00,shu);
//往00地址写入一个值
shu=Random_Read(0x00);
//读00地址的值
while
(1){
if(BUTTON==0){//判断读卡按键
Delay(40);
if(BUTTON==0){//消抖
LED=1;
//灯亮
x=shu;
//把读出的数赋给显示变量
}
}
if(BUTTONQ==0){//判断清除按键
if(BUTTONQ==0){
LED=0;
//灯灭
x=0;
//对显示变量的值清零
display(x);
//显示