5834|11

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用51单片机控制的AT24C02的写入与读取程序问题咨询 [复制链接]

#include
sbit SCL = P3^5;
sbit SDA = P3^6;
sbit RS = P2^6 ;
sbit RW = P2^5 ;
sbit EN = P2^7 ;
sbit BUSY = P0^7;
char senddata[8]={"11:28:37"};
char recdata[8];
/*********************************************************************
  LCD1602       
***********************************************************************/
/**
* 等待繁忙标志
*/
void wait(void)
{
        P0 = 0xFF;
        do
        {
                RS = 0;
                RW = 1;
                EN = 0;
                EN = 1;
        }while (BUSY == 1);
        EN = 0;
}

//写数据

void w_dat(char dat)
{
        wait();
        EN = 0;
        P0 = dat;
        RS = 1;
        RW = 0;
        EN = 1;
        EN = 0;
}

//写命令

void w_cmd(char cmd)
{
        wait();
        EN = 0;
        P0 = cmd;
        RS = 0;
        RW = 0;
        EN = 1;
        EN = 0;
}

/**
* 初始化1602
*/
void Init_LCD1602(void)
{
        w_cmd(0x38);  // 16*2显示,5*7点阵,8位数据接口
        w_cmd(0x0C);  // 显示器开、光标开、光标允许闪烁
        w_cmd(0x06);  // 文字不动,光标自动右移
        w_cmd(0x01);  // 清屏
}
/*************延时函数************/
void DELAY(char time)
{
   while(time!=0) time--;
}
/************开始函数*************/
void start(void)
{
  SDA = 1;
  SCL = 1;
  DELAY(70);
  SDA = 0;
  DELAY(70);
  SCL = 0;
  DELAY(70);
}
/************停止函数*************/
void stop(void)
{
  SDA = 0;
  SCL = 1;
  DELAY(70);
  SDA = 1;
  DELAY(70);
  SCL = 0;
  DELAY(70);
}

/*检验设备是否有应答信号函数CKAck*/
bit CKAck(void)
{
  SDA = 1;
  SCL = 1;
  DELAY(35);
  F0 = SDA;
  DELAY(35);
  SCL = 0;
  DELAY(70);
  if(F0==1)
  {return 0;}
  return 1;
}
/*向IIC总线送一个字节函数*/
void WByte(char b)reentrant
{
  char i ;
  for(i=0;i<8;i++)
   if((b<    {
     SDA = 1;
         SCL = 1;
         DELAY(70);
         SCL = 0;
         DELAY(70);
    }
   else
   {
            SDA = 0;
         SCL = 1;
         DELAY(70);
         SCL = 0;
         DELAY(70);
    }
}
/*从IIC总线读一个字节*/
char RByte(void) reentrant
{
  char a,i;
  for(i=0;i<8;i++)
   {
            SDA=1;
         SCL=1;
         DELAY(10);
         F0=SDA;
         DELAY(10);
         SCL=0;
         if(F0==1)
          {
            a=a<<1;
                a=1|0x01;
          }
            else
           a=a<<1;
    }
        return a;

}
/*写一页数据函数W8Byte,其中addr为8个写入数据的首地址,adr为存放的起始地址*/
void W8Byte(char *addr,char adr)
{
  bit ack;
  int i;
  start();
  WByte(0xa0);
  ack = CKAck();
  WByte(adr);
  ack = CKAck();
  for(i=0;i<8;i++)
    {
          WByte(addr[i]);
          if(!CKAck())
            { stop();}
        }
        stop();
}
/*读N个字节函数,Read,其中,addr为要存放的数据的首地址,n为字节数,adr为要读取数据的首地址*/
void RNByte(char *addr,char n,char adr)
{
  bit ack;
  int i=0;
  start();
  WByte(0xa0);
  ack = CKAck();
  WByte(adr);
  ack=CKAck();
  start();
  WByte(0xa1);
  ack = CKAck();
  for(i=0;i    {
            addr[i]=RByte();
         if(i!=n-1)
         {
          SDA=0;
          SCL=1;
          DELAY(70);
          SCL=0;
          DELAY(70);
          }
         else
          {
           SDA=1;
           SCL=1;
           DELAY(70);
           SCL=0;
           DELAY(70);
          }
             stop();
    }
}
/*******主函数**************/
void main()
{
  Init_LCD1602();
  W8Byte(senddata,0x10);
  RNByte(recdata,1,0x10);
        while(1)
        {
               w_cmd(0x80);
          w_dat(recdata[0]);
                    w_cmd(0x81);
          w_dat(recdata[1]);
                    w_cmd(0x82);
          w_dat(recdata[2]);
                    w_cmd(0x83);
          w_dat(recdata[3]);
                    w_cmd(0x84);
          w_dat(recdata[4]);
                    w_cmd(0x85);
          w_dat(recdata[5]);
                    w_cmd(0x86);
          w_dat(recdata[6]);
                    w_cmd(0x87);
          w_dat(recdata[7]);   

        }  
}




为什么液晶屏上面显示乱码?

此帖出自51单片机论坛

最新回复

对啊,所以咯,你看到我7楼给你回复的帖子,你就应该想到去看延时,延时也是时序,只要时序没有问题。其他基本不会有大的问题的。  详情 回复 发表于 2015-6-30 17:07
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
学知识了,谢谢搂住
此帖出自51单片机论坛
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

板凳
 
别的没有多看,你的这个LCD的写指令和读指令等函数中,我感觉有些语句后面应该加个延时,这个你看下LCD1602的datasheet就知道了,举个例子:你的EN=0;然后马上就变成了EN=1.我记得时序不是这样的吧,中间还有个延时吧? 你的这种情况,应该先调显示,然后再调显示+eeprom
此帖出自51单片机论坛

点评

我的这个LCD的驱动程序以前用过 可以显示。  详情 回复 发表于 2015-6-23 21:22
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

4
 
huaiqiao 发表于 2015-6-23 21:04
别的没有多看,你的这个LCD的写指令和读指令等函数中,我感觉有些语句后面应该加个延时,这个你看下LCD1602 ...

我的这个LCD的驱动程序以前用过    可以显示。
此帖出自51单片机论坛

点评

那就是eeprom的程序问题了。  详情 回复 发表于 2015-6-23 21:33
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

5
 
本帖最后由 huaiqiao 于 2015-6-23 22:49 编辑
30419089 发表于 2015-6-23 21:22
我的这个LCD的驱动程序以前用过    可以显示。

难道你的延时没有问题吗? 如果不是,就是eeprom时序的问题了,这个时序中特别要注意点延时,还有scl和sda的时序
此帖出自51单片机论坛

点评

这个LCD的程序我以前用到过其他地方,完全可以。  详情 回复 发表于 2015-6-24 11:39
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

6
 
显示乱码肯定是显示的问题。注意延时
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

7
 
huaiqiao 发表于 2015-6-23 21:33
难道你的延时没有问题吗? 如果不是,就是eeprom时序的问题了,这个时序中特别要注意点延时,还有scl和sd ...

这个LCD的程序我以前用到过其他地方,完全可以。
此帖出自51单片机论坛

点评

那就看下sda和scl的读写时序是否正确咯  详情 回复 发表于 2015-6-24 12:32
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
过路的来看看
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢楼主
此帖出自51单片机论坛
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

10
 
30419089 发表于 2015-6-24 11:39
这个LCD的程序我以前用到过其他地方,完全可以。

那就看下sda和scl的读写时序是否正确咯
此帖出自51单片机论坛

点评

其实是延迟的问题 谢谢了 解决了  详情 回复 发表于 2015-6-30 17:04
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

11
 
huaiqiao 发表于 2015-6-24 12:32
那就看下sda和scl的读写时序是否正确咯

其实是延迟的问题   谢谢了   解决了
此帖出自51单片机论坛

点评

对啊,所以咯,你看到我7楼给你回复的帖子,你就应该想到去看延时,延时也是时序,只要时序没有问题。其他基本不会有大的问题的。  详情 回复 发表于 2015-6-30 17:07
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

12
 
30419089 发表于 2015-6-30 17:04
其实是延迟的问题   谢谢了   解决了

对啊,所以咯,你看到我7楼给你回复的帖子,你就应该想到去看延时,延时也是时序,只要时序没有问题。其他基本不会有大的问题的。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表