久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1854|回復: 1
收起左側

通過I2C讀取24c02的EEPOROM實驗程序

[復制鏈接]
ID:979479 發表于 2021-11-9 23:11 | 顯示全部樓層 |閱讀模式
/***************************************************************************************/
#include "public.h"
#include "24c02.h"
#include "key.h"
#include "smg.h"


#define EEPROM_ADDRESS        0        //定義數據存入EEPROM的起始地址

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        u8 key_temp=0;
           u8 save_value=0;
        u8 save_buf[3];

        while(1)
        {                        
                key_temp=key_scan(0);
                if(key_temp==KEY1_PRESS)
                {
                        at24c02_write_one_byte(EEPROM_ADDRESS,save_value);
                }
                else if(key_temp==KEY2_PRESS)
                {
                        save_value=at24c02_read_one_byte(EEPROM_ADDRESS);
                }
                else if(key_temp==KEY3_PRESS)
                {
                        save_value++;
                        if(save_value==255)save_value=255;
                }
                else if(key_temp==KEY4_PRESS)
                {
                        save_value=0;        
                }
                save_buf[0]=save_value/100;
                save_buf[1]=save_value%100/10;
                save_buf[2]=save_value%100%10;
                smg_display(save_buf,6);
        }               
}

#include "24c02.h"
#include "iic.h"


/*******************************************************************************
* 函 數 名         : at24c02_write_one_byte
* 函數功能                   : 在AT24CXX指定地址寫入一個數據
* 輸    入         : addr:寫入數據的目的地址
                                         dat:要寫入的數據
* 輸    出         : 無
*******************************************************************************/
void at24c02_write_one_byte(u8 addr,u8 dat)
{                                                                                                                                                                                          
    iic_start();  
        iic_write_byte(0XA0);        //發送寫命令                     
        iic_wait_ack();           
    iic_write_byte(addr);        //發送寫地址   
        iic_wait_ack();                                                                                                               
        iic_write_byte(dat);        //發送字節                                                               
        iic_wait_ack();                                 
    iic_stop();                                //產生一個停止條件
        delay_ms(10);         
}

/*******************************************************************************
* 函 數 名         : at24c02_read_one_byte
* 函數功能                   : 在AT24CXX指定地址讀出一個數據
* 輸    入         : addr:開始讀數的地址
* 輸    出         : 讀到的數據
*******************************************************************************/
u8 at24c02_read_one_byte(u8 addr)
{                                 
        u8 temp=0;                                                                                                                                                               
    iic_start();  
        iic_write_byte(0XA0);        //發送寫命令           
        iic_wait_ack();
    iic_write_byte(addr);         //發送寫地址  
        iic_wait_ack();            
        iic_start();                     
        iic_write_byte(0XA1);         //進入接收模式                                    
        iic_wait_ack();         
    temp=iic_read_byte(0);        //讀取字節                  
    iic_stop();                                //產生一個停止條件   
        return temp;                        //返回讀取的數據
}

#include "iic.h"

/*******************************************************************************
* 函 數 名       : iic_start
* 函數功能                 : 產生IIC起始信號
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void iic_start(void)
{
        IIC_SCL=1;
        IIC_SDA=1;
        delay_10us(1);
        IIC_SDA=0;        //當SCL為高電平時,SDA由高變為低
        delay_10us(1);
        IIC_SCL=0;//鉗住I2C總線,準備發送或接收數據
}

/*******************************************************************************
* 函 數 名         : iic_stop
* 函數功能                   : 產生IIC停止信號   
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void iic_stop(void)
{
        IIC_SCL=1;
        IIC_SDA=0;
        delay_10us(1);
        IIC_SDA=1;        //當SCL為高電平時,SDA由低變為高
        delay_10us(1);                        
}

/*******************************************************************************
* 函 數 名         : iic_ack
* 函數功能                   : 產生ACK應答  
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void iic_ack(void)
{
        IIC_SCL=0;
        IIC_SDA=0;        //SDA為低電平
        delay_10us(1);
           IIC_SCL=1;
        delay_10us(1);
        IIC_SCL=0;
}

/*******************************************************************************
* 函 數 名         : iic_nack
* 函數功能                   : 產生NACK非應答  
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void iic_nack(void)
{
        IIC_SCL=0;
        IIC_SDA=1;        //SDA為高電平
        delay_10us(1);
           IIC_SCL=1;
        delay_10us(1);
        IIC_SCL=0;        
}

/*******************************************************************************
* 函 數 名         : iic_wait_ack
* 函數功能                   : 等待應答信號到來   
* 輸    入         : 無
* 輸    出         : 1,接收應答失敗
                                 0,接收應答成功
*******************************************************************************/
u8 iic_wait_ack(void)
{
        u8 time_temp=0;
        
        IIC_SCL=1;
        delay_10us(1);
        while(IIC_SDA)        //等待SDA為低電平
        {
                time_temp++;
                if(time_temp>100)//超時則強制結束IIC通信
                {        
                        iic_stop();
                        return 1;        
                }                        
        }
        IIC_SCL=0;
        return 0;        
}

/*******************************************************************************
* 函 數 名         : iic_write_byte
* 函數功能                   : IIC發送一個字節
* 輸    入         : dat:發送一個字節
* 輸    出         : 無
*******************************************************************************/
void iic_write_byte(u8 dat)
{                        
    u8 i=0;
                       
    IIC_SCL=0;
    for(i=0;i<8;i++)        //循環8次將一個字節傳出,先傳高再傳低位
    {              
        if((dat&0x80)>0)
                        IIC_SDA=1;
                else
                        IIC_SDA=0;
        dat<<=1;           
                delay_10us(1);  
                IIC_SCL=1;
                delay_10us(1);
                IIC_SCL=0;        
                delay_10us(1);
    }         
}

/*******************************************************************************
* 函 數 名         : iic_read_byte
* 函數功能                   : IIC讀一個字節
* 輸    入         : ack=1時,發送ACK,ack=0,發送nACK
* 輸    出         : 應答或非應答
*******************************************************************************/
u8 iic_read_byte(u8 ack)
{
        u8 i=0,receive=0;

    for(i=0;i<8;i++ )        //循環8次將一個字節讀出,先讀高再傳低位
        {
        IIC_SCL=0;
        delay_10us(1);
                IIC_SCL=1;
        receive<<=1;
        if(IIC_SDA)receive++;   
                delay_10us(1);
    }                                         
    if (!ack)
        iic_nack();
    else
        iic_ack();  
                  
    return receive;
}



I2C-EEPROM實驗.rar

44.95 KB, 下載次數: 22, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:979479 發表于 2021-11-9 23:12 | 顯示全部樓層
試驗過,可以正常使用的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片在线观看网站 | 国产三级在线 | 特黄一级片 | 国内自拍xxxx18 | 日本亚洲欧美 | 日韩视频免费大全中文字幕 | 亚洲欧美视频在线 | 日韩二三区 | 精品一区三区 | 国产精品高潮呻吟av | 国产蜜臀av | 久久精品小视频 | 四虎影视大全 | 黄色成年人网站 | 亚洲国产精品av | 日韩福利片 | 深夜视频在线观看 | 国产在线播放av | 欧美一级艳片视频免费观看 | 小sao货撅起屁股扒开c微博 | 91福利在线观看 | 一区二区三区国产精品 | 成人性生活免费视频 | 2014天堂网 | 一级片免费在线观看 | 黄色一级在线观看 | 日韩成人影院 | 一区二区三区四区免费视频 | 国产精品99精品久久免费 | 亚洲免费精品 | 欧美激情三区 | 天天干天天操天天射 | 成人性色生活片 | 欧美大片一区二区 | 欧美日韩成人一区二区三区 | av天天干 | 一区二区不卡 | 激情综合网站 | 色一情一乱一乱一区91av | 国产嫩草视频 | 蜜臀av性久久久久av蜜臀妖精 |