找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7944|回复: 5
收起左侧

51单片机nokia6610彩屏成功驱动记-附程序

[复制链接]
ID:72705 发表于 2015-1-24 15:33 | 显示全部楼层 |阅读模式
下面这个网站是我参考的程序,不过源程序是avr的,现在改用51了。
大家也动手做一下,很考研技术的,焊点就是个大问题,一共接9跳线。
没有什么技巧,只能硬着头皮焊接。
6610/6100/7210/7250/5100这几块手机的屏,控制指令是一样的





1    Vdigital     3,3V   
2    RESET        
3    SDATA      
4    SCLK           
5    ~CS            
6    Vdisplay     3,3V   
7    n/c         ---   
8    GND         GND   
9    LED-        GND   
10   LED+        15mA - 30mA (ca. 6,4V)
这是背后10个焊点的引脚定义。

这些图是我用51做完后的效果,手机的摄像头太差了,尤其是晚上。
这个网站的程序是这样的:
#include <avr/io.h>
#include <avr/delay.h>

#define uchar unsigned char
#define uint unsigned int

#define nop asm("NOP")

#define LCD_RET_H PORTD|=0x80    //RESET ---- PD7
#define LCD_RET_L PORTD&=0x7f

#define LCD_CS_H PORTD|=0x40     //CS ---- PD6
#define LCD_CS_L PORTD&=0xbf

#define LCD_CLK_H PORTB|=0x20    //CLK ---- PB5
#define LCD_CLK_L PORTB&=0xdf

#define LCD_DIN_H PORTB|=0x08    //DIN ---- PB3
#define LCD_DIN_L PORTB&=0xf7

// Epson S1D15G10 Command Set
#define DISON        0xaf     
#define DISOFF       0xae     
#define DISNOR       0xa6   
#define DISINV       0xa7   
#define COMSCN       0xbb     
#define DISCTL       0xca     
#define SLPIN        0x95     
#define SLPOUT       0x94     
#define PASET        0x75     
#define CASET        0x15     
#define DATCTL       0xbc     
#define RGBSET8      0xce     
#define RAMWR        0x5c     
#define RAMRD        0x5d     
#define PTLIN        0xa8     
#define PTLOUT       0xa9     
#define RMWIN        0xe0     
#define RMWOUT       0xee     
#define ASCSET       0xaa     
#define SCSTART      0xab     
#define OSCON        0xd1     
#define OSCOFF       0xd2     
#define PWRCTR       0x20     
#define VOLCTR       0x81     
#define VOLUP        0xd6     
#define VOLDOWN      0xd7     
#define TMPGRD       0x82     
#define EPCTIN       0xcd     
#define EPCOUT       0xcc     
#define EPMWR        0xfc     
#define EPMRD        0xfd     
#define EPSRRD1      0x7c     
#define EPSRRD2      0x7d     
#define NOP          0x25     

void init_lcd ();
void init_mcu ();
void lcd_data (uchar data);
void lcd_command (uchar command);

static uchar color[]={0x03,0x38,0xc0,0x00,0xff};

int main ()
{
    uint num;
    uchar x=0,n=0;
     
    init_mcu ();
    init_lcd ();
         
    for (n=0;n<5;n++)
     {
           lcd_command (PASET);
           lcd_data (x);
           x+=25;
           lcd_data (x++);
           lcd_command (CASET);
           lcd_data (2);
           lcd_data (131);
         
           lcd_command (RAMWR);
         
           num=130*26;
           while (num--)
             lcd_data (color[n]);  
     }         
     
    while (1);
     
    return (0);
}  

void init_mcu ()
{  
    DDRD=0xff;
    PORTD=0xff;
    DDRC=0xff;
    PORTC=0xff;
    DDRB=0xff;
    PORTB=0xff;
}
  
void lcd_data (uchar data)
{
    LCD_CS_L;
     
    LCD_CLK_L;
    LCD_DIN_H;        //数据
    LCD_CLK_H;
     
    SPCR=0x50;
     
    SPDR=data;
    while (!(SPSR & (1<<SPIF)));
     
    LCD_CS_H;
    SPCR=0x00;
}
     
void lcd_command (uchar command)
{
    LCD_CS_L;
     
    LCD_CLK_L;
    LCD_DIN_L;       //命令
    LCD_CLK_H;
     
    SPCR=0x50;
     
    SPDR=command;
    while (!(SPSR & (1<<SPIF)));
     
    LCD_CS_H;
    SPCR=0x00;
}
  
void init_lcd ()
{
         LCD_RET_L;
         nop;nop;
         LCD_RET_H;
         
         lcd_command (DISCTL);
         lcd_data (0x0f);
         lcd_data (0x20);
         lcd_data (0x0f);
         lcd_data (0x01);
         
         lcd_command (COMSCN);    //上下半图象扫描顺序
         lcd_data (0x01);
         
         lcd_command (OSCON);
         lcd_command (SLPOUT);
         
         lcd_command (VOLCTR);
         lcd_data (0x0e);          //调整对比度,越大越亮
         lcd_data (0x05);          //色彩调整,5最合适
         
         lcd_command (PWRCTR);
         lcd_data (0x0f);
         
         lcd_command (DISINV);     //颜色顺序
         lcd_command (PTLOUT);
         
         lcd_command (DATCTL);
         lcd_data (0x01);          //改变增量方向
         lcd_data (0x00);
         lcd_data (0x01);
         
         lcd_command (RGBSET8);    //调色板设置
         lcd_data (0x00);
         lcd_data (0x02);
         lcd_data (0x04);
         lcd_data (0x06);
         lcd_data (0x08);
         lcd_data (0x0a);
         lcd_data (0x0c);
         lcd_data (0x0f);
         
         lcd_data (0x00);
         lcd_data (0x02);
         lcd_data (0x04);
         lcd_data (0x06);
         lcd_data (0x08);
         lcd_data (0x0a);
         lcd_data (0x0c);
         lcd_data (0x0f);
         
         lcd_data (0x00);
         lcd_data (0x06);
         lcd_data (0x09);
         lcd_data (0x0f);
            
         lcd_command (DISON);
}
大家可以参照一下,把相应的端口改成51的就可以了。
不过51的太慢了,我在考虑用arm或者dsp来做,这样真彩的效果又好,显示速度也快.
移植到51以后,明显能看到刷屏的效果。

评分

参与人数 1黑币 +5 收起 理由
小奥匈啊 + 5

查看全部评分

回复

使用道具 举报

ID:143999 发表于 2016-10-23 00:03 | 显示全部楼层
有没有nokia6610的手册啊
回复

使用道具 举报

ID:148440 发表于 2016-11-17 12:45 | 显示全部楼层
图片不清晰
回复

使用道具 举报

ID:148910 发表于 2016-11-20 20:04 | 显示全部楼层
厉害了,我的哥
回复

使用道具 举报

ID:153710 发表于 2016-12-12 13:01 | 显示全部楼层
楼主厉害啊
回复

使用道具 举报

ID:91691 发表于 2016-12-15 09:30 | 显示全部楼层
楼主厉害啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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