关于1602显示电路的仿真问题

2019-07-18 10:37发布

我有一个这样的程序在PROTUSE中仿真是成功的  可是在实际电路中却无法实现  我的实际电路用的单片机是STC90C52的  我想可能会是单片机型号的问题  可是不知道怎么解决···有知道的朋友给解答下啊?   拜谢了!!! .
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}

sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;

sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;

uchar Display_Buffer[]="0.00V";

uchar code Line1[]="weswesw Voltage:";

void delay_ms(unsigned char i)
{
unsigned char a, b;
for (a = 1; a < i; a++)
{
   for (b = 1; b; b++)
   {   ;   }
    }
}
bit LCD_Busy_Check()
{
bit result;
RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0;
return result;
}

void LCD_write_com(uchar cmd)
{
while(LCD_Busy_Check());
RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;delay4us();
E=1;delay4us();E=0;
}

void Set_Disp_Pos(uchar pos)
{
LCD_write_com(pos|0x80);
}

void LCD_Write_Data(uchar dat)
{
while(LCD_Busy_Check());
RS=1;RW=0;E=0;
P0=dat;delay4us();
E=1;delay4us();E=0;
}

void LCD_Initialise()
{
LCD_write_com(0x38);    /*ÏÔʾģʽÉèÖÃ*/
   delay_ms(5);
   LCD_write_com(0x38);
   delay_ms(5);
   LCD_write_com(0x38);
   delay_ms(5);
   LCD_write_com(0x38);  
   LCD_write_com(0x08);    /*ÏÔʾ¹Ø±Õ*/
   LCD_write_com(0x01);    /*ÏÔʾÇåÆÁ*/
   LCD_write_com(0x06);    /*ÏÔʾ¹â±êÒƶ¯ÉèÖÃ*/
   delay_ms(5);
   LCD_write_com(0x0C);
}

uchar Get_AD_Result()
{
uchar i,dat1=0,dat2=0;

CS=0;
CLK=0;
DIO=1;        _nop_();_nop_();
CLK=1;  _nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
CLK=1;      _nop_();_nop_();
CLK=0;DIO=0;_nop_();_nop_();
CLK=1;DIO=1;_nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
for(i=0;i<8;i++)
{
CLK=1;  _nop_();_nop_();
CLK=0;  _nop_();_nop_();
dat1=dat1<<1|DIO;
}
for(i=0;i<8;i++)
{
dat2=dat2|((uchar)(DIO)<<i);
CLK=1;  _nop_();_nop_();
CLK=0;  _nop_();_nop_();
}
CS=1;
return(dat1==dat2)? dat1:0;
}
void main()
{
uchar i;
uint d;
LCD_Initialise();
delay_ms(100);
while(1)
{
d=Get_AD_Result()*500.0/255 ;
Display_Buffer[0]=d/100+'0';
Display_Buffer[2]=d/10%10+'0';
Display_Buffer[3]=d%10+'0';
Set_Disp_Pos(0x01);
i=0;
while(Line1[i]!='')
LCD_Write_Data(Line1[i++]);
Set_Disp_Pos(0x46);
i=0;
while(Display_Buffer[i]!='')
LCD_Write_Data(Display_Buffer[i++]);
}
}


仿真电路 仿真电路
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。