几天前无意中看到论坛里有人点亮了某行网银盾的液晶屏,心血来潮,然后自己也弄了几个,来尝试一下。
这是原文:
http://bbs.mydigit.cn/read.php?tid=1235754 这种网银盾的外形几乎一样,但是内部电路却不同。
坛友点亮的是最右边的那种,今天我来教大家点亮另外两种。
先说明一下,
这种屏幕是3.3V的这种屏幕是3.3V的这种屏幕是3.3V的重要的事情说三遍!!!最高电压3.6V,如果接5V,嗯,你有钱,你任性。
从图中可以看到,另外两种的电路板基本是相同的,屏幕排线略有不同。
把芯片拆了,飞线。
按照图中这种方向定义引脚从左到右分别是12脚到1脚
引脚定义如下,
1 升压输出
2 电容1
3 电容2
4 电容2
5 电容1
6 vcc
7 gnd
8 cs片选
9 cd(rs)寄存器选择
10 rst复位
11 sck
12 sda
不同批次的液晶屏,引脚排列可能不同。前五个引脚就不说了,看电路板很容易看出来,vcc和gnd用万用表量一下就行了,与那个8引脚芯片的5、6脚相连的肯定是sck和sda,剩下3个引脚的就算顺序全部打乱,排列组合只用6种,全都试一遍,绝对能得出结论。
把线连好,写程序。
最后点亮的效果如下。
下面说点有用的,这个液晶屏的操作指令和坛友给的资料上的不同,我是在某宝上找的英文资料,硬着头皮看下来的。
估计大家没心情看英文资料,我把比较重要的指令翻译一下。
0x81 设置对比度,后必须紧跟对比度的数值,范围0-255
0xeb 设置偏压比,采用默认值,不要动!
0xaf 启动液晶屏,
0xae 关闭液晶屏,
0xax 0-3,设置帧数,0:76fps,1:95fps,2:132fps,3:168fps
0xa5 开启全部显示,说人话就是黑屏
0xa7 反色显示
0xbx x取值0-7,设置页,8行为一个页,一共8页。
0x0x 设置低四位列地址
0x1x 设置高四位列地址
0x88 不自动换行。
0x89 写满一行后自动换行。
0xc0 默认扫描顺序
0xc2 翻转x
0xc4 翻转y
0xc6 翻转xy
资料里有的我就不说了,想研究的自己看资料。
程序的注释里写了很多有用的东西,我就不在这里重复了,你们自己看。液晶屏的品牌在资料里面能看到,如果有不懂得地方,某宝是个找资料的好地方,他们的店里还有教学视频。而且他们的12864带字库的屏幕比常用的那种墨绿色的屏幕便宜,我觉得不错。
简单说一下调试的方法:
如果屏幕不显示,可以单独给屏幕发送“开启显示”的指令以后,测一下升压输出引脚有没有7v以上的电压,如果有就证明能工作,屏幕上没有显示可能是对比度太低,看不见;也可能是屏幕坏了。如果没有电压,很可能是引脚定义顺序不同,把他们换一换,再试试,当然也有可能是坏了。升压输出引脚上的电容电阻,还有另外两个电容一定要接!!
如果屏幕能工作,在没有给屏幕发送任何数据以前,屏幕上会显示雪花点,而且每次开机的雪花点都不一样。
懒得下载资料的可以直接复制我的源码。
- #include<intrins.h>
-
- void delay();void timer(unsigned int t);
-
- void wlc(unsigned char dat);//写入液晶屏指令,write lcd command。
- void wld(unsigned char dat);//写入液晶屏数据,write lcd data。
- void InitLCD();//初始化液晶屏。
- void CleanLCD();//清屏。
-
- sbit SDAT = P1^0;//数据
- sbit SCLK = P1^1;//时钟
- sbit CD = P1^2;//寄存器选择,高电平传输数据,低电平传输指令
- sbit RS = P1^3;//复位,低电平复位,复位完成后,回到高电平
- sbit CS = P1^4;//片选,低电平片选
-
- void delay(){
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();}
-
- void timer(unsigned int t){
- unsigned int i; unsigned char j;
- for(i=0; i<t; i++)
- for(j=0; j<200; j++);
- }
-
- //初始化液晶屏void InitLCD()
- { timer(1000);//复位前的延时必须大于3ms
- RS = 0; timer(1000);//RS置低时间必须大于3us
- RS = 1; timer(1000);//复位完成后写入操作命令前的延时必须大于150ms
- wlc(0xE2);//系统设置复位,这一句必须有
- timer(100);//这个延时可以去掉
-
- //以下注释中的参数在系统设置复位后均置为默认值,可以不用更改
- /*
- wlc(0x2e);//设置电源为内部升压、电荷泵工作电流1.4mA
- wlc(0xeb);//设置偏压比,采用默认值,不要更改!
- wlc(0xa1);//设置帧数,采用默认值,0:76fps,1:95fps,2:132fps,3:168fps
- wlc(0x89);//自动换行
- */
-
- wlc(0x81);//设置对比度,该命令后必须紧跟对比度的值,取值范围0-255
- wlc(0x78);//设置对比度的值为0x78
- wlc(0xc2);//设置行列扫描顺序,c0 默认扫描顺序,c2 翻转x,c4 翻转y,c6 翻转xy
- wlc(0xAF);//开启显示
-
- timer(1000);}
-
- //写入液晶屏指令,write lcd command。
- void wlc(unsigned char dat)
- { unsigned char i;
- CS = 0;
- CD = 0;
- for(i=0; i<8; i++) {
- dat = dat << 1;
- SCLK = 0;
- //delay();//数据手册中的要求是保持时间大于100ns,51的速度比这个慢,可以不要延时
- SDAT = CY;
- //delay();//同上
- SCLK = 1;
- //delay();//同上 }
- }
-
- //写入液晶屏数据,write lcd data。
- void wld(unsigned char dat)
- { unsigned char i;
- CS = 0;
- CD = 1;
- for(i=0; i<8; i++) {
- dat = dat << 1;
- SCLK = 0; //delay();//数据手册中的要求是保持时间大于100ns,51的速度比这个慢,可以不要延时
- SDAT = CY; //delay();//同上
- SCLK = 1; //delay();//同上
- }
- }
-
- //清屏void CleanLCD()
- { unsigned int i = 0;
-
- wlc(0xB0);
- wlc(0x00);
- wlc(0x10);
-
- CS = 0;
- CD = 1;
- SDAT = 0;
- SCLK = 0;
- while(i < 24576)
- {
- SCLK = ~SCLK ;
- i++; }
- }
代码发上来格式全乱了,大家复制到IDE里用自动对齐功能整理一下就行。VC,eclipse甚至一些功能比较丰富的编辑器都有这个功能。
下面是资料:
U盾LCD屏驱动相关文章:
教大家如何点亮建行网银盾的液晶屏2.0(以代码为主)
http://bbs.mydigit.cn/read.php?tid=1448258U盾DIY GPS万年历兼谈STC EEPROM的使用:
http://bbs.mydigit.cn/read.php?tid=1283320驱动U盾LCD屏---代码初步解析
http://bbs.mydigit.cn/read.php?tid=1374894坛友的 农行U盾液晶屏再利用DIY(附代码)
http://bbs.mydigit.cn/read.php?tid=1268821成功驱动农行超小U盾的屏幕,排线丝印FPC14570A
http://bbs.mydigit.cn/read.php?tid=1448992坛友的 建行e路通19264点阵屏改液晶模块,顺利点亮
http://bbs.mydigit.cn/read.php?tid=1235754教大家如何点亮建行网银盾的液晶屏(附代码指令)
http://bbs.mydigit.cn/read.php?tid=1295119成功驱动农行、工行U盾屏,排线丝印TSE1G6012或FPC-QFG12864
http://bbs.mydigit.cn/read.php?tid=1425394成功驱动工行U盾12864屏,排线丝印FM92031ACT6
http://bbs.mydigit.cn/read.php?tid=1425706成功驱动建行U盾19264点阵屏,但是逻辑分析仪抓的数据令人费解
http://bbs.mydigit.cn/read.php?tid=1443276分享stm32单片机驱动u盾液晶屏代码
http://bbs.mydigit.cn/read.php?tid=2275070