移植51单片机12864串行程序到ZET6,但是不显示,求大神指教那里出了错误

2019-08-21 13:15发布

本帖最后由 夜乄歌 于 2016-4-14 14:27 编辑

[size=15.5555562973022px]这是我的12864的.c和.h文件
#ifndef __12864C_H_
#define __12864C_H_


#include"sys.h"


#define SID PEout(2)
#define SCLK PEout(3)
void lcd_init(void);


void LCD12864_SendByte(u8 zdata);
void LCD12864_WriteCom(u8 com);
void LCD12864_WriteDate(u8 date);
void LCD12864_Init(void);
//void LCD12864_CleanScans(void);
void LCD12864_SetPos(u8 x,u8 y);
void LCD12864_DisplayString(u8 *s);
void display(u8 x_add,u8 y_add,u8 *ptr);
#endif

#include"12864c.h"
#include"delay.h"

void lcd_init()
{
        RCC->APB2ENR|=1<<6;
        GPIOE->CRL&=0XFFF000FF;
        GPIOE->CRL|=0X00033300;
        SID=1;
        SCLK=1;
}

void LCD12864_SendByte(u8 zdata)
{
        u8 i;

        for(i = 0;i < 8;i ++)
        {
                if((zdata<<i) & 0x80)
                {
                        SID = 1;
                }
                else
                {
                    SID = 0;
                }
                SCLK = 0;
                delay_us(50);
                SCLK = 1;       
        }
}

void  LCD12864_WriteCom(u8 com)
{
          LCD12864_SendByte(0xf8); //第一字节
          LCD12864_SendByte(com & 0xf0);         //第二字节
          LCD12864_SendByte((com << 4) & 0xf0);//第三字节
}

void LCD12864_WriteDate(u8 date)
{
        LCD12864_SendByte(0xfa);//第一字节
    LCD12864_SendByte(date & 0xf0);         //第二字节
        LCD12864_SendByte((date << 4) & 0xf0);//第三字节
}

void LCD12864_Init()
{
//         LCD12864_PSB = 0;
//         REST = 0;
//         delay_us(50);
//         REST = 1;
//         delay_us(50);
         //LCD12864_WriteCom(0x34);//扩充指令集动作 ,绘图不显示
         LCD12864_WriteCom(0x30);//基本指令集动作, 绘图不显示
         LCD12864_WriteCom(0x0c);//开显示,不显示游标和游标位置
         LCD12864_WriteCom(0x06);
         LCD12864_WriteCom(0x01);//清屏
         delay_us(50);
                  
}

//void LCD12864_CleanScans()
//{
//          LCD12864_WriteCom(0x01);//清屏
//}

void LCD12864_SetPos(u8 x,u8 y)
{
        u8 pos;
        if(x == 0)
                x = 0x80;
        else if(x == 1)
                x = 0x90;
        else if(x == 2)
                x = 0x88;
        else if(x == 3)
                    x = 0x98;
        pos = x + y;
        LCD12864_WriteCom(pos);//显示地址               
}

void LCD12864_DisplayString(u8 *s)
{  
        u8  i = 0;
        while(s != '')
    {
                LCD12864_WriteDate(s);
                i++;
                 delay_us(50);
    }
}

void display(unsigned char x_add,u8 y_add,unsigned char *ptr)
{
        LCD12864_SetPos(x_add,y_add);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
        while(*ptr != '')
        {
                LCD12864_WriteDate(*ptr);
                ++ptr;
        }
}


#include"12864c.h"
#include"delay.h"

u8 dis1[]="组别:";
u8 dis2[]="组别:";
u8 dis3[]="组别:";
u8 dis4[]="组别:";
u8 dis5[]="组别:";
u8 dis8[]="已绕圈:";
u8 dis12[]="速度";

int main()
{
        Stm32_Clock_Init(9);
        delay_init(72);
        lcd_init();
        LCD12864_Init();
        while(1)
        {
                display(0,0,dis1);

                LCD12864_SetPos(1,0);
                LCD12864_DisplayString(dis3);
//               
//                LCD12864_SetPos(2,0);
//                LCD12864_DisplayString(dis8);
//               
//                LCD12864_SetPos(3,0);
//                LCD12864_DisplayString(dis4);

//                LCD12864_SetPos(3,3);
//                LCD12864_DisplayString(dis12);

        }
}


刚买板子不久开始学,不知道那里有错误调试了好几天了,看了别人的程序感觉好多都看得不是太懂,所以就移植自己的C51程序,但是什么都不显示啊,用的绘晶科技的12864液晶


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
夜乄歌
1楼-- · 2019-08-23 16:21
2938690046 发表于 2016-9-23 20:19
哥们 能把你的做的给我发一下吗 我参考看看

你+我QQ吧454730034,我把我写的发给你参考下,不过写的很简略,但是能用
2938690046
2楼-- · 2019-08-23 21:14
 精彩回答 2  元偷偷看……
往事如风
3楼-- · 2019-08-23 23:49
杨胡 发表于 2016-4-15 19:15
直接找我要代码不就好了?

你的代码能给我看一下吗,我小白,弄了好久了,还有,我的管脚只有5个,(老师叫我用串行给我连了5个管脚,除了vcc和grd 还有3个)

一周热门 更多>