找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1189|回复: 3
收起左侧

哪位大佬能帮我看看单片机程序 ,不知道为啥LCD没反应

[复制链接]
ID:490574 发表于 2019-5-13 14:34 | 显示全部楼层 |阅读模式
电路原理图如下:
QQ图片20190513143233.png
#include<reg52.h>
#include<intrins.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
sbit rs=P2^2;            
sbit rw=P2^1;              
sbit e =P2^0;
sbit SCL=P1^3;
sbit SDA =P1^4;
uint  weight;
bit ACKFlag;
void delayms(uint z)
{
        uchar i,j;
        for(i=z;i>0;i--)
                for(j=114;j>0;j--);
}
void write_com(uchar com)
{
        rs=0;
        P2=com;
        delayms(1);
        e=1;
        delayms(1);
        e=0;
}
void write_data(uchar date)
{
        rs=1;
        P2=date;
        delayms(1);
        e=1;
        delayms(1);
        e=0;        
}
void write_string(uchar line,uchar add,uchar *p)
{
        if(line==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        while(1)                                                                                                                 
        {
                if(*p == '\0')  break;
                write_data(*p);
                p++;
        }        
}
void init_1602()         
{
        rw=0;
        write_com(0x38);        
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        delayms(1);
}
void delay5us()
{
_nop_();
}
void I2cStart()
{
SDA=1;
SCL=1;
delay5us();
SDA=0;
delay5us();
}
void I2cStop()
{  
   SDA=0;
   delay5us();
   SCL=1;
   delay5us();
   SDA=1;
   delay5us();
}
bit ReadACK()
{
SCL=0;
SCL=0;
delay5us();
if(SDA)
{
  SCL=0;
  return(1);
}
else
{
SCL=0;
return(0);
}
}
void SendACK(bit i)
{
   SCL=0;
   if(i)
   SDA=1;
   else
   SDA=0;
   SCL=1;
   delay5us();
           SCL=0;
        SDA=1; //释放总线  fasong yingda
}
void I2cSendByte(uchar DAT)
{
    uchar i;
        for(i=0;i<8;i++)
        {
        SCL=0;
        if(DAT& 0x80 )
        SDA=1;
        else
        SDA=0;
        SCL=1;
        DAT<<=1;
        }
        SCL=0;
        SDA=1;
}
uchar I2cReadByte( )
{
        uchar i, DAT;
        for(i=0;i<8;i++)
        { DAT<<=1;
         SCL=0;
         SCL=1;
         if(SDA)
         DAT|=0x10;
         }
        return(DAT);
}
void mcp3421write(ADDR,DAT)
{
I2cStart();
I2cSendByte(0xD0+0);
if(ReadACK())
ACKFlag=1;
else
ACKFlag=0;
I2cSendByte(ADDR);
  if(ReadACK())
ACKFlag=1;
else
ACKFlag=0;
I2cStop();
}
uchar mcp3421Read(void)
{
uchar v;
uchar step,temp=0;
I2cStart();
I2cSendByte(0xD0+1);
if(ReadACK())
ACKFlag=1;
else
ACKFlag=0;
for(step=0;step<3;step++)
{
  temp=I2cSendByte;
  if(step<2)
  {        
  if(ReadACK())
  ACKFlag=1;
  else
  ACKFlag=0;
}
v=(v<<8)|temp;
v&=0x03ffff;

}
if(ReadACK())
ACKFlag=1;
else
ACKFlag=0;
I2cStop();
return v;
}
uchar Get_ADC(void)
{
uchar v1=0;
mcp3421write(0x8c);
v1=mcp3421Read( )+1;
return v1;
}

void display()
{
uint y;
y=Get_ADC;
weight=((float)(y/(4.3/8.8*128*(2^24)/4.3/100)+50)*10)-5005;
                write_com(0x80+0x40);
                write_data(weight/10000+0x30);
                write_data((weight%10000)/1000+0x30);
                write_data(((weight%10000)%1000)/100+0x30);
                write_data((((weight%10000)%1000)%100)/10+0x30);
                write_com(0x80+0x40);
}

void main()
{

init_1602( );
delayms(10);
write_string(1,0,"welcome to use!");
write_string(2,0,"000.00kg");
while(1)
{
         display();
         
  }


}

回复

使用道具 举报

ID:149451 发表于 2019-5-23 23:44 | 显示全部楼层
程序没问题,有显示。仔细检查下你的仿真图。
回复

使用道具 举报

ID:283883 发表于 2019-5-25 20:21 | 显示全部楼层
没问题啊
回复

使用道具 举报

ID:155507 发表于 2019-5-26 14:23 | 显示全部楼层
仔细检查下你的仿真图。

线路图有问题,你的LCD D0接到 P0.7,D7接到 P0.0,全接反了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表