打印

STM32控制ST7920点阵LCD,只能显示2个字符

[复制链接]
3626|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yw912|  楼主 | 2011-10-24 09:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32控制ST7920点阵LCD,只能显示2个字符或一个汉字,后面即使重新设置地址,也不能显示。请问是怎么回事?
void LcdInit(void){

u8 y;
//FREEDOG;
SET_LCDRST;
delay(20);
CLR_LCDRST;
delay(20);
SET_LCDRST;
delay(20);
delay(20);
SendCmd(0x30);
delay(20);
SendCmd(0x01);
delay(20);
SendCmd(0x06);
delay(20);
SendCmd(0x0c);//0c
delay(20);

delay(3000);
SendCmd(0x80);
delay(20);
SendDat(0x50);
delay(20);
SendCmd(0x81);
delay(20);
SendDat(0xb0);
delay(20);
SendDat(0xa1);
delay(20);

}
写命令和写数据函数应该没问题,因为可以显示2个字符,硬件方面EN,RW,RS,RST,D0-D7都通过10K上拉电阻接5V,STM32这些IO口都设置为开漏输出。
u8 ChkBusy(void)
{
u8 i;
u16 j;

i=1;j=0;
GPIO_Write(GPIOE,0x00ff);
CLR_RS;
SET_RW;
SET_EN;
GPIOE->CRL&=~0xf0000000;//PE7 置为输入口
GPIOE->CRL|=0x40000000;
delayus();
i=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0);
while(i)
{if(++j>65500) break;}
GPIOE->CRL&=~0xf0000000;//PE7 置为输出口OD 2M
GPIOE->CRL|=0x60000000;
delayus();
CLR_EN;

if(j>=65500) return 0;
else return 1;

}

void SendCmd(uint8_t dat)
{
if(ChkBusy())
{
CLR_RS;
CLR_RW;
GPIO_Write(GPIOE,dat);
SET_EN;
delayus();
CLR_EN;
}
}

void  SendDat(uint8_t dat)
{
if(ChkBusy())
{
SET_RS;
CLR_RW;
GPIO_Write(GPIOE,dat);
SET_EN;
delayus();
CLR_EN;
}

}
沙发
kangxuebin| | 2011-10-24 10:46 | 只看该作者
写个显示字符串的函数就可以了。

使用特权

评论回复
板凳
yw912|  楼主 | 2011-10-24 11:00 | 只看该作者
有字符串显示函数,void DispData(uint8_t adr,uint8_t *s,uint8_t len){
        uint8_t i;
       
        //FREEDOG;
        if(adr==1)i=0x80;
        else if(adr==2)i=0x90;
        else if(adr==3)i=0x88;
        else if(adr==4)i=0x98;

       
        SendCmd(i);
        delay(40);
        for(i=0;i<len;i++)
                {
                SendDat(s[i]);
                delay(20);
               
                }
        }
用这个函数也不行

使用特权

评论回复
地板
yzzly| | 2011-10-28 10:46 | 只看该作者
时序不匹配

使用特权

评论回复
5
shaojunyun| | 2011-10-28 11:29 | 只看该作者
时序

使用特权

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

本版积分规则

6

主题

21

帖子

1

粉丝