标题: Proteus仿真LCD1602只亮屏不显示字符? [打印本页]

作者: dwqwwq    时间: 2023-12-11 14:42
标题: Proteus仿真LCD1602只亮屏不显示字符?


单片机代码及截图如下

#include "reg52.h"
#include"intrins.h"

#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
void lcd_initial(void);
void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void string(uchar ad,uchar*s);
void delay(uint);

void main(void)
{        lcd_initial();
        while(1)
        {        string(0x80,"Welcome");
                string(0xC0,"Chengdu CHINA");
               
                delay(1000);
                write_command(0x01);
                delay(1000);
        }
}

void delay(uint j)
{        uchar i=250;
        for( ;j>0;j--)
        {        while(--i);
                i=249;
                while(--i);
                i=250;
        }
}

void check_busy(void)
{        uchar dt;
        do
        {        dt=0xff;
        E=0;
        RS=0;
        RW=1;
        E=1;
        dt=out;
        }while(dt&0x80);
        E=0;
}

void write_command(uchar com)
{        check_busy();
        E=0;
        RS=0;
        RW=0;
        out=com;
        E=1;
        _nop_( );
        E=0;
        delay(1);
}

void write_data(uchar dat)
{        check_busy();
        E=0;
        RS=1;
        RW=0;
        out=dat;
        E=1;
        _nop_();
        E=0;
        delay(1);
}


void lcd_initial(void)
{        write_command(0x38);
        
        write_command(0x0F);
        
        write_command(0x06);
        
        write_command(0x01);
        delay(1);
}

void string(uchar ad,uchar *s)
{        write_command(ad);
        while(*s>0)
        {        write_data(*s++);
                delay(100);
        }
}


作者: clyf    时间: 2023-12-11 19:41
该程序的功能是在液晶屏上显示"Welcome"和"Chengdu CHINA"两行内容,每隔一段时间清除屏幕内容并重新显示。代码是没问题的,检查一下硬件吧
作者: 562652580    时间: 2023-12-11 20:21
应该是硬件有些问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1