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);
} the code is so poorly written that it would have been a miracle if you had gotten anything out of it. 用S-T-C出现什么问题都不算重大 和stc无关吧 问题可真够多的啊:
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写完数据后是否准备好,自然不会有正常结果了。 回复【4楼】XA144F
-----------------------------------------------------------------------
好像这个在51是释放IO吧
另外LZ你读IO的时候设为输入,写的时候设强上拉看看 谢谢大家,我加了P1M1 = 0x00;
P1M0 = 0xff;
P2M1 = 0x00;
P2M0 = 0xff;
P3M1 = 0x00;
P3M0 = 0xff;
结果依然没有变化,亮一下就暗了。 就用普通端口模式,再P1=0xFF试试。 51单片机,在读取端口状态之前,先要向端口写1,这是在学校里就强调的吧? 谢谢各位前辈,我已经不用wait了,现在直接用延时,请看程序,但依然没有变化,亮一行黑块就消失了,我用的是jhd 162a STC12C5204AD我用过,没有发现和普通的51有多大的差别,端口配置无需设置,采用复位后默认,是准双向IO的,和普通的51的IO是一样的,觉得还是你程序的问题,我用它驱动过1602和NOKIA5110 延时的话,考虑过时钟周期的问题么?
stc是做了优化的,不同指令时钟周期也不同。 我看了数据手册,除了上升沿有最大值外?其他都是只有最小值的,所以我延时了足够长的时间,我用的是12m晶振。 驱动5110时,我仍然是采用传统12个时钟周期的程序没有任何改动,竟然在这1T的家伙上运行也没发现什么不妥
页:
[1]