微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DS12C887+STC89C52RC+LCD1602出现问题,求助!

DS12C887+STC89C52RC+LCD1602出现问题,求助!

时间:10-02 整理:3721RD 点击:
数码管显示没有问题,但是换了lcd1602就只能显示四条白杠
求助,把程序贴在下面:
#include<reg52.h>                                      
#include<intrins.h>                                                  
typedef unsigned char uchar;
//ds12c887引脚
sbit AS=P0^1;
sbit wr=P0^2;
sbit DS=P0^3;
sbit CS=P0^0;
//lcd1602引脚
sbit lcd_enable=P2^5;
sbit STATE7=P0^7;
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
//时间变量
uchar sec,min,hour,s1,s2,m1,m2,h1,h2;        
//延时函数
void delay(uchar t)
{
        uchar a,b,c;
        for(a=t;a>0;a--)
                for(b=50;b>0;b--)
                        for(c=25;c>0;c--)
                                {;}
}
//lcd1602相关函数
void busy_check(void)
{
        P0=0xff;
        do{
                RS=0;
                RW=1;
                EN=0;
                EN=1;
        }
        while(STATE7==1);
        lcd_enable=0;
}
void write_cmd(uchar cmd)
{
        busy_check();
        RS=0;
        RW=0;
        P0=cmd;
        _nop_();
        EN=1;
        _nop_();
        EN=0;
}
void write_data(uchar Data)
{
        busy_check();
        RS=1;
        RW=0;
        P0=Data;
        _nop_();
        EN=1;
        _nop_();
        EN=0;
}
void lcd1602_init()
{
        P0=0xff;
        EN=0;
        write_cmd(0x38);
        write_cmd(0x0f);
        write_cmd(0x06);
        write_cmd(0x01);
}
void write_byte(uchar d,uchar a)
{
        CS=0;
        AS=1;
        DS=1;
        wr=1;
        P3=a;
        AS=0;
        wr=0;
        P3=d;
        wr=1;
        AS=1;
        CS=1;
}
uchar read_byte(uchar a)
{
        uchar d;
        AS=1;
        DS=1;
        wr=1;
        CS=0;
        P3=a;
        AS=0;
        DS=0;
        P3=0xff;
        d=P3;
        DS=1;
        AS=1;
        CS=1;
    return d;
}
void set_time()
{
        write_byte(0x00,0x00);
        write_byte(0x18,0x02);
        write_byte(0x0e,0x04);
}
void RTC_init()
{
        //uchar i=read_byte(0x0a)|0x7f;           
        //if(i==0xff)
        {
                write_byte(0x20,0x0a);
                write_byte(0x06,0x0b);
                set_time();
        }
}
void get_time()
{
        sec=read_byte(0x00);
        s1=sec/10;
        s2=sec%10;
        min=read_byte(0x02);
        m1=min/10;
        m2=min%10;
        hour=read_byte(0x04);
        h1=hour/10;
        h2=hour%10;
}
void main()
{
        //RTC_init();           //initialization then not use it
        lcd1602_init();
        dlock=0;
        wlock=0;
        while(1)
        {
                get_time();
                write_cmd(0x80);
                write_data(h1);
                delay(255);
                write_data(h2);
                delay(1);
                write_data(':');
                delay(1);
                write_data(m1);
                delay(1);
                write_data(m2);
                delay(1);
                write_data(':');
                delay(1);
                write_data(s1);
                delay(1);
                write_data(s2);
                delay(1);
        }
}

1602光度太高了吗。

调节电位器 好像与亮度无关

莫非与液晶的响应速度有关?

调节电位器不就是调光度嘛

恩,与光度无关

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top