打印

一直卡在读不出LCD中的数据

[复制链接]
2667|59
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyjie|  楼主 | 2018-9-6 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
liliang9554| | 2018-9-7 12:23 | 只看该作者

程序

使用特权

评论回复
板凳
wyjie|  楼主 | 2018-9-7 12:25 | 只看该作者

uchar read_lcd()
{


      uchar i,data;
      data =0;
      LCD_SCLK0;             //en=1;
      LCD_SID1;              //wr=1
      for(i=0;i<5;i++)       //数据时序
      {
          LCD_SCLK1;
          delay_us(50);
          LCD_SCLK0;
          delay_us(50);
      }

      LCD_SID1;             //wr=1
      LCD_SCLK1;            //en=1
      delay_us(50);
      LCD_SCLK0;            //en=0
      delay_us(50);

      LCD_SID1;   
      LCD_SCLK1;
      delay_us(50);
      LCD_SCLK0;
      delay_us(50);

      LCD_SID0;
      LCD_SCLK1;
      delay_us(50);
      LCD_SCLK0;
      delay_us(50);
   P2DIR &= 0xef;  
    for(i=0;i<4;i++)
    {
        data<<=1;
        LCD_SCLK1;
        if(LCD_SID_READ) data++;
        LCD_SCLK0;
    }
    //再接受4个连续'0'
    for(i=0;i<4;i++)
    {
        delay_us(1);
        LCD_SCLK1;
        delay_us(1);
        LCD_SCLK0;
    }
    //接受低4位
    for(i=0;i<4;i++)
    {
        data<<=1;
        LCD_SCLK1;
        if(LCD_SID_READ) data++;
        LCD_SCLK0;   
    }
    //再接受4个连续'0'
    for(i=0;i<4;i++)
    {   
        delay_us(1);
        LCD_SCLK1;
        delay_us(1);
        LCD_SCLK0;   
    }
    P2DIR |= BIT4;
    return data;
}

使用特权

评论回复
地板
huangchui| | 2018-9-7 12:28 | 只看该作者


这个比较简单的,网上有人发过这样的例程,你读不出7920的数据,很有可能是时序不对

使用特权

评论回复
5
zhanghqi| | 2018-9-7 12:32 | 只看该作者
,楼主要仔细看一下7920的时序,把软件延时改改吧

使用特权

评论回复
6
jlyuan| | 2018-9-7 12:34 | 只看该作者
时序可能有问题,读写位的方向很重要。

使用特权

评论回复
7
zhanghqi| | 2018-9-7 12:39 | 只看该作者

反正数据不大,直接清屏就行了

使用特权

评论回复
8
jlyuan| | 2018-9-7 12:42 | 只看该作者
串行连接的12864一般不能读的,你查查数据手册看一下

使用特权

评论回复
9
dengdc| | 2018-9-7 12:45 | 只看该作者

读写操作是怎么实现的?

使用特权

评论回复
10
shimx| | 2018-9-7 12:50 | 只看该作者
有G2和12864串行显示的程序吗?求助啊

使用特权

评论回复
11
shimx| | 2018-9-7 12:53 | 只看该作者

可能是时序的问题

使用特权

评论回复
12
heweibig| | 2018-9-7 12:56 | 只看该作者
直接绘制整个屏幕。

使用特权

评论回复
13
jlyuan| | 2018-9-7 13:00 | 只看该作者
好像只有并口才能读取这个数据。

使用特权

评论回复
14
zhenykun| | 2018-9-7 13:03 | 只看该作者
你试试并口可以吗

使用特权

评论回复
15
jiahy| | 2018-9-7 13:06 | 只看该作者
串口读取的太慢了。

使用特权

评论回复
16
wyjie|  楼主 | 2018-9-7 13:10 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
17
huangchui| | 2018-9-7 13:12 | 只看该作者
IIC的模拟哪里有错

使用特权

评论回复
18
huangchui| | 2018-9-7 13:15 | 只看该作者

#include<msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
#define SDA_1  P3OUT|=BIT1 // P3.1为SDA
#define SDA_0  P3OUT&=~BIT1
#define SCL_1 P3OUT |= BIT0 //P3.0为SCL
#define SCL_0 P3OUT &= ~BIT0
#define DIR_IN P3DIR &= ~BIT1
#define DIR_OUT P3DIR |= BIT1
#define SDA_IN ((P3IN >> 1) & 0x01)
#define dis_data  P5OUT  //数码管输出
#define TIME 5
#define SlaveAddress   0xA6


uchar seg_bcd[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管


void delay_nms(unsigned int k)//延时k毫秒
{
   unsigned int i,j;
   for(i=0;i<k;i++)
     {
       for(j=0;j<121;j++)
         {;}
     }
}
void Delay(unsigned int n)    //延时
{
    unsigned int i;
    for(i = 0;i < n;i++)
     {
       ;
     }
}


void BH1750_Start()         //起始信号
{
     DIR_OUT;
     SDA_1;                  
    delay_nms(5);
     SCL_1;                    
     Delay(TIME);               
     SDA_0;                    
     Delay(TIME);              
     SCL_0;                    
}


void BH1750_Stop()        //结束信号
{
     DIR_OUT;
     SDA_0;                    
     Delay(TIME);
     SCL_1;                    
     Delay(TIME);              
     SDA_1;                    }


void BH1750_SendACK()       //发送Ack
{
     SCL_0;
     DIR_OUT;
     SDA_0;
     Delay(TIME);
     SCL_1;
     Delay(TIME);
     SCL_0;
}


void BH1750_RecvACK()         //接受ACK
{   SCL_1;                  
    Delay(TIME);
     DIR_IN;
     while(SDA_IN);
     DIR_OUT;
     SCL_0;
     Delay(TIME);
}


void BH1750_SendByte(uchar dat)     //发送一个字节
{   DIR_OUT;
     unsigned int i;
     for(i = 0;i < 8;i++)
     {
     SCL_0;
     Delay(TIME);
     if((dat >> 7) & 0x01) SDA_1;
     else SDA_0;
    Delay(TIME);
     SCL_1;
     Delay(TIME);
     dat <<= 1; //数据左移一位,进入下一轮送数
     }
     Delay(TIME);
}


uchar BH1750_RecvByte()         //接受一个字节
{
     uchar i;
     uchar dat = 0;
     uchar datbit=0;
     SCL_0;
     Delay(TIME);
     SDA_1;                    
     DIR_IN;
     for (i=0; i<8; i++)         
     {
         SCL_1;               
        Delay(TIME);            
        datbit = SDA_IN;           
         Delay(TIME);
         dat = ((dat << 1) | datbit);
         SCL_0;               
        Delay(TIME);            
    }
     return dat;
}




void Single_Write_BH1750(uchar REG_Address)  //写入
{
     BH1750_Start();                  
     BH1750_SendByte(SlaveAddress);   
     BH1750_SendByte(REG_Address);   
   // BH1750_SendByte(REG_data);      
     BH1750_Stop();                  
}


void main()
{ uchar tmp;
   float temp;
   int t;
   WDTCTL = WDTPW + WDTHOLD;
   P5DIR |= 0Xff;
   P4DIR |= 0x01;
   P5OUT |= 0x00;
   delay_nms(200);
   Single_Write_BH1750(0x01);
   Single_Write_BH1750(0x10);
  while(1)
    { Single_Write_BH1750(0x01);
      Single_Write_BH1750(0x10);
      delay_nms(180);
      tmp=BH1750_RecvByte();
      temp=(float)tmp;
      t=temp/100;
      dis_data=seg_bcd[t];
    }
}

使用特权

评论回复
19
wuhany| | 2018-9-7 13:20 | 只看该作者
BH1750FVI这个东西真的不了解。看看有没有了解的人。

个人一点看法:不要简单的贴代码。很少有人会有耐心看既不知道原理图又不知道具体应用的代码,对大家来说是个挑战。

使用特权

评论回复
20
jiaxw| | 2018-9-7 13:23 | 只看该作者
硬件连接有没有问题?检查下BH1750FVI外围电路正常否。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

927

主题

12706

帖子

5

粉丝