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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1768|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 特级做a爰片毛片免费看108 | 操操操av | 狠狠操av| 国产精品一二三区 | 免费观看成人性生生活片 | 精品国产一区二区三区久久久四川 | 免费a级毛片在线播放 | 精品乱码一区二区三四区 | 成人妇女免费播放久久久 | 精精国产xxxx视频在线播放 | 国产美女特级嫩嫩嫩bbb片 | 欧美男人天堂 | 国内精品视频免费观看 | 日韩av黄色 | 亚洲淫视频 | 真人女人一级毛片免费播放 | 久久成人久久 | 国产成人久久av免费高清密臂 | 九色www| 国产精品视屏 | 日韩电影免费观看中文字幕 | 二区三区视频 | 国产精品欧美一区喷水 | 日韩激情在线 | 日韩欧美手机在线 | 人人人人干 | 啪啪免费网 | 天天干免费视频 | 久久久久国产一区二区三区 | 欧美13videosex性极品 | 久久99网 | pacopacomama在线 | 日本aaaa| 麻豆久久久 | 狠狠爱视频 | 一区二区影视 | 亚洲高清视频一区二区 | 色婷综合网 | av一区在线观看 | 午夜精品一区二区三区在线视频 | 一区二区福利视频 |