wb156351 发表于 2011-2-23 01:03:01

stc5204驱动液晶重大问题!

大家好,我用stc5204 显示jhd 162a,弄了两天,还是什么都不显示,本来显示一行黑块的,后来我用了标准初始化指令(4个0x38)可以清屏了,但是字符却显示不出来,求教!我已经弄了一星期了!
小弟为了这个程序已经查了很多资料,改了很多次,都没有成功,听说高手都在这儿,所以跪求大哥们告诉我为什么我的程序什么都没有?谢谢!

/*
* 1602
*/

#include <5204.h>

typedef unsigned char uint8;
typedef unsigned int uint16;
sbit RS = P2^6;
sbit RW = P2^7;
sbit EN = P3^7;
sbit BUSY = P1^7;

void delay(uint16 i)
{
while(i-->0);
}
/**
* 等待繁忙标志
*/
void wait(void)
{
RS = 0;
RW = 1;

P1 = 0;


EN = 1;
delay(10);
while (BUSY == 1);
EN = 0;
}



/**
* 写数据
*/
void en_toggle(void)
{
EN = 1;
delay(10);
EN = 0;
delay(10);


}
void w_dat(uint8 dat)
{
       EN = 0;
                RS = 1;
        RW = 0;
        P1 =dat;
        delay(100000);
EN = 1;                           delay(2000);
EN = 0;                           delay(20);
//wait();
        delay(10000)       ;
}

/**
* 写命令
*/
void w_cmd(uint8 cmd)
{           EN = 0;
                RS = 0;
        RW = 0;
        P1 = cmd;
        delay(10000)        ;
EN = 1;       delay(2000);
           EN = 0;           delay(20);
//wait();

        delay(10000)          ;
}/**
* 初始化1602
*/
void Init_LCD1602(void)
{
/*
w_cmd(0x38);// 16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C);// 显示器开、光标开、光标允许闪烁
w_cmd(0x06);// 文字不动,光标自动右移
w_cmd(0x01);
delay(1000) ;// 清屏
*/
delay(1500);
w_cmd(0x38);
delay(80000);
w_cmd(0x38);
delay(80000);
w_cmd(0x38);
delay(80000);
w_cmd(0x01);
delay(80000);
w_cmd(0x38);
delay(80000);
w_cmd(0x0C);   
delay(80000);
w_cmd(0x06);   
delay(80000);
}


main()
{

Init_LCD1602();
delay(20000);

w_cmd(0x80);
w_dat(2 + '0');
delay(20000);

while (1);
}

millwood0 发表于 2011-2-23 01:42:16

the code is so poorly written that it would have been a miracle if you had gotten anything out of it.

dengxiaofeng 发表于 2011-2-23 08:43:11

用S-T-C出现什么问题都不算重大

zhanglu1990 发表于 2011-2-23 08:54:22

和stc无关吧

XA144F 发表于 2011-2-23 09:20:15

问题可真够多的啊:

void wait(void)
{
RS = 0;
RW = 1;

P1 = 0;


EN = 1;
delay(10);
while (BUSY == 1);
EN = 0;
}

这里:P1=0了还怎么能从端口上读取外部输入端口的内容?
等到BUSY为0的时候表示可以继续,所以 while (BUSY == 1); 是不会等待的,因为BUSY一直为0。所以程序会一直往下执行不顾LCD写完数据后是否准备好,自然不会有正常结果了。

eaglelpx 发表于 2011-2-23 09:38:48

回复【4楼】XA144F
-----------------------------------------------------------------------

好像这个在51是释放IO吧
另外LZ你读IO的时候设为输入,写的时候设强上拉看看

wb156351 发表于 2011-2-23 11:09:34

谢谢大家,我加了P1M1 = 0x00;
        P1M0 = 0xff;
       P2M1 = 0x00;
       P2M0 = 0xff;
       P3M1 = 0x00;
       P3M0 = 0xff;
结果依然没有变化,亮一下就暗了。

XA144F 发表于 2011-2-23 11:11:32

就用普通端口模式,再P1=0xFF试试。

XA144F 发表于 2011-2-23 11:12:24

51单片机,在读取端口状态之前,先要向端口写1,这是在学校里就强调的吧?

wb156351 发表于 2011-2-23 16:32:59

谢谢各位前辈,我已经不用wait了,现在直接用延时,请看程序,但依然没有变化,亮一行黑块就消失了,我用的是jhd 162a

marshallemon 发表于 2011-2-23 16:44:53

STC12C5204AD我用过,没有发现和普通的51有多大的差别,端口配置无需设置,采用复位后默认,是准双向IO的,和普通的51的IO是一样的,觉得还是你程序的问题,我用它驱动过1602和NOKIA5110

axeon 发表于 2011-2-23 16:45:46

延时的话,考虑过时钟周期的问题么?
stc是做了优化的,不同指令时钟周期也不同。

wb156351 发表于 2011-2-24 00:13:31

我看了数据手册,除了上升沿有最大值外?其他都是只有最小值的,所以我延时了足够长的时间,我用的是12m晶振。

marshallemon 发表于 2011-2-26 12:52:00

驱动5110时,我仍然是采用传统12个时钟周期的程序没有任何改动,竟然在这1T的家伙上运行也没发现什么不妥
页: [1]
查看完整版本: stc5204驱动液晶重大问题!