久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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_();
}



評論


技術專區

關閉