想问一个关于12864串行显示的问题

2019-07-15 09:16发布


请教一个关于12864显示屏程序的问题   一下程序烧录进单片机后屏幕会亮 但没有显示  不知道哪里出了问题   (12864被我用一块电路板引了出来  串并行端口已经强行接地即默认已经使用串行)


#include<reg52.h>
#include<intrins.h>

sbit CS=P0^1;                //片选        
sbit SID=P0^2;        //数据
sbit SCLK=P0^3;                //时钟信号端口

unsigned char code disp[]={"01234567"};

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

void senddata (unsigned char sdata)
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                if( (sdata << i) & 0x80 )
                {
                        SID = 1;
                }
                else
                {
                        SID = 0;
                }
                SCLK = 0;
                SCLK =1;
                SCLK = 0;
        }
}

void write_com(unsigned char cmdcode)
{
        CS = 1;
        senddata(0xf8);                //写指令信号
        senddata(cmdcode &0xf0);                //发送高四位
        senddata((cmdcode<<4)&0xf0);        //发送第四位
        delay(2);
        CS = 0;
}

void write_data(unsigned char dispdata)
{
        CS = 1;
        senddata(0xfa);                        //写数据指令
        senddata(dispdata&0xf0);                //发送高四位
        senddata((dispdata<<4)&0xf0);                //发送第四位
        delay(2);        
        CS = 0;
}

void lcdinit()
{
        write_com(0x30);                          //设置8位数据接口,基本指令模式
        delay(50);
        write_com(0x0c);                        //整体显示开,反白关,游标关
        delay(50);
        write_com(0x02);                        //清除DDRAM
        delay(50);
        write_com(0x01);                        //写入空格清除屏幕
        delay(50);
}


void position()           //位置定义子函数
{
        write_com(0x03);
        delay(50);
        write_com(0x89);
        
}

void main()
{
        int i;
        
        lcdinit();
        delay(50);
        while(1)
        {
                position();
                for(i=0;i<7;i++)
                {        
                        write_data(disp);
                        delay(50);
                }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。