移植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条回答
mygod
1楼-- · 2019-08-21 19:08
夜乄歌 发表于 2016-4-15 10:29
时序是没问题的,我也认为是配置有些问题,如果我接的是5V的液晶,我是不是得用开漏外接上拉,而不能用推 ...

说了让你上5V 试试
夜乄歌
2楼-- · 2019-08-21 22:10
大神有空帮忙看一下啊
夜乄歌
3楼-- · 2019-08-22 02:06
。。。。。没人么
mygod
4楼-- · 2019-08-22 08:03
 精彩回答 2  元偷偷看……
夜乄歌
5楼-- · 2019-08-22 10:20
mygod 发表于 2016-4-14 22:53
好像记得要5V供电

.....但是这块液晶看来资料说支持3.3v的啊,5v供电是不是我要接FT管脚开漏输出外接上拉电阻?
aiyeba
6楼-- · 2019-08-22 14:48
1.检查时序。
2.检查配置。
3.检查io配置。
4.检查代码。
5.检查电压。
6.是否有刷新函数。就是更新显存。

一周热门 更多>