打印

stc单片机1602液晶显示的奇怪问题

[复制链接]
10031|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bogekanpu|  楼主 | 2010-12-28 13:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位大侠,我编了个1602液晶显示的程序,用ATMEL89S52工作正常,换成STC12C5A08S2就无法工作。很奇怪,求解。有图有真相,谢谢!!
程序附上:
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
#define dat_delay 200
#define dat_port  P0  //1602液晶数据接口,由跳线跳接
#define com_port  P2  //1602液晶控制接口,由跳线跳接
sbit led=P1^3;
sbit rs=com_port^6;   
sbit rw=com_port^5;
sbit lcden=com_port^4;
uchar table1[]="SIMPLE SN51A_1.1";
uchar table2[]="GOOD LUCK TO YOU";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
  for(b=10;b>0;b--);
}
void delay1(uint x)
{
uint a,b;
for(a=x;a>0;a--)
  for(b=600;b>0;b--);
}
void write_com(uchar com) ////1602液晶控制函数
{
rs=0;
rw=0;
// lcden=0;
dat_port=com;
delay(dat_delay );
lcden=1;
delay(dat_delay );
lcden=0;

}
void write_date(uchar dat) ////1602液晶写数据函数
{
rs=1;
rw=0;
dat_port=dat;
// lcden=0;
delay(dat_delay );
lcden=1;
delay(dat_delay );
lcden=0;

}
void init1602()   //1602液晶初始化函数
{
write_com(0x38); //液晶显示方式设置
delay(dat_delay );
// write_com(0x0f); //光标开 闪烁
write_com(0x0c); //光标不开 不闪烁
delay(dat_delay );
write_com(0x06); //数据指针顺序设置
delay(dat_delay );
write_com(0x01); //液晶屏幕清屏命令
delay(dat_delay );
}

void main()
{
uchar a=0;
init1602();  //初始化1602液晶
//1602液晶显示器地址:第一行从0X80开始--0X81-0X82---...0X8F
//     :第二行从0XC0开始--0XC1-0XC2---...0XCF
led=0;
write_com(0x80);//从第一行第一个字符显示"IMPLE SN51A_1.1"
delay(dat_delay );//#define dat_delay 200
for(a=0;a<16;a++)
{
write_date(table1[a]);
delay(dat_delay );  
}
write_com(0xc0);//从第二行第一个字符显示"GOOD LUCK TO YOU"
delay(dat_delay );
for(a=0;a<16;a++)
{
write_date(table2[a]);
delay(dat_delay );  
}
delay1(300);

for(a=0;a<40;a++)  //循环移位//左移16之后再移3个空位从右边出来
{
  write_com(0x18); //左移位指令
  delay1(20);
}
while(1);

}

原理图.JPG (102.64 KB )

原理图

原理图

20101228.jpg (103.94 KB )

STC单片机使用的情况

STC单片机使用的情况

相关帖子

沙发
bogekanpu|  楼主 | 2010-12-28 14:01 | 只看该作者
有的说延时不够,stc的单片机比at单片机运行得快,可是我把 dat_delay 调成20000都没有效果

使用特权

评论回复
板凳
komad| | 2010-12-28 15:30 | 只看该作者
都是51内核,晶振一样,延时不会变的,那个STC的IO口是不是带第二功能的?

使用特权

评论回复
地板
bogekanpu|  楼主 | 2010-12-28 15:32 | 只看该作者
1602的控制是用P2口,数据P0口,说明书上均无第二功能,如图

未命名.JPG (49.35 KB )

未命名.JPG

使用特权

评论回复
5
bogekanpu|  楼主 | 2010-12-28 17:28 | 只看该作者
很困扰啊,我搞了两天了,同样的板子同样的程序,换上AT的单片机就好了,stc的就不行

使用特权

评论回复
6
bogekanpu|  楼主 | 2010-12-28 17:29 | 只看该作者
这个单片机是stc的所谓1T单片机,对时序有影响吗?

使用特权

评论回复
7
xwj| | 2010-12-28 18:25 | 只看该作者
这么大的延时,肯定够了。
IO口都加上上拉电阻试试

使用特权

评论回复
8
ycz9999| | 2010-12-28 19:43 | 只看该作者
还是仔细对照下那两块MCU的手册吧,看你遗漏了什么没?
还有,1602的初始化还是按手册说的那样去初始化比较好点:
void init(void)
{
        delay_50us(300);                //        延时15ms
        write_command(0x38);                //        8为并行 显示2行 5*7点阵显示
        delay_50us(100);                //        延时5ms
        write_command(0x38);
        delay_50us(100);                //        延时5ms
        write_command(0x38);

        check_busy();
        write_command(0x38);
        check_busy();
        write_command(0x08);                //关闭显示
        check_busy();
        write_command(0x01);                //        清屏指令       
        check_busy();
        write_command(0x06);                //        AC+1模式 显示不移动
        check_busy();
        write_command(0x0c);                //        显示功能开 无光标 光标不闪烁
}


我前几天也焊了块1602,不带背光的,当时由于与带背光的引脚搞混了,把接地与电源接反了,也不正常显示,还是仔细检查下为好。

使用特权

评论回复
9
Anqi90| | 2010-12-28 21:31 | 只看该作者
延时太长好像也不行的,我之前做的时候从AT换STC的话对外部操作的时候都是加1us的延时,或者五六个nop吧

使用特权

评论回复
10
zjp816923| | 2010-12-28 22:17 | 只看该作者
我知道是为什么,我以前也出现过这种情况。不是延时问题。
你仔细看一下1602说明书,有个引脚要接可调电阻的,你的程序没错的,调节那个电阻到合适就可以显示了。
不加那个电阻的话,就会出现“鬼影”就是上面你发的图片那样子。

使用特权

评论回复
11
冯冯冯冯| | 2010-12-29 08:34 | 只看该作者
LS说的是第3脚VL,液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,一般都是通过一个10K的电位器调整对比度。

使用特权

评论回复
12
chenczy| | 2010-12-29 09:11 | 只看该作者
P0口的上拉呢?

使用特权

评论回复
13
zhaoyu2005| | 2010-12-29 09:24 | 只看该作者
这个好像是没初始化好

使用特权

评论回复
14
bogekanpu|  楼主 | 2010-12-29 10:15 | 只看该作者
10# zjp816923
你说的我试了,加了10K可调电阻,调节的只是黑方块格子颜色的深浅,同样还是不正常的状态,不过还是谢谢,我现在试试8楼说的

使用特权

评论回复
15
bogekanpu|  楼主 | 2010-12-29 10:28 | 只看该作者
延时我加了几个空指令,好像还是老样子,再试试上拉

使用特权

评论回复
16
bogekanpu|  楼主 | 2010-12-29 10:40 | 只看该作者
我测了at单片机和STC单片机时各管脚电平,不同的是at正常工作时RS为低,而stc的为高,问题可能出在两点吧,1上拉,2初始化,各位高手有建议吗?一起来帮忙吧

使用特权

评论回复
17
chenczy| | 2010-12-29 11:08 | 只看该作者
先给P0口上拉吧,没上拉P0口怎么输出高?

使用特权

评论回复
18
bogekanpu|  楼主 | 2010-12-29 12:12 | 只看该作者
p加了上拉无效啊,郁闷!!!!!!!!

使用特权

评论回复
19
apan| | 2010-12-29 12:36 | 只看该作者
怀疑晶振没有起振,和晶振一起的两个电容是多少?

使用特权

评论回复
20
bogekanpu|  楼主 | 2010-12-29 12:41 | 只看该作者
30PF,应该起振了,指示灯工作正常

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

66

帖子

0

粉丝