cndavy

导航

 
/*
** Example Arduino sketch for SainSmart I2C LCD Screen 16x2
** based on https://bitbucket.org/celem/sainsmart-i2c-lcd/src/3adf8e0d2443/sainlcdtest.ino
** by
** Edward Comer
** LICENSE: GNU General Public License, version 3 (GPL-3.0)

** This example uses F Malpartida's NewLiquidCrystal library. Obtain from:
** https://bitbucket.org/fmalpartida/new-liquidcrystal

** Modified – Ian Brennan ianbren at hotmail.com 23-10-2012 to support Tutorial posted to Arduino.cc

** Written for and tested with Arduino 1.0
**
** NOTE: Tested on Arduino Uno whose I2C pins are A4==SDA, A5==SCL

*/
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x27 // <<----- Add your address here.  Find it from I2C Scanner
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
// Creat a set of new characters
const uint8_t charBitmap[][8] = {
{0x10,0x10,0xfd,0x10,0x7c,0x44,0x7c,0x44},
{0x7d,0x10,0xfe,0x10,0x10,0x10,0x10,0x10},
{0x20,0x20,0xfe,0x20,0x20,0xfc,0x20,0x20},
{0xfe,0x22,0x22,0x22,0x2a,0x24,0x20,0x20},
{0x01,0x01,0xef,0x01,0x07,0xc4,0x07,0x04},
{0xe7,0x21,0x2f,0x21,0xa1,0x41,0x01,0x01}, 
{0x02, 0x02, 0xdf, 0x02, 0xc2, 0x4f, 0xc2, 0x42},
 {0xdf, 0x02, 0xe2, 0x02, 0x02, 0x02, 0x02, 0x02}

};
/*
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },  
    { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },  
     { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },  
      { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 }, 
        { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },  
         { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },  
          { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 }, 
            { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }

};
*/
int n = 1;

LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  lcd.begin (16,2); //  <<----- My LCD was 16x2
 int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));
  for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home

  lcd.print("I2C16x2");
  lcd.setCursor (12,0);
   lcd.print (char(4));
   lcd.print (char(0));
   lcd.print (char(6));
     lcd.print (char(2));
     lcd.setCursor (12,1);
      lcd.print (char(5));
         lcd.print (char(1));
          lcd.print (char(7));
     lcd.print (char(3));
}

void loop()
{
  // Backlight on/off every 3 seconds
  lcd.setCursor (0,1);        // go to start of 2nd line
  lcd.print(n++,DEC);
  lcd.setCursor (10,1);
   lcd.print (char(random(7)));
  lcd.setBacklight(LOW);      // Backlight off
  delay(3000);
  lcd.setBacklight(HIGH);     // Backlight on
  delay(3000);
}

使用I2c链接lcd1602A ,下载较新的的库文件,使用I2cScaner 获得 地址为 0x27,随便做了姓氏的字模,不过没有考虑到字符时5*8,没有找到单独制作5*8点阵的软件,使用了八个自定义字符显示16*16的汉字,有些浪费。

总结,arduino下开发更加容易,因为有很多demo和先驱者

posted on 2013-11-30 09:05  cndavy  阅读(881)  评论(0编辑  收藏  举报