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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1820|回復: 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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:979479 發表于 2021-11-9 23:12 | 只看該作者
試驗過,可以正常使用的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片高清 | 国产免费看 | 91夜夜夜| 97高清国语自产拍 | 99资源| 国产精品免费观看视频 | 国产三级精品三级在线观看四季网 | 天天草天天干天天 | 青青草精品 | 亚洲欧美一区二区三区在线 | 国产视频1区 | 午夜视频一区 | 欧美日韩在线一区二区三区 | 久久久久久久久淑女av国产精品 | 亚洲精品久久久久久久久久久 | xx视频在线观看 | 中文字幕综合 | 久久久精品影院 | 久久精品二区亚洲w码 | 免费看国产片在线观看 | 91精品中文字幕一区二区三区 | 日日干干 | 欧美高清一级片 | 亚洲国产乱码 | 中文字幕精品一区二区三区精品 | 亚洲第一区久久 | 天天草天天干天天 | 国内精品免费久久久久软件老师 | 人人草人人干 | 久久久国产一区 | 国产精品久久国产愉拍 | 天天爽夜夜爽精品视频婷婷 | 黄色免费av | 久久国产成人午夜av影院武则天 | 免费av观看 | 成人午夜精品 | 久久日韩精品一区二区三区 | h片在线看 | 国产午夜三级一区二区三 | 欧美日韩在线观看一区 | 国产一区二区三区久久久久久久久 |