×

I2C读写心得资料下载

消耗积分:2 | 格式:pdf | 大小:87.91KB | 2021-04-17

尚文清

分享资料个

  困扰我几的程序终于搞定了,前几天我对AT24C02一直读不准确,找了N长时间的程序都没有头绪,后来在板哥的指点下,一下子明白了,原因很简单,我在AT24C02_read()最后没有加延时,主要还是对时序没有控制好呀,用板哥的一句话是我们对器件的了解还不很熟,我现在也感到,一定要先了解了器件的特性,我们才能游刃有余把握住每一个容易疏忽的细节,在这里,板哥确实教会了我好多东西,在我刚学单片机时,他就对我说时序很重要,现在终于是看到了.   好了不罗嗦了,最后得出一点,最好在每个读写结束时加个延时,如果对时间要求不是很重要的话,加的长一点无所谓,如果要求比较高的话,那先加长延时,然后慢慢的减. #include #include /*********************************LCD定义部分********************************/ //输入方式设置 #define LCD_AC_AUTO_INCREMENT     0x06         //数据读、写操作后,AC自动增一 #define LCD_AC_AUTO_DECREASE      0x04         //数据读、写操作后,AC自动减一 #define LCD_MOVE_ENABLE           0x05         //数据读、写操作,画面平移 #define LCD_MOVE_DISENABLE        0x04         //数据读、写操作,画面不动 #define LCD_GO_HOME               0x02         //AC=0,光标、画面回HOME位 //设置显示、光标及闪烁开、关 #define LCD_DISPLAY_ON            0x0C         //显示开 #define LCD_DISPLAY_OFF           0x08         //显示关 #define LCD_CURSOR_ON             0x0A         //光标显示 #define LCD_CURSOR_OFF            0x08         //光标不显示 #define LCD_CURSOR_BLINK_ON       0x09         //光标闪烁 #define LCD_CURSOR_BLINK_OFF      0x08         //光标不闪烁 //光标、画面移动,不影响DDRAM #define LCD_LEFT_MOVE             0x18         //LCD显示左移一位 #define LCD_RIGHT_MOVE            0x1C         //LCD显示右移一位 #define LCD_CURSOR_LEFT_MOVE      0x10         //光标左移一位 #define LCD_CURSOR_RIGHT_MOVE     0x14         //光标右移一位 //工作方式设置 #define LCD_DISPLAY_DOUBLE_LINE   0x38         //两行显示 #define LCD_DISPLAY_SINGLE_LINE   0x30         //单行显示 #define LCD_CLEAR_SCREEN  0X01   //清屏 /***********************LCD1602地址相关******************************/ #define LINE1_HEAD    0x80   // 第一行DDRAM起始地址  #define LINE2_HEAD    0xc0   //  第二行DDRAM起始地址 #define LINE1         0      //第一行 #define LINE2         1      //第二行 #define LINE_LENGTH   16     //每行的最大字符长度 /***********************LCD1602接线引脚定义************************** **********************可根据实际电路改变*******************************/ #define LCDIO     P2         //定义P2口与LCD1602的数据口相接   sbit   LCD_RS=P1^4;            sbit   LCD_RW=P1^3;            sbit   LCD_EN=P1^2;   sbit  LCD_BUSY=LCDIO^7;  /**********************另外相关的定义*********************************/  #define HIGH               1  #define LOW                0     #define TURE               1  #define  FALSE             0  #define  uchar unsigned char  #define  uint  unsigned int  #define NUM 10  /*************************以下是函数的申明部分*************************/  void LCD_init(void);                    //LCD1602初始化  void LCD_send_command(uchar command);   //  void LCD_send_data(uchar dat);  void LCD_write_char(uchar x,uchar y,uchar dat);  void LCD_write_string(uchar x,uchar y,char *Data);  void delay_ms(uint n);  void LCD_check_busy(void);  /*********************结束***********************************************/ //at24c02 part #define  WRITE24C02    0xA0 #define     READ24C02    0xA1 //I2C part #define    Wait1us        _nop_(); #define    Wait2us        {_nop_();_nop_();} #define    Wait4us        {Wait2us;Wait2us;} #define    Wait8us        {Wait4us;Wait4us;} #define    Wait10us    {Wait8us;Wait2us;} sbit SDA=P2^7;      //AT24C02 serial data    pin 5  sbit SCL=P2^6;     //AT24C02 serial clock    pin 6 /********************************************************************/ void I2C_start(void);//I2C start function void I2C_stop(void);//I2C stop function //void I2C_send_ack(void);//I2C send responsion function  void I2C_send_noack(void); void I2C_write_byte(unsigned char IIC_data);//I2C bus write byte function  unsigned char I2C_read_byte(void);//I2C bus read byte function /********************************************************************/ void AT24C02_write(unsigned char address,unsigned char *buf,unsigned char n);//write 24c02 information function void AT24C02_read(unsigned char address,unsigned char *buf,unsigned char n);//read 24c02 information function /********************************************************************/ void Mcu_init(void);//system initize funcition void I2C_init(void);

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !