标题:
51单片机nokia6610彩屏成功驱动记-附程序
[打印本页]
作者:
huxiao
时间:
2015-1-24 15:33
标题:
51单片机nokia6610彩屏成功驱动记-附程序
下面这个网站是我参考的程序,不过源程序是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以后,明显能看到刷屏的效果。
作者:
dsadsa
时间:
2016-10-23 00:03
有没有nokia6610的手册啊
作者:
70700
时间:
2016-11-17 12:45
图片不清晰
作者:
小奥匈啊
时间:
2016-11-20 20:04
厉害了,我的哥
作者:
卧室谁
时间:
2016-12-12 13:01
楼主厉害啊
作者:
adls
时间:
2016-12-15 09:30
楼主厉害啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1