求大家的帮助,12864

2019-07-15 20:39发布

公司有很多SYB12864的液晶屏,就想拿来做个东西,本来是想用STM32的,后来一直不显示,就想先拿51试试。也上网查了好些资料。用proteus仿真,可以显示,在开发板上却无论如何显示不了。调延时,查接线,都没有问题。想是不是屏是坏的,拿到车间测试了下,也是好的。不知道是哪里的问题                                                       。 这是仿真图 接线
12864
IMG_20140313_115245.jpg


不知道大家能不能看清楚,最后我看数码管和LED灯都有显示闪烁,程序肯定是运行起来了,就是屏幕不显示。下面是程序。
#include<reg52.h>
#include<intrins.h>
#include<math.h>
/*
sbit RS=P3^3;
sbit RW=P3^2;
sbit E=P3^4;
sbit MCS=P3^7;
sbit SCS=P3^5;
*/
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit MCS=P2^3;
sbit SCS=P2^4;

#define LCD_BUS P0

#define uchar unsigned char
#define FIRST_ADDR 0

char code ce[] =  {
                                                /*-- 文字: 测 --*/
                                                /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
                                                0x08, 0x31, 0x86, 0x60, 0x00, 0xFE, 0x02, 0xF2, 0x02, 0xFE, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00,
                                                0x04, 0xFC, 0x03, 0x00, 0x80, 0x47, 0x30, 0x0F, 0x10, 0x67, 0x00, 0x07, 0x40, 0x80, 0x7F, 0x00
                              };
char code shi[] = {
                                                /*-- 文字: 试 --*/
                                                /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
                                                0x40, 0x42, 0xDC, 0x08, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0xFF, 0x10, 0x12, 0x1C, 0x10, 0x00,
                                                0x00, 0x00, 0x7F, 0x20, 0x10, 0x20, 0x20, 0x1F, 0x10, 0x10, 0x01, 0x06, 0x18, 0x20, 0x78, 0x00
                                  };
char code kai[] = {
                                                /*-- 文字: 开 --*/
                                                /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
                                                0x40, 0x42, 0x42, 0x42, 0x42, 0xFE, 0x42, 0x42, 0x42, 0x42, 0xFE, 0x42, 0x42, 0x42, 0x42, 0x00,
                                                0x00, 0x40, 0x20, 0x10, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00
                                  };
char code shi3[]= {
                                                /*-- 文字: 始 --*/
                                                /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
                                                0x10, 0x90, 0x70, 0x1F, 0x12, 0xF0, 0x00, 0x20, 0x70, 0x28, 0x27, 0x22, 0x28, 0x70, 0x20, 0x00,
                                                0x40, 0x21, 0x12, 0x0C, 0x06, 0x09, 0x30, 0x00, 0x7F, 0x21, 0x21, 0x21, 0x21, 0x7F, 0x00, 0x00
                                  };
void chk_busy()
{
        RS=0;
        RW=1;
        E=1;
        LCD_BUS=0x00;
        while((LCD_BUS&0x80)==0x80);
        E=0;
}

void delay(unsigned int t)
{
        unsigned int i,j;
        for(i=0;i<t;i++)
                for(j=0;j<10;j++)
                ;
}

void write_com(uchar cmdcode)
{
        chk_busy();
        RS=0;
        RW=0;
        E=1;
        LCD_BUS=cmdcode;
        delay(10);
        E=0;
        delay(10);
}

void write_data(uchar Dispdata)
{
        chk_busy();
        RS=1;
        RW=0;
        E=1;
        LCD_BUS=Dispdata;
        delay(10);
        E=0;
        delay(10);
}

void lcdreset()
{
        delay(2000);
        write_com(0x30);
        delay(10);
        write_com(0x30);
        delay(10);
        write_com(0x0c);
        delay(10);
        write_com(0x01);
        delay(10);
        write_com(0x06);
        delay(10);
}

void hz_disp16(uchar pag,uchar col,uchar code *hzk)
{
        uchar i=0,j=0;
        for(j=0;j<2;j++)
        {
                write_com(0xb8+pag+j);
                write_com(0x40+col);
                for(i=0;i<16;i++)
                        write_data(hzk[16*j+i]);
        }
}
/*
void hzkdis(uchar code*s)
{
        while(*s!='')
        {
                write_data(*s);
                s++;
                delay(50);
        }
}

void ceshi(void)
{
        write_com(0x01);
        delay(50);
        MCS=1;
        SCS=0;
        write_com(0x80);
        hzkdis("aaa");

        write_com(0x90);
        hzkdis("bbb");

        write_com(0x88);
        hzkdis("abcd");

        write_com(0x98);
        hzkdis("1234");
}
*/
void main(void)
{
        lcdreset();
        MCS=1;
        SCS=0;
        hz_disp16(3,32,ce);
        delay(2000);

        hz_disp16(3, 48, shi);
        delay(2000);
        MCS = 0;SCS = 1;
        hz_disp16(3, 0, kai);
        delay(2000);
        hz_disp16(3, 16, shi3);
        delay(2000);
}


最后谢谢大家!











友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
chenshichao541
1楼-- · 2019-07-15 21:09
这个不是屏幕的问题,是protues软件上面的12864和现实我们用的12864不同,protues中的12864已经很老了。
daxin1314
2楼-- · 2019-07-16 00:50
 精彩回答 2  元偷偷看……
daxin1314
3楼-- · 2019-07-16 02:38
daxin1314 发表于 2014-3-13 15:15
一直在调延时,还是没有显示,不知道是哪里卡住了,纠结中!

恩,看到了啊,昨天一天的努力调出来了,今天在做画点的程序,还没有弄出来!
234erfadhrt
4楼-- · 2019-07-16 02:48
求   32 的   12864的程序

一周热门 更多>