新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机—AT24C1024(带程序解析!)—07

51单片机—AT24C1024(带程序解析!)—07

作者: 时间:2016-11-25 来源:网络 收藏



然后就是程序了:

main.c(先从主程序开始吗~~后边还有很多的

//------------------------------------------------------------------------------
//main.c~~~主文件
#include"reg52.h"
#include"MacroAndCOnst.h"
#include"at24c1024.h"
#include"delay.h"
#include"lcdinit.h"
//------------------------------------------------------------------------------
uchar code title[]="AT24C1024 Text: ";
uchar send_data[16]={0,1,2,3,4,5,6,7,8,9};//要写入到AT24C1024的数据
uchar receive_data[10]; //存储懂AT24C1024读出的数据
//------------------------------------------------------------------------------
//main
void main()
{
lcd_init();
lcd_display_string(0x80,title,16);
//delay(100);//不知道为什么,我第一做的时候延时时间长就错误,很明显是寄存器公用问题
//可是当我整理的时候却又能用了~我去列~留着~
while(!mcu_send_string(0xa0,0x00,0x00,send_data,10));
delay(10);//这里一定要有一定的延时~~你懂的~~不过我用while循环送~~也可以不用延时
//如果没有while语句,那就必须要有个一直延时的~~
while(!mcu_receive_string(0xa0,0x00,0x00,receive_data,10));
lcd_display_string(0x80+0x40,receive_data,10);
while(1);
}

LcdInit.c

//------------------------------------------------------------------------------
//LCD1602的初始化程序—可调用函数—C51
#include"reg52.h"
#include"MacroAndConst.h"
#include"Delay.h"
#include"Foot.h"
//------------------------------------------------------------------------------
#definedata_port P2
sbit lcd_en=P3^4;//定义lcd_en使能引脚
sbit lcd_rs=P3^5;//定义锁存引脚
sbit lcd_rw=P3^6;//定义读写引脚
//------------------------------------------------------------------------------
//LCD写指令函数
void lcd_write_command(uchar com)
{
lcd_rs=0;
lcd_rw=0;
data_port=com;
delay(1);
lcd_en=1;
delay(1);
lcd_en=0;
}
//------------------------------------------------------------------------------
//LCD写数据函数
void lcd_write_data(uchar dat)
{
lcd_rs=1;
lcd_rw=0;
data_port=dat;
delay(1);
lcd_en=1;
delay(1);
lcd_en=0;
}
//------------------------------------------------------------------------------
//LCD初始化函数
void lcd_init()
{
lcd_write_command(0x01);
delay(1);
lcd_write_command(0x38);
delay(1);
lcd_write_command(0x0c);
delay(1);
lcd_write_command(0x06);
delay(1);
}
//------------------------------------------------------------------------------
//LCD显示一个字节函数
void lcd_display_char(uchar add,uchar dat)
{
lcd_write_command(add);
delay(1);
lcd_write_data(dat);
delay(1);
}
//------------------------------------------------------------------------------
//LCD显示多个字节函数
void lcd_display_string(uchar add,uchar *s,uchar num)
{
uchar i;
lcd_write_command(add);
for(i=0;i {
lcd_write_data(s[i]);
delay(1);
}
}
IIC.c

//------------------------------------------------------------------------------
#include"reg52.h"
#include"MacroAndConst.h"
#include"intrins.h"
#include"Foot.h"
bitack;
//------------------------------------------------------------------------------
//开始信号函数
void IIC_start()
{
sda=1;
_nop_();
scl=1;//开始信号建立时间大于4.7us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=0; //开始信号锁定大于4us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
scl=0;//钳住IIC总线,准备发送或者接收数据
_nop_();
_nop_();
}
//------------------------------------------------------------------------------
//结束信号函数
void IIC_stop()
{
sda=0;
_nop_();
scl=1; //结束时间大于4us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sda=1;//保证一个终止信号和其实信号的空闲时间大于4.7us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//------------------------------------------------------------------------------
//主控器件接收应答函数
void IIC_ack_acc()
{
_nop_();
_nop_();
sda=1;//8位数据发送完后,准备接收数据
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
if(sda==1)
ack=0;
else
ack=1;//接收到应答位,ack为1,否则置0
scl=0;
_nop_();
_nop_();
}



评论


技术专区

关闭