搜索
bottom↓
回复: 13

C51驱动5寸RA8870液晶初始化代码

[复制链接]

出0入0汤圆

发表于 2012-5-18 12:45:08 | 显示全部楼层 |阅读模式
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
void Delay100ms(uchar Counter);
void Delay10ms(uchar Counter);
void Delay1ms(uchar Counter);
void Delay100us(uchar Counter);
void Delay2us(uchar Counter);
void Chk_Busy(void);
sbit LCD_RS=P3^0;
sbit LCD_CS=P3^1;
sbit LCD_WR=P3^2;
sbit LCD_RST=P3^3;
sbit LED_EN=P3^6;
sbit LCD_RD=P3^7;
unsigned char DATA_BUS ;

//#define DATA_BUS P1

// ========== MCU Cycle ===========
void LCD_CmdWrite(uchar cmd) // Command Write
{
        LCD_CS = 0;
        LCD_RS = 1;
        Delay10ms(1);
        LCD_WR = 0;
        Delay10ms(1);
        P1= cmd;

        LCD_WR = 0;
        Delay10ms(1);
        LCD_WR = 1;

        Delay10ms(1);
        LCD_CS = 1;


//        P1 = 0xff;       
}
void LCD_DataWrite(uchar Data) // Data Write
{
        LCD_CS = 0;
        LCD_RS = 0;
        Delay10ms(1);

        Delay10ms(1);
        P1= Data;
        LCD_WR = 0;
        Delay10ms(1);
        LCD_WR = 1;


        Delay10ms(1);
        LCD_CS = 1;


//        P1 = 0xff;
}
        uchar LCD_StatusRead(void) // Read Status Register
        { uchar Data;
        LCD_CS = 0;
        LCD_RS = 1;
        LCD_WR = 1;
        LCD_RD = 0;
        Data = DATA_BUS;
        LCD_RD = 1;
        LCD_CS = 1;
        DATA_BUS = 0xff;
        LCD_RS = 0;
        return Data;
}

// ========== RA8870 初始化 ===========


void LCD_Initial(void)
{       
        LCD_CmdWrite(0x01);
        LCD_DataWrite(0x00);  // 关闭显示
//        Delay10ms(1);
        P2=0X7F;
        LCD_CmdWrite(0x88);
        LCD_DataWrite(0x8F);         // SYS_CLK=.......   
//        Delay10ms(1);
        P2=0XFE;
        LCD_CmdWrite(0x89);
        LCD_DataWrite(0x03);
//        Delay10ms(1);
        P2=0XD;      
        LCD_CmdWrite(0x04);
        LCD_DataWrite(0x01);// PCLK频率=SYS_CLK/((2^(0+1))*(2^n))=
//        Delay10ms(1) ;
        P2=0XFB;
        LCD_CmdWrite(0x01);
        LCD_DataWrite(0x01);
//        Delay10ms(1);
        P2=0XF7;         
        LCD_CmdWrite(0x01);
        LCD_DataWrite(0x00);      //进行一次软复位,使频率设置有效。
//        Delay10ms(1);
        P2=0XEF;
        LCD_CmdWrite(0x10);
        LCD_DataWrite(0x3C);       //使用外部RAM,65K色,8位数据口。
//        Delay10ms(1);
        P2=0XDF;
        LCD_CmdWrite(0x11);
        LCD_DataWrite(0x00);         // RGB格式LCD_CmdWrite(0x88);
//        Delay10ms(1);
        P2=0XBF;
        LCD_CmdWrite(0x12);      
        LCD_DataWrite(0x00);  
//        Delay10ms(1);  
        P2=0X7F;   
        LCD_CmdWrite(0x13);         
        LCD_DataWrite(0x00);
//        Delay10ms(1);
        P2=0XFE;       
        //_______水平设置       _____
        LCD_CmdWrite(0x14);      
        LCD_DataWrite(0x3B);        //480列
//        Delay10ms(1);
        P2=0XFD;       
        LCD_CmdWrite(0x15);         
        LCD_DataWrite(0x04);   
//        Delay10ms(1);
        P2=0XFB;   
        LCD_CmdWrite(0x16);         
        LCD_DataWrite(0x05);        //水平非显示区域
        Delay10ms(1);
        P2=0XF7;
        LCD_CmdWrite(0x17);        
        LCD_DataWrite(0x02);        // HSYNC 开始位置
//        Delay10ms(1);
        P2=0XEF;
        LCD_CmdWrite(0x18);         
        LCD_DataWrite(0x01);        //HSYNC 脉宽
//        Delay10ms(1);
        P2=0XDF;               
        //___________ 垂直设置    ______________
        LCD_CmdWrite(0x19);        
        LCD_DataWrite(0x0F);
//        Delay10ms(1);
        P2=0XBF;
        LCD_CmdWrite(0x1A);        
        LCD_DataWrite(0x01);        //272行
//        Delay10ms(1);
        P2=0X7F;
        LCD_CmdWrite(0x1B);        
        LCD_DataWrite(0x09);
//        Delay10ms(1);
        P2=0XFE;
        LCD_CmdWrite(0x1C);        
        LCD_DataWrite(0x00);        //垂直非显示区域
//        Delay10ms(1);
        P2=0XFD;
       
        LCD_CmdWrite(0x1D);        
        LCD_DataWrite(0x05);
//        Delay10ms(1);
        P2=0XFB;
        LCD_CmdWrite(0x1E);         
        LCD_DataWrite(0x00);         //VSYNC 开始位置
//        Delay10ms(1);
        P2=0XF7;
        LCD_CmdWrite(0x1F);        
        LCD_DataWrite(0x02);         //VSYNC 脉宽
//        Delay10ms(1);
        P2=0XEF;
                // ___________  有效工作窗口 ________
        LCD_CmdWrite(0x30);        
        LCD_DataWrite(0x00);
//        Delay10ms(1);
        P2=0XDF;
        LCD_CmdWrite(0x31);         
        LCD_DataWrite(0x00);         //从第一列开始
//        Delay10ms(1);
        P2=0XBF;
        LCD_CmdWrite(0x34);      
        LCD_DataWrite(0xDF);
//        Delay10ms(1);
        P2=0X7F;
        LCD_CmdWrite(0x35);         
        LCD_DataWrite(0x01);         //01DF=480。
//        Delay10ms(1);
        P2=0XFE;
       
        LCD_CmdWrite(0x32);      
        LCD_DataWrite(0x00);
//        Delay10ms(1);
        P2=0XFD;
        LCD_CmdWrite(0x33);        
        LCD_DataWrite(0x00);        //从第一行开始
//        Delay10ms(1);
        P2=0XFB;
        LCD_CmdWrite(0x36);      
        LCD_DataWrite(0x0F);
//        Delay10ms(1);
        P2=0XF7;
        LCD_CmdWrite(0x37);      
        LCD_DataWrite(0x01);       //010F =272行
//        Delay10ms(1);
        P2=0XEF;
        LCD_CmdWrite(0x01);     
        LCD_DataWrite(0x80);       //打开显示        
//        Delay100ms(1)        ;
        P2=0XDF;
        LCD_CmdWrite(0x40);     
        LCD_DataWrite(0x00);
//        Delay100ms(1)        ;
        P2=0XBF;
//        Delay100ms(10)        ;
        P2=0X00;
}  
// ========== 读忙(Check Busy )子程序 ===========
void Chk_Busy(void)
{
//uchar temp;
do
{
//temp=LCD_StatusRead();
//}while((temp&0x80)==0x80);
} while(LCD_StatusRead()&0x80);
}

// ========== 延迟(Delay )子程序 ===========
void Delay2us(uchar Counter)
{ while(--Counter);
}
void Delay100us(uchar Counter)
{ while(Counter--)
{ Delay2us(100); }
}
void Delay1ms(uchar Counter)
{ while(Counter--)
{ Delay100us(11); }
}
void Delay10ms(uchar Counter)
{ while(Counter--)
{ Delay1ms(11); }
}
void Delay100ms(uchar Counter)
{ while(Counter--)
{ Delay1ms(101); }
}
                 //================== main process start ==================//
void main(void)
{
//        LCD_Reset(); // 对RA8870 重致

        LCD_RST = 0;
        Delay100ms(1);
        LCD_RST = 1;
        Delay100ms(1);
        LCD_Initial();
        while(1)
                {        P2=0X0F;
//                        LCD_Initial();

                }

}


人家用汇编在W78E516DDG上写的初始化,我把改成STC90C516RD+上的,怎么就初始化不了,数据端口和命令端口输入输出都正确,有谁能帮我分析一下原因呢?先谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-18 15:31:13 | 显示全部楼层
delay 用示波器卡一下,stc各系列速度不同,要重新校准

出0入0汤圆

 楼主| 发表于 2012-5-20 21:15:48 | 显示全部楼层
jetli 发表于 2012-5-18 15:31
delay 用示波器卡一下,stc各系列速度不同,要重新校准

嗯,我试了,没有起作用,我给他每一步都延长足够时间了

出0入0汤圆

 楼主| 发表于 2012-5-21 15:13:58 | 显示全部楼层
不能沉了,谁懂的帮我看一下,这两种型号单片机是兼容的,怎么一个上面能运行一个不能运行。

出0入0汤圆

 楼主| 发表于 2012-5-22 09:13:55 | 显示全部楼层
加油,不能沉了,问题还没解决

出0入0汤圆

发表于 2012-5-22 10:11:36 | 显示全部楼层
本帖最后由 sync765 于 2012-5-22 10:12 编辑

看错了,还是查时序吧

出0入0汤圆

 楼主| 发表于 2012-5-23 13:20:03 | 显示全部楼层
sync765 发表于 2012-5-22 10:11
看错了,还是查时序吧

这个时序我也看了,为什么两种型号的51核单片机,一个能驱动一个不能驱动

出0入0汤圆

发表于 2012-5-23 16:02:28 | 显示全部楼层
以前我用过RA8806的屏,当时卖家给的是基于89C52的简单的源程序,我拿到STC89C58 上使用也是不行,
后来用mega8,又参考了一些RA8806官方的示例,才正常驱动了
现在还不清楚当时在STC89C58上为何不行。。。
当时没有继续找原因。。。。

但可以肯定的就是时序很重要

楼主多找一些示例看看吧

出0入0汤圆

发表于 2012-5-23 16:23:59 | 显示全部楼层
还用8870?都要停产了,用8875吧

出0入0汤圆

 楼主| 发表于 2012-5-25 15:42:20 | 显示全部楼层
sync765 发表于 2012-5-23 16:02
以前我用过RA8806的屏,当时卖家给的是基于89C52的简单的源程序,我拿到STC89C58 上使用也是不行,
后来用m ...

我最终的目的是在STM32上驱动RA8870的5寸屏,我试了一个试例,并没有成功。
卖液晶的给了我一个汇编的例程,我想在STC的基础上把改成C语言的,然后移植到STM32上,可是一直没成功。
你要是有在STM32上驱动RA8870的5寸屏的试例,给我参考一下也好啊

出0入0汤圆

 楼主| 发表于 2012-5-25 15:44:24 | 显示全部楼层
joing2000 发表于 2012-5-23 16:23
还用8870?都要停产了,用8875吧

这个我也没办法,公司里指定要用这个了,弄不出来还指定要用这个,我很纠结

出0入0汤圆

发表于 2012-5-29 09:25:22 | 显示全部楼层
yanhongtao 发表于 2012-5-25 15:44
这个我也没办法,公司里指定要用这个了,弄不出来还指定要用这个,我很纠结 ...

你公司也太执着了吧,如果你用8875。我这有初始化程序。
8870好像只有4.3存的。你要不?

出0入0汤圆

发表于 2013-3-12 14:38:21 | 显示全部楼层
我这有个AVR驱动8870 的
QQ:873918540

出0入0汤圆

发表于 2013-5-7 23:16:25 | 显示全部楼层
ra8875能不能驱动at050tn33 5寸的屏啊~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表