Arduino 驱动 2004 LCD

发布于: 27 January, 2014
分享:

 

#include <LiquidCrystal.h>

// my pinout from L (LCD pin) to A (Arduino pin): // LCD pin 1: Vss --> to Arduino GND // LCD pin 2: Vdd --> to Arduino +5V // LCD pin 3: V0 (contrast) --> to GND (I chose the PWM pin 10, see below) // LCD pin 4: RS (register select) --> to Arduino pin 11 // LCD pin 5: R/W- (read/write) --> to Arduino pin 2 // LCD pin 6: E (H/L enable) --> to Arduino pin 3 // LCD pin 7: DB0 (data bit 0) --> to Arduino PIN 4 // LCD pin 8: DB1 (data bit 1) --> to Arduino PIN 5 // LCD pin 9: DB2 --> to Arduino PIN 6 // LCD pin 10: DB3 --> to Arduino PIN 7 // LCD pin 11: DB4 --> to Arduino PIN 14 // LCD pin 12: DB5 --> to Arduino PIN 15 // LCD pin 13: DB6 --> to Arduino PIN 16 // LCD pin 14: DB7 --> to Arduino PIN 17 // LCD pin 15: A/Vee (backlight+) --> to a 4.2Vcc source (see documentation) // LCD pin 16: K (backlight-) --> to Arduino GND

LiquidCrystal lcd(11,2,3, 4,5,6,7, 14,15,16,17);

int contrast = 10; // PWM pin (contrast level) int led = 13; // LED pin (alive led)

char *boot = "(C) AlfonSoftWare Winstar 2004A KS0066" "InterNational 2009 Arduino Diecimila ";

void setup() // initialization { Serial.begin(115200);

pinMode(contrast, OUTPUT); pinMode(led, OUTPUT);

analogWrite(contrast, 0); // 0: maximum contrast 255: minimum digitalWrite(led, 1);

lcd.clear(); lcd.print(boot); }

void loop() // main loop { static int i=0, ctr=3; // led blinking section i = (i+1)&31; digitalWrite(led, i>ctr);

if(!Serial.available()) // no incoming text? { delay(15); return; }

static char pos[80] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, };

static int con[9] = { 0, 30, 60, 90, 120, 150, 180, 210 };

char buf[81], *ptr = buf, chr, flg = 0; int cur = 0; memset(buf, ' ', sizeof(buf)); buf[80] = '\0';

delay(15); // wait for all chars to be in (80 chars at 57600)

while(Serial.available() > 0) // for every character available: { chr = Serial.read(); // fetch next

if(chr == '\n')              // simulate carriage returns
{
  if(! flg)                  // ignore fake carriage returns
  {
    if(cur&lt;20) cur=20;       // from 1st to 2nd line
    else if(cur&lt;40) cur=40;  // from 2nd to 3rd line
    else if(cur&lt;60) cur=60;  // from 3rd to 4th line
  }
}
flg = 0;

if(chr &gt;= 1 &amp;&amp; chr &lt;= 9)     // contrast setting characters
{
  ctr = chr*3;
  analogWrite(contrast, con[chr-1]);
}

if(chr&lt;' ' || cur&gt;79)        // skip non-printable chars
  continue;                  // and out-of-area chars

buf[pos[cur++]] = chr;       // store character
if(!(cur % 20)) flg = 1;     // remember "end of line" condition

}

lcd.clear(); lcd.print(buf); // output the formatted screenshot

Serial.print(buf); // serial debug output Serial.print("\r\n\n"); }

 

分享:

0 留言

留言

您的留言将被人工审核,请勿发表色情、反动言论。