一个12864屏,不知如何辨认脚位,只有9根线。
一个12864屏,不知如何辨认脚位,只有9根线。http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_617900C2Y2FR.jpg
(原文件名:未命名12864.jpg) 上边有COG代表是玻璃邦定的。控制芯片在玻璃上,你只要找到电源和地,还有通讯接口即可。一般这种有4bit和串行2种,具体得看芯片的功能。 COG的屏,串行控制。
引脚可能为:
1:CS
2:RES
3: RS
4: SCK
5: SDA
6: VCC
7: GND
8: LED-
9: LED+ st7565控制器,串行的
就这几个脚,找找看
8,9肯定是背光,至于正反万用表量一下。
背光+
背光-
rs
clk
dat
cs
reset
+3.3V
gnd 回复【3楼】xzyang
st7565控制器,串行的
就这几个脚,找找看
8,9肯定是背光,至于正反万用表量一下。
背光+
背光-
rs
clk
dat
cs
reset
+3.3v
gnd
-----------------------------------------------------------------------
牛人啊,光看看背面就啥都清楚了! 按ST7565引脚顺序是/CS, /RES, A0(RS), CLK, DAT, VDD, VSS
FPC上面应该是这个顺序来的,背光引脚用万用表测 LCD MODULES:WGM-12864COG-32E
MECHANICAL SPECIFICATION:
LCD TYPE:STN POSITIVE Y/G
NUMBER OF DOTS:128*64 DOT MATRIX
MODULE SIZE(W*H*T):93.0*57.0*12.0 MAX(MM)
VIEWING AREA(W*H):65.5*38.0(MM)
DOT SIZE(WXH):0.36*0.41
DOT PITCH(WXH):0.40*0.45
OPERATING VOLTAGE:65-85V AC 200-400HZ
LCD DUTY:1/65
LCD BIAS:1/9
Microprocessor interface: Parallel 6800
Pin outs connection: LINE BANK CONTOCT
LCD controller: NT7532
VIEWING DIRECTION:6
楼主应该先放狗搜一搜
我稍微搜了下,你可以进一步搜,应该有相关的datasheet 谢谢各位大侠的解答!我量了一下,有可能是2楼的脚位排列。 都是牛人! 传一个这个屏的驱动,测试过,没问题
#ifndef __12864COG_H__
#define __12864COG_H__
#define uchar unsigned char
#define uint unsigned int
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define DISPLAY_START_LINE 0x40 //0
#define DISPLAY_PAGE 0xB0
#define DISPLAY_ADC_L 0xA0 //the LSB is first
#define DISPLAY_ADC_M 0xA1
#define DISPLAY_REVERSE_OFF 0xA6
#define DISPLAY_REVERSE_ON 0xA7
#define DISPLAY_ENTIRE_ON 0xA5
#define DISPLAY_ENTIRE_OFF 0xA4
#define DISPLAY_SHL_NOM 0xC0
#define DISPLAY_SHL_REV 0xC8
#define LCD_POWER_CV 0x2C
#define LCD_POWER_RV 0x2E
#define LCD_POWER_FV 0x2F
#define LCD_REPOWER_1 0x81
#define LCD_REPOWER_2 0x31
#define LCD_RESISTOR 0x20
#define LCD_RESET 0xE2
#define DISPLAY_COLUMN_MSB 0x10 //0
#define DISPLAY_COLUMN_LSB 0x00 //0
sbitLCD_CS=P1^0;
sbitLCD_RES=P1^1;
sbitLCD_RS=P1^2;
sbitLCD_SCK=P1^3;
sbitLCD_SDA=P1^4;
#define LCD_CS_H LCD_CS=1
#define LCD_CS_L LCD_CS=0
#define LCD_RES_HLCD_RES=1
#define LCD_RES_LLCD_RES=0
#define LCD_RS_H LCD_RS=1
#define LCD_RS_L LCD_RS=0
#define LCD_SCK_HLCD_SCK=1
#define LCD_SCK_LLCD_SCK=0
#define LCD_SDA_HLCD_SDA=1
#define LCD_SDA_LLCD_SDA=0
void Write_DAT(uchar dat);
void Write_CMD(uchar com);
void Initialize_LCD(void);
void Write_word(uchar x,uchar y,uchar dat[]);
void Write_char(uchar x,uchar y,uchar dat[]);
void Displaychars(uchar x,uchar y,uchar dat[]);
void Displaywords(uchar x,uchar y,uchar dat[]);
void Clr_LCD(void);
/*******************************************************************************
*函数名:延时函数
*功能:延时
*输入:uchar n(延时长度)
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/
void Delayus(uchar n)
{
for(;n>0;n--);
}
/*******************************************************************************
*函数名:写数据函数
*功能:写一个数据到液晶
*输入:uchar com(数据)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送数据***********************/
void Write_DAT(uchar dat)
{
uchar i;
LCD_RS_H;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(dat&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
dat=dat<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:写指令函数
*功能:写一个指令到液晶
*输入:uchar com(命令)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送命令***********************/
void Write_CMD(uchar com)
{
uchar i;
LCD_RS_L;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(com&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
com=com<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:初始化函数
*功能:启动液晶,初始化液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD(),延时函数Delay()
*版本:1.0
*
*******************************************************************************/
void Initialize_LCD(void)
{
LCD_RES_L;
delayms(100);
LCD_RES_H;
Write_CMD(DISPLAY_ADC_L);
Write_CMD(DISPLAY_SHL_NOM);
Write_CMD(0xA2);
Write_CMD(LCD_POWER_CV);
delayms(100);
Write_CMD(LCD_POWER_RV);
delayms(100);
Write_CMD(LCD_POWER_FV);
Write_CMD(LCD_REPOWER_1);
Write_CMD(LCD_REPOWER_2);
Write_CMD(LCD_RESISTOR);
Write_CMD(DISPLAY_START_LINE+32);
Write_CMD(DISPLAY_SHL_REV);
Write_CMD(DISPLAY_ON);
}
void Write_oneDat(uchar x,uchar y,uchar p)
{
uchar COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + y-1);
Write_DAT(p);
}
/*******************************************************************************
*函数名:写字符函数
*功能:写字符函数,写一个字符到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Write_char(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<8;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<8;i++)
{
Write_DAT(*(p+i+8));
}
}
void Write_word(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<16;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<16;i++)
{
Write_DAT(*(p+i+16));
}
}
void Write_words(uchar x,uchar y,uchar num,uchar *p)
{
uchar i;
for(i=0;i<num;i++)
{
Write_word(x,y,p);
x+=16;
p+=32;
}
}
/*******************************************************************************
*函数名:清屏函数
*功能:将液晶清屏液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Clr_LCD(void)
{
uchar i,j;
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(i=0;i<9;i++)
{
Write_CMD(DISPLAY_PAGE + i);
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(j=0;j<132;j++)
{
Write_DAT(0x00);
}
}
}
#endif lz在哪买的?给个链接 回复【10楼】suncq
-----------------------------------------------------------------------
在电话机上拆的。 回复【9楼】Hamyou
-----------------------------------------------------------------------
谢谢9楼的资料! 刚好手上有几个屏,好资料 收了! 谢谢 mark备用, 回复【13楼】n_mos
-----------------------------------------------------------------------
你好。能绐我一个编译好的HEX 吗?我复制了那一个C文件,但是报错,,我有一堆这个屏(用在移动电话机上的,还有外壳,0现在那个电话没有什么用了,,, 回复【15楼】lzdyfsyd
回复【13楼】n_mos
-----------------------------------------------------------------------
你好。能绐我一个编译好的hex 吗?我复制了那一个c文件,但是报错,,我有一堆这个屏(用在移动电话机上的,还有外壳,0现在那个电话没有什么用了,,,
-----------------------------------------------------------------------
带GSM模块的话有价值...电话上图看看 神人到处都有啊。 回复【16楼】Rapido
-----------------------------------------------------------------------
中国移动 敏迅 GT1000 这是一个很强大的模块,不是通用的那一种, 我有一块 wgm-12864cog-41 ,点亮了.
/*===========================================================================
Filename: CP_LCD.C
Version : 2005-1-21
Note : WGM-12864COG-41 V3.0驱动程序
Hardware: XTAL=7.158MHz(3.579MHz倍频)
============================================================================*/
/*============================================================================
; WGM-12864COG-41 VER2.0 serial LCD dirver program
; author zhaofei,modification date 04-3-23
; copyright ningbo land communicatins equipment co.,ltd,2004-03
=============================================================================*/
#define LCD_GLOBAL
#include <stdarg.h>
#include"..\inc\Dotlib.h"
#include"..\inc\config.h"
////0123456789012345
uint8 code EmptyTable[] = " ";
void Delay1us(uint8 n)
{
while(n--)
{
_nop_();
}
}
/*================================================================================
; func data serial out
; intern function
; call no
; calledInitialLCD() InitialLCD1() ClearLCD()putHZ()PutASCII()
; modification author zhaofei modification date 04-03-11
=================================================================================*/
void lcd_wr(uint8 ComDatFlag,uint8 OutData)
{
uint8 j;
if(ComDatFlag)
{
LCDA0 = 1;
}
else
{
LCDA0 = 0;
}
for(j=0;j<8;j++)
{
LCDSCL = 0;
//Delay1us(1);
_nop_();
if((OutData&0x80)==0x80)
LCDSDA = 1;
else
LCDSDA = 0;
//Delay1us(1);
_nop_();
OutData<<=1;
LCDSCL = 1;
//Delay1us(2);
_nop_();
_nop_();
}
}
//void OpenLcdBackLight(void)
//{
// //Clr_Pin_X(PIN1,LEDON); //低电平点亮背光
// LEDON = 1;
// LcdBackLightOpenTime = LCD_BLIGHT_OPEN_TIME;
//}
//
//void CloseLcdBackLight(void)
//{
// //Set_Pin_X(PIN1,LEDON);
// LEDON = 0;
//}
void init_LCD(void)
{
LCDCS = 1;
// LCDRST = 1;
LCDA0 = 0;
LCDSCL = 1;
LCDSDA = 0;
OpenLcdBackLight();
//Clr_Pin_X(PIN1,LEDON);
// LcdBackLightOpenTime = 0xffff;
Delay1us(5);
// LCDRST = 0;
// Delay1ms(10);
// LCDRST = 1;
// Delay1ms(10);
LCDCS = 0;
// Delay10ms(1);
lcd_wr(LCD_COMMAND,0xA2); //置液晶显示驱动偏压比D0=0=1/9
lcd_wr(LCD_COMMAND,0xA0); //显示缓冲区地址与段输出对应关系D0=0=正常 =1=按Y轴反向//a0//a1
lcd_wr(LCD_COMMAND,0xC8); //置公共端输出扫描方向D3=0=正常 =1=按X轴反向 //c0//c
lcd_wr(LCD_COMMAND,0x2F); //打开供电电源
Delay1ms(5);
lcd_wr(LCD_COMMAND,0x25);// v5:Rb/Ra,20-27粗调,越小越淡
Delay1ms(5);
lcd_wr(LCD_COMMAND,0x81); //BIT2-BIT0=V5电压调节,选择内部电阻比例//25//23
ReadBytesFMEEPROM(LCDCONTRAST_Adds,1);
lcd_wr(LCD_COMMAND,EEPROMDataBuf); //uLCDContrast); //V5=1,微调,越小越淡0-3f 0x30
Delay1ms(10);
lcd_wr(LCD_COMMAND,0xA4); //D0=0=正常显示/D0=1=全亮
lcd_wr(LCD_COMMAND,0xA6); //正显
lcd_wr(LCD_COMMAND,0xAF); //液晶显示开/关D0=1=开
lcd_wr(LCD_COMMAND,0x60); //GO 33 LINE
Delay1ms(5);
LCDCS = 1;
Delay1ms(5);
}
void SetLCDContrast( uchar n) //设置对比度
{
LCDCS = 1;
// LCDRST = 1;
Delay1us(5);
// LCDRST = 0;
// Delay1ms(10);
// LCDRST = 1;
// Delay1ms(10);
LCDCS = 0;
Delay1ms(10);
lcd_wr(LCD_COMMAND,0x81); //BIT2-BIT0=V5电压调节,选择内部电阻比例//25//23
if(n>0x3f) n = uLCDContrast;
lcd_wr(LCD_COMMAND,n); //V5=1,微调,越小越淡0-3f 0x30
Delay1ms(5);
LCDCS = 1;
Delay1ms(10);
}
void putASCII( int8 chASC, uint8 reserve )
{
/*该函数用来显示一个ASCII码字符*/
uint8 i;
uint16 ASC_index, MAXLEN;
if ( chASC == '\n' )
{
chCursorSiteNow_X = 0;
chCursorSiteNow_Y += 16;
if ( chCursorSiteNow_Y > Y_SIZE - 1 )
{
chCursorSiteNow_Y = 0;
}
return;
}
if ( chCursorSiteNow_X + 8 > X_SIZE ) //如果剩下的位置不够显示一个ASCII码字符,则换行
{
chCursorSiteNow_X = 0;
chCursorSiteNow_Y += 16;
if ( chCursorSiteNow_Y > Y_SIZE - 1 )
{
chCursorSiteNow_Y = 0;
}
}
MAXLEN = sizeof( ASCIITAB ) / sizeof( lattice8_16 );
for ( ASC_index = 0; ASC_index < MAXLEN; ++ASC_index )
{
if ( ASCIITAB[ ASC_index ].index == chASC )
break;
}
if ( ASC_index < MAXLEN )
{
LCDCS = 0;
set_address( chCursorSiteNow_X, chCursorSiteNow_Y );
if ( reserve )
{
for ( i = 0; i < 8; i++ )
{
lcd_wr( LCD_DATA, ASCIITAB[ ASC_index ].TABLE[ i ]^0xff );
}
}
else
{
for ( i = 0; i < 8; i++ )
{
lcd_wr( LCD_DATA, ASCIITAB[ ASC_index ].TABLE[ i ] );
}
}
set_address( chCursorSiteNow_X, chCursorSiteNow_Y + 8 );
if ( reserve )
{
for ( i = 0; i < 8; i++, chCursorSiteNow_X++ )
{
lcd_wr( LCD_DATA, ASCIITAB[ ASC_index ].TABLE[ i + 8 ]^0xff );
}
}
else
{
for ( i = 0; i < 8; i++, chCursorSiteNow_X++ )
{
lcd_wr( LCD_DATA, ASCIITAB[ ASC_index ].TABLE[ i + 8 ] );
}
}
LCDCS = 1;
}
}
void putHZ( uint8 *str, uint8 reserve )
{
/*该函数用来显示一个汉字*/
uint8 iHZ_GB2312[ 2 ];
uint16hz_index, MAXLEN;
uint8i;
MAXLEN = sizeof( HZTAB ) / sizeo /**********************************************************************************************
*
* 文件名: lcd.h
*12864 Serial LCD, contains two documents: lcd.c with lcd.h. call void printLCD (uint8 x, uint8 y, uint8* fmt, ...), can be shown in the string sent to the LCD screen display
***********************************************************************************************/
#include "..\inc\ctype.h"
#include "..\inc\SST89x5x4.H"
#ifdef LCD_GLOBAL
#define LCD_EXTERN
#else
#define LCD_EXTERNextern
#endif
#define LCD_DATA 1
#define LCD_COMMAND 0
#define HZ_SIZE 180
#define X_SIZE 128
#define Y_SIZE 64
//dat D0 P0_0
//Clk D1 P0_1
//CS D2 P0_2
//D/C D3 P0_3
//RST RST
//VCC VCC
//LED+ CLCD1 P1_7
//LCD管脚定义
//#define LCDRST
#define LCDA0 P0_3
#define LCDCS P0_2
#define LCDSCL P0_1
#define LCDSDA P0_0
#define LEDON P1_7 //低电平时背光亮
#define OpenLcdBackLight() LEDON = 1; LcdBackLightOpenTime = 20
#define CloseLcdBackLight() LEDON = 0
#define uLCDContrast 0x36 //0x30 //液晶对比度
#define WARNINFOTIME 0x03
//显示警告信息倒计时器 //显示告警信息持续(保护不被其他显示程序打断)时间
//LCD_EXTERN uint8 xdata LCDContrast; //对比度
//LCD_EXTERN uint8 xdata WarnTimer;
LCD_EXTERN uint8 xdata chCursorSiteNow_X;
LCD_EXTERN uint8 xdata chCursorSiteNow_Y;
LCD_EXTERNuint8 xdata SystemInitFlag;
LCD_EXTERNuint8 xdata SystemInitCount;
#define LCD_BLIGHT_OPEN_TIME 1260 //*10mS
LCD_EXTERNuint8 data LcdBackLightOpenTime;
//volatile
LCD_EXTERN void lcd_wr(uint8 ComDatFlag,uint8 Data);
//LCD_EXTERN void OpenLcdBackLight(void);
//LCD_EXTERN void CloseLcdBackLight(void);
LCD_EXTERN void init_LCD(void);
LCD_EXTERN void ClearLcd(void);
LCD_EXTERN void putASCII(int8 chASC,uint8 Rev);
LCD_EXTERN void set_address(uint8 x, uint8 y);
LCD_EXTERN void setxy(uint8 x, uint8 y);
LCD_EXTERN void printLCD(uint8 x,uint8 y,uint8 *fmt, ... );
LCD_EXTERN void reprintLCD( uint8 x,uint8 y,uint8 *fmt, ... );
LCD_EXTERN void draw_bmp( uint8 x, uint8 y,uint8 num );
//LCD_EXTERN void LcdReDisp(uint8 x1,uint8 x2,uint8 y1,uint8 y2);
//LCD_EXTERN void LCDDispLine0(uint8 no,uint8 *str,uint8 Length);
//LCD_EXTERN void LCDDispLine1(uint8 no,uint8 *str,uint8 Length);
//LCD_EXTERN void LCDDispLine2(uint8 no,uint8 *str,uint8 Length);
//LCD_EXTERN void LCDDispLine3(uint8 no,uint8 *str,uint8 Length);
//LCD_EXTERN void DispWarnInfo(uint8 *pL2, uint8 *pL3);
//LCD_EXTERN void DispWarnInfoShort(uint8 *pL2, uint8 *pL3);
LCD_EXTERN void ClearLcdLine(uint8 Oy);
//LCD_EXTERN void ClearLcdLine123(void);
LCD_EXTERN void draw_irr(uint8 x,uint8 y,uchar irr, bool reserve); //2006-11-27 18:43 chxd
LCD_EXTERN void SetLCDContrast( uchar n); //设置对比度
LCD_EXTERN void draw_spk_bmp(uint8 x,uint8 y,uint8 num); //显示声音音量,0~3, mark,多谢分享{:victory:} Hamyou 发表于 2011-2-23 21:09 static/image/common/back.gif
传一个这个屏的驱动,测试过,没问题
#ifndef __12864COG_H__
好强大! Hamyou 发表于 2011-2-23 21:09 static/image/common/back.gif
传一个这个屏的驱动,测试过,没问题
#ifndef __12864COG_H__
很好很强大。
www.360suos.com
页:
[1]