zjhyhky 发表于 2013-11-5 10:07:41

驱动ks0074的另类1602液晶实验记录

在淘宝上看到一种另类的1602,比普通1602多一行特殊图标,通过转接板和普通1602引脚兼容,价格很便宜只有四元多,就买了几片,没想到折腾了好几天才搞定,记录于此。
1.ks0074驱动的另类1602液晶


2.焊接好转接板,插上排线,用普通1602的四线驱动,显示不正常,需要对标准1602库做点改动,它的说明作为菜鸟表示看不懂,我自己搞了好久都不行,还是老板发我了Arduino驱动:


3.用该驱动接脚:7:rs    6:e    5:d4    4:d5    3:d6    2:d7    再加上电源、地、led电源线,程序附后,显示还是不正常,如下图:


4.无意中发现从底部斜视时可以看到显示字符的影子,正面看却是全部字符显示,那么应该是对比度的问题了。调整对比度:把液晶背板上的R7取下,此处换上5k电位器,调整,终于显示了!然后测出电阻值换上固定电阻。
记录:3.3v供电时此处接600-700左右的电阻显示效果正常,我接的是680欧姆。5v供电时此处接2.5k左右为好,我试接的是2k的,结果颜色还是稍深了一点。

5.如果用5v供电,led发热严重,需要加限流电阻,用1k电位器试了一下大约30欧姆左右即可,我是把led供电端通过47欧姆电阻接到Vcc。如果是3.3v供电,则直接把led供电端通过跳线接到Vcc。我买了四片,两片接成5v的给Uno用,两片接成3.3v的给mini pro用。

6.顺便说明:今天看老板店里有了新的转接板,板上带5k对比度调节电位器和led限流电阻,直接可用的成品,气死我了,上次买的是散件自己焊的,还没有这个可调电阻,显示不正常搞了好几天!

7.顺便猜测:按原来的商品说明,3.3v时应该是不需要修改硬件的,但实际上却需要调节对比度电阻才能正常显示,再结合这么低的价格,我怀疑就是因为元件的离散性导致显示不正常而被厂方检测淘汰下来的。

zjhyhky 发表于 2013-11-5 10:30:19

上面的附件里有驱动库和范例程序,我修改了一下把几个图标显示出来了,代码如下:/*7:rs
6:e
5:d4
4:d5
3:d6
2:d7
rw connect to gnd
*/
#include <lcd4bit.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:

lcd.begin(16, 2);
delay(5);
lcd.clear();
delay(5);
   lcd.setCursor(1, 0);
   delay(1);
// Print a message to the LCD.
lcd.print("hello,world!");
    lcd.setCursor(1, 1);
   lcd.print("test");
   delay(1);
lcd.command(0x28 | 0x04);//设定为图表显示模式
//delay(10);
//lcd.command(0x40+0x05);
//delay(10);
//lcd.write(0xff);
//delay(10);
   
   lcd.lcd_Icon(0x00,0x18);//天线信号
   lcd.lcd_Icon(0x01,0x09);//天线信号第五格
   lcd.lcd_Icon(0x04,0x05);//电池
   lcd.lcd_Icon(0x05,0xff);//menu
   lcd.lcd_Icon(0x09,0xff);//闹钟
   lcd.lcd_Icon(0x0b,0xff);//书本
   lcd.lcd_Icon(0x0d,0xff);//信封
   lcd.lcd_Icon(0x0f,0xff);//电话
   //lcd.lcd_Icon(0x03,0xff);
   lcd.command(0x28);//设定为字符显示模式
   //delay(1000);

   //lcd.setCursor(1, 0);
   //lcd.setRE();

   //lcd.lcd_Icon(0x09,0x15);
   //lcd.write(0x01);
}

void loop() {
   //set the cursor to column 0, line 1
   //(note: line 1 is the second row, since counting begins with 0):
//lcd.clear();
//lcd.setCursor(0, 1);
   //print the number of seconds since reset:
//lcd.print(millis()/1000);

}

zjhyhky 发表于 2013-11-5 10:35:26

图标符号的用法如下,注意信号和电池格数,我是一个一个试出来的:

   lcd.lcd_Icon(0x00,0x18);//天线信号
10000-0x10-天线
11000-0x18-1格
11100-0x1c-2格
11110-0x1e-3格
11111-0x1f-4格
   lcd.lcd_Icon(0x01,0x09);//天线信号第五格
天线第五格在第二段,0x10显示,0x09以下不显示
   lcd.lcd_Icon(0x04,0x05);//电池
0001-0x01-空电
0101-0x09-1格电
1101-0x0d-2格电
1111-0x0f-全满
   lcd.lcd_Icon(0x05,0xff);//menu
   lcd.lcd_Icon(0x09,0xff);//闹钟
   lcd.lcd_Icon(0x0b,0xff);//书本
   lcd.lcd_Icon(0x0d,0xff);//信封
   lcd.lcd_Icon(0x0f,0xff);//电话

shenhaiyu 发表于 2013-11-5 18:32:49

感谢分享~~~~这种lcd用在gsm模块开发挺有用的

thomas 发表于 2013-11-5 21:06:31

感谢分享!
给个链接吧,做个电话玩儿
页: [1]
查看完整版本: 驱动ks0074的另类1602液晶实验记录