LCD დისპლეის დაკავშირება Arduino-სთან i2c-ის საშუალებით. LCM1602 LCD ეკრანის დაკავშირება I2C-თან Arduino-სთან

10.09.2021
  • FC-113 მოდული დაფუძნებულია PCF8574T ჩიპზე, რომელიც არის 8 ბიტიანი ცვლის რეესტრი- შეყვანისა და გამოსავლების „გამაფართოებელი“ ამისთვის სერიული ავტობუსი I2C. ფიგურაში, მიკროსქემა დანიშნულია DD1.
  • R1 არის მოპირკეთებული რეზისტორი LCD დისპლეის კონტრასტის რეგულირებისთვის.
  • Jumper J1 გამოიყენება ეკრანის განათების ჩასართავად.
  • ქინძისთავები 1…16 გამოიყენება მოდულის LCD ეკრანის ქინძისთავებთან დასაკავშირებლად.
  • მოწყობილობის I2C მისამართის შესაცვლელად საჭიროა საკონტაქტო ბალიშები A1...A3. შესაბამისი ჯემპერის შედუღებით, შეგიძლიათ შეცვალოთ მოწყობილობის მისამართი. ცხრილი გვიჩვენებს მისამართებისა და მხტუნავების შესაბამისობას: "0" შეესაბამება ღია წრეს, "1" დაყენებულ ჯემპერს. ნაგულისხმევად, სამივე ჯემპერი ღიაა და მოწყობილობის მისამართი 0x27.

2 LCD დისპლეის დაკავშირების დიაგრამა Arduino-სთან I2C პროტოკოლის საშუალებით

მოდული დაკავშირებულია Arduino-სთან, როგორც სტანდარტული I2C ავტობუსისთვის: მოდულის SDA პინი დაკავშირებულია ანალოგური პორტი A4, SCL pin - Arduino-ს ანალოგური A5 პორტისთვის. მოდული იკვებება +5 ვ-ით Arduino-დან. თავად მოდული დაკავშირებულია 1…16 ქინძისთავებით LCD დისპლეის შესაბამის 1…16 ქინძისთავებთან.


3 ბიბლიოთეკა სამუშაოდ I2C პროტოკოლის საშუალებით

ახლა ჩვენ გვჭირდება ბიბლიოთეკა LCD-თან მუშაობისთვის I2C ინტერფეისის საშუალებით. თქვენ შეგიძლიათ გამოიყენოთ, მაგალითად, ეს (ბმული "ჩამოტვირთეთ ნიმუშის კოდი და ბიბლიოთეკა").

გადმოწერილი არქივი LiquidCrystal_I2Cv1-1.rarგახსენით საქაღალდეში \ბიბლიოთეკები\, რომელიც მდებარეობს დირექტორიაში Arduino IDE.

ბიბლიოთეკა მხარს უჭერს აკრეფას სტანდარტული მახასიათებლები LCD ეკრანებისთვის:

ფუნქციამიზანი
თხევადი კრისტალი () ქმნის ტიპის ცვლადი LiquidCrystal და იღებს დისპლეის კავშირის პარამეტრებს (პინის ნომრებს);
დაწყება () LCD დისპლეის ინიციალიზაცია, პარამეტრების დაყენება (ხაზების რაოდენობა და სიმბოლოები);
ნათელი () ეკრანის გასუფთავება და კურსორის საწყის პოზიციაზე დაბრუნება;
სახლი () დააბრუნეთ კურსორი საწყის პოზიციაზე;
setCursor() კურსორის დაყენება მოცემულ პოზიციაზე;
დაწერე () აჩვენებს სიმბოლოს LCD ეკრანზე;
ბეჭდვა () აჩვენებს ტექსტს LCD ეკრანზე;
კურსორი () აჩვენებს კურსორს, ე.ი. შემდეგი სიმბოლოს ადგილის ქვეშ ხაზგასმა;
noCursor () მალავს კურსორს;
მოციმციმე () კურსორის მოციმციმე;
noBlink () ციმციმის გაუქმება;
არაჩვენება () ეკრანის გამორთვა ყველა ნაჩვენები ინფორმაციის შენახვისას;
ჩვენება () ეკრანის ჩართვა ყველა ნაჩვენები ინფორმაციის შენახვისას;
scrollDisplayLeft() გადაახვიეთ ეკრანის შიგთავსი 1 პოზიციაზე მარცხნივ;
scrollDisplayRight() გადაახვიეთ ეკრანის შიგთავსი 1 პოზიციაზე მარჯვნივ;
autoscroll() ჩართეთ ავტომატური გადახვევა;
noAutoscroll() ავტომატური გადახვევის გამორთვა;
მარცხნიდან მარჯვნივ () ადგენს ტექსტის მიმართულებას მარცხნიდან მარჯვნივ;
rightToLeft () ტექსტის მიმართულება მარჯვნიდან მარცხნივ;
createChar() ქმნის მორგებულ ხასიათს LCD ეკრანისთვის.

4 ესკიზი ტექსტის გამოსატანად LCD ეკრანზე I2C ავტობუსით

მოდით გავხსნათ ნიმუში: ფაილის ნიმუშები LiquidCrystal_I2C CustomCharsდა ჩვენ ცოტათი შევცვლით. ჩვენ გამოვაჩენთ შეტყობინებას, რომლის ბოლოს მოციმციმე სიმბოლო იქნება. კოდის კომენტარები კომენტარს აკეთებს ესკიზის ყველა ნიუანსზე.

#შეიცავს // მოიცავს Wire ბიბლიოთეკას #include // LCD ბიბლიოთეკის დაკავშირება #define printByte(args) write(args); // uint8_t გული = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // „გულის“ სიმბოლოს ბიტიანი ნიღაბი LiquidCrystal_I2C lcd(0x27, 16, 2); // დააყენეთ მისამართი 0x27 16x2 LCD ეკრანისთვის void setup() ( lcd.init(); // LCD დისპლეის ინიციალიზაცია lcd.backlight(); // ჩართეთ ეკრანის განათება lcd.createChar(3, გული); // შექმენით „გულის“ სიმბოლო მეხსიერების უჯრედში 3 lcd.home(); // მოათავსეთ კურსორი ზედა მარცხენა კუთხეში, პოზიციაზე (0,0) lcd.!"); // დაბეჭდეთ ტექსტის ხაზი lcd.setCursor(0, 1); // გადაიტანეთ კურსორი მე-2 სტრიქონზე, სიმბოლო 1 lcd.print( "i "); } void loop() (// ციმციმებს ბოლო სიმბოლოს lcd.setCursor(13, 1); // კურსორის გადატანა მე-2 სტრიქონზე, სიმბოლო 1 lcd.print("\t"); }

დაგვიანებით (500); lcd.setCursor(13, 1); // კურსორის გადატანა მე-2 სტრიქონზე, სიმბოლო 1 lcd.print(" ");დაგვიანებით (500);

5 სხვათა შორის, ბრძანებით დაწერილი სიმბოლოები lcd.createChar();

, რჩება ეკრანის მეხსიერებაში დენის გამორთვის შემდეგაც, რადგან დაწერილია ROM 1602-ის საჩვენებლად. შექმენით თქვენი საკუთარი სიმბოლოები LCD ეკრანისთვის {00000, 01010, 11111, 11111, 01110, 00100, 00000} მოდით, ცოტა უფრო დეტალურად განვიხილოთ LCD ეკრანებისთვის საკუთარი სიმბოლოების შექმნის საკითხი. ეკრანზე თითოეული სიმბოლო შედგება 35 წერტილისგან: 5 სიგანე და 7 მაღალი (+1 სარეზერვო ხაზი ხაზგასმისთვის). ზემოთ მოყვანილი ესკიზის მე-6 სტრიქონში ჩვენ განვსაზღვრავთ 7 რიცხვის მასივს:

6 (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). გადაიყვანეთ თექვსმეტობითი რიცხვები ორობითად:

. ეს რიცხვები სხვა არაფერია, თუ არა ბიტი ნიღბები სიმბოლოს 7 სტრიქონიდან თითოეულისთვის, სადაც "0" აღნიშნავს ნათელ წერტილს და "1" ბნელ წერტილს. მაგალითად, ბიტმასკის სახით მითითებული გულის სიმბოლო გამოჩნდება ეკრანზე, როგორც ნაჩვენებია სურათზე.


7 LCD ეკრანის კონტროლი I2C ავტობუსით

როგორც ბონუსი, მოდით შევხედოთ LCD ეკრანზე ლათინური სიმბოლოების "A", "B" და "C" ჩვენების დროის დიაგრამას. ეს სიმბოლოები ინახება დისპლეის ROM-ში და ნაჩვენებია ეკრანზე უბრალოდ მათი მისამართების ეკრანზე გადაცემით. დიაგრამა აღებულია დისპლეის RS, RW, E, D4, D5, D6 და D7 ქინძისთავებიდან, ე.ი. უკვე FC-113 "I2C პარალელური ავტობუსის" გადამყვანის შემდეგ. შეიძლება ითქვას, რომ ჩვენ ცოტა უფრო ღრმად ვართ ჩაძირული აპარატურაში.


ლათინური სიმბოლოების "A", "B" და "C" გამომავალი დროის დიაგრამა LCD ეკრანზე 1602

დიაგრამა გვიჩვენებს, რომ სიმბოლოები, რომლებიც დისპლეის ROM-შია (იხ. გვერდი 11 მონაცემთა ცხრილის, ბმული ქვემოთ) გადაცემულია ორ წიაღში, რომელთაგან პირველი განსაზღვრავს ცხრილის სვეტის ნომერს, ხოლო მეორე - რიგის ნომერს. ამ შემთხვევაში, მონაცემები "ჩაკეტილია" ხაზის სიგნალის კიდეზე (ჩართვა) და ხაზი რ.ს.(რეგისტრაცია აირჩიეთ) არის ლოგიკურ ერთ მდგომარეობაში, რაც ნიშნავს მონაცემთა გადაცემას. RS ხაზის დაბალი მდგომარეობა ნიშნავს ინსტრუქციების გაგზავნას, რასაც ვხედავთ თითოეული სიმბოლოს გადაცემამდე. ამ შემთხვევაში, ვაგონის დაბრუნების ინსტრუქციის კოდი გადაეცემა LCD დისპლეის პოზიციაზე (0, 0), რომლის გარკვევა ასევე შესაძლებელია შესწავლით. ტექნიკური აღწერაჩვენება.

და კიდევ ერთი მაგალითი. ეს დროის დიაგრამა აჩვენებს გულის სიმბოლოს გამომავალს LCD ეკრანზე.


ისევ პირველი ორი იმპულსი ჩართვაშეასრულოს ინსტრუქციები მთავარი ()(0000 0010 2) - დააბრუნეთ ვაგონი პოზიციაზე (0; 0), ხოლო მეორე ორი - გამომავალი LCD ეკრანზე, რომელიც ინახება მეხსიერების უჯრედში 3 10 (0000 0011 2) სიმბოლო „გული“ (ინსტრუქცია lcd.createChar(3, გული);ესკიზი).

ამ სტატიაში მე გეტყვით, თუ როგორ გამოიყენოთ I2C ინტერფეისის მოდული LCD კონტროლიეკრანი (2×16 / 20x4) ერთად Arduino-ს გამოყენებით. ეს მოდული საშუალებას გაძლევთ შეამციროთ გამოყენებული კონტროლერის რაოდენობა 8 ან 4-ბიტიანი კავშირის ნაცვლად, საჭიროა მხოლოდ 2 პინი (SDA და SCL).

ტექნიკური პარამეტრები

ეკრანის მხარდაჭერა: LCD 16×02 / 20×04
სურვილისამებრ: კონტრასტის რეგულირება
მიწოდების ძაბვა. 5 ვ
ინტერფეისი: I2C
ზომები: 54 მმ x 19 მმ x 15 მმ

ზოგადი ინფორმაცია I2C ინტერფეისის მოდულის შესახებ

ვინაიდან Arduino კონტროლერებზე ქინძისთავები შეზღუდულია და ხშირად გამოიყენება სხვადასხვა სენსორებიდა მათ ამოეწურებათ მოდულები, საჭიროა მათი შენახვა, ამ შემთხვევებისთვის შეიქმნა ეს მოდული, მისი დახმარებით შეგიძლიათ განახორციელოთ გადაცემა ორ კონტაქტზე (SDA და SCL).

ახლა ცოტათი თავად მოდულის შესახებ ის აგებულია PCF8574T ჩიპზე. რეზისტორები R8 (4,7 kOhm) და R9 (4,7 kOhm) აუცილებელია SDA და SCL ხაზების ასასვლელად, იდეალურ შემთხვევაში, I2C ავტობუსის მეშვეობით ორი ან მეტი მოწყობილობის დასაკავშირებლად, თქვენ უნდა გამოიყენოთ აწევა მხოლოდ ერთ მოწყობილობაზე, I. მოგვიანებით დავწერ რატომაც. დაფაზე არის სამი ჯემპერი (დიაგრამაზე ნაჩვენებია, რომ ხაზები A0, A1, A2 დაკავშირებულია კვების წყაროსთან R4, R5, R6 რეზისტორების საშუალებით), ისინი საჭიროა მოწყობილობის მისამართის შესაცვლელად, სულ არის 8 ვარიანტი. . მისამართის შეცვლა გვაძლევს IC2 ავტობუსის მეშვეობით PCF8574T ჩიპთან დაკავშირების შესაძლებლობას (ნაგულისხმევი მოწყობილობის მისამართია 0x27). მოდული ასევე აღჭურვილია პოტენციომეტრით R11, მისი დახმარებით შეგიძლიათ შეცვალოთ LCD დისპლეის კონტრასტი.

დასაკავშირებლად მოდულზე არის კონტაქტების სამი ჯგუფი:

პირველი ჯგუფი:
SCL: სერიული საათი
SDA: მონაცემთა ხაზი (სერიული Dфta)
VCC: "+" სიმძლავრე
GND: "-" კვების წყარო

მეორე ჯგუფი:
VSS: "-" სიმძლავრე
VDD: "+" სიმძლავრე
VO: კონტრასტის კონტროლის პინი
RS: რეგისტრაცია აირჩიეთ
RW: წაკითხვა/ჩაწერა (ჩაწერის რეჟიმი მიწასთან დაკავშირებისას)
E: ჩართვა (დაცემა strobe)
DB0-DB3: ინტერფეისის დაბალი ბიტები
DB4-DB7: ინტერფეისის მაღალი ბიტები
A: "+" განათების კვების წყარო
K: "-" განათების ძალა

მესამე ჯგუფი: (ჯუმპერი დაყენებულია ნაგულისხმევად)
VCC:
A LCD-დან:

არდუინოსთან დაკავშირება

საჭირო ნაწილები:
Arduino UNO R3 x 1 ც.
LCD დისპლეი 1602A (2×16, 5V, ლურჯი) x 1 ც.
ინტერფეისის მოდული I2C, IIC, TWI LCD x 1 ც.
DuPont მავთული, 2.54 მმ, 20 სმ, F-M (ქალი - მამრობითი) x 1 ც.
USB კაბელი 2.0 A-B x 1 ც.

კავშირი:
უპირველეს ყოვლისა, ჩვენ ვამაგრებთ I2C მოდულს LCD ეკრანზე, შემდეგ თქვენ უნდა დააკავშიროთ დისპლეი Arduino UNO-ს. ამისათვის ჩვენ გამოვიყენებთ DuPont გაყვანილობას, რომელსაც ვუკავშირდებით ქვემოთ მოცემული ცხრილის მიხედვით.

სიცხადისთვის მე მივცემ სხვა დიაგრამას.

ამ ექსპერიმენტისთვის, თქვენ უნდა ჩამოტვირთოთ და დააინსტალიროთ „LiquidCrystal_I2C“ ბიბლიოთეკა. შემდეგ დააკოპირეთ და ჩასვით ეს მაგალითი კოდი Arduino IDE პროგრამის ფანჯარაში და ჩატვირთეთ იგი კონტროლერში.

/* ტესტირება Arduino IDE 1.6.11 ტესტის თარიღი 09/15/2016 */ #შეიცავს #შეიცავს LiquidCrystal_I2C LCD (0x27,16,2); // ეკრანის მისამართის და ზომის დაყენება void setup() ( lcd.init(); // lcd lcd.backlight(); // ჩართეთ უკანა განათება lcd.setCursor(0,0); // დააყენეთ კურსორი 1 სტრიქონის დასაწყისში lcd .print("Hello, world" // ამობეჭდეთ ტექსტი lcd.setCursor(0,1) დააყენეთ კურსორი 2-ის დასაწყისში lcd.print("www.); robotchip.ru"); // ტექსტის ამობეჭდვა) void loop() ()

ჩამოტვირთეთ პროგრამა

თუ ყველაფერი სწორად გააკეთეთ, მაგრამ ეკრანზე სიმბოლოები არ არის, სცადეთ კონტრასტის გაზრდა პოტენციომეტრით.


ბმულები
ჩამოტვირთეთ LiquidCrystal_I2C ბიბლიოთეკა
დოკუმენტაცია PCF8574T ჩიპისთვის
დოკუმენტაცია LCD1602A-სთვის

შეიძინეთ Aliexpress-ზე

ალბათ ერთ-ერთი ყველაზე პოპულარული ეკრანი ბაზარზე. აგებულია პოპულარულ HD44780U კონტროლერზე. მოდელის სახელიდან გამომდინარეობს, რომ ეკრანი შედგება 16 სიმბოლოსგან შემდგარი ორი ხაზისგან. ამ კონკრეტულ მოდელში რუსული ენის მხარდაჭერა არ არის.

sh2s მონაცემთა ავტობუსი საშუალებას გაძლევთ დააკავშიროთ 127-მდე მოწყობილობა ორი მავთულის საშუალებით, ერთდროულად. ეს I2C დანერგილია PCF8574T ჩიპზე.

კავშირის დიაგრამა:

ცისფერი რამ - ცვლადი წინააღმდეგობა, საშუალებას გაძლევთ დაარეგულიროთ ეკრანის კონტრასტი.

მარცხნივ ჯუმპერი პასუხისმგებელია ეკრანის განათებაზე.

4 კონტაქტის ბლოკი დაკავშირებულია არდუინოსთან ასე:

GND - GND
VCC - 5V
SDA - A4 (თუ Arduino MEGA, მაშინ D20-ზე)
SCL - A5 (თუ Arduino MEGA, შემდეგ D21-ზე)

ბიბლიოთეკა

ესკიზი

ეკრანს შეიძლება ჰქონდეს განსხვავებული IIC მისამართი, 0x27-ის ნაცვლად შეიძლება იყოს 0x3F. მისამართის ზუსტად დასადგენად, შეგიძლიათ გამოიყენოთ i2c მოწყობილობის სკანერი.

#შეიცავს #შეიცავს //დააყენეთ LCD ეკრანის მისამართი 0x27, 16 სიმბოლო, 2 ხაზი LiquidCrystal_I2C LCD (0x27, 16, 2); void setup() ( lcd.init(); // ეკრანის ინიციალიზაცია //ჩართეთ უკანა განათება LCD.backlight(); //დააყენეთ პოზიცია, საიდანაც გამოჩნდება ტექსტი. lcd.setCursor(2, 0); //გამომავალი ხაზი 1 lcd.print ("გამარჯობა, მსოფლიო!"); //დაბეჭდე მეორე სტრიქონი იმავე გზით lcd.setCursor(1, 1);

lcd.print ("www.site"); ) void loop () ( ) მე მივიღე სხვა მოწყობილობა აქ Chip Resistor-ის კარგი მაღაზიიდან შესასწავლად და გამოსაყენებლადსასარგებლო მოწყობილობები

. აღმოჩნდა, რომ ეს მოწყობილობა შექმნილია LCD დისპლეის გასაკონტროლებლად, რომელსაც აკონტროლებს HD44780 კონტროლერი, 4 ბიტიან რეჟიმში. ამ მიზნით დაფაზე დამონტაჟებულია მიკროსქემა, რომელიც წარმოადგენს I2C ავტობუსის გადამყვანს პარალელურ 8-ბიტიან პორტში.

დაფა ისეა გადაყვანილი, რომ შეიძლება დაუყოვნებლივ დაუკავშირდეს LCD ეკრანს. შეყვანა აწვდის დენის და I2C ხაზებს. დაფა დაუყოვნებლივ აღჭურვილია ასაწევი რეზისტორებით SCL და SDA ხაზებზე, კონტრასტის რეგულირების პოტენციომეტრით და თავად დისპლეის ელექტრომომარაგებით. მარცხნივ ჯუმპერი რთავს/გამორთავს უკანა განათებას. შემდეგ, ტესტერით შეიარაღებული, შედგენილია შემდეგი ცხრილი. მოდულის შესწავლის შემდეგ გაირკვა, რომაკონტროლებს უკანა განათებას. თუ ჯუმპერი დამონტაჟებულია, მაშინ 1 ჩართავს უკანა განათებას და 0 გამორთავს მას. როდესაც ჯუმპერი ამოღებულია, უკანა განათება ყოველთვის გამორთულია. შემდეგი, გადაწყდა axlib ბიბლიოთეკის შევსება I2C ავტობუსთან მუშაობის ფუნქციებით (პროგრამული უზრუნველყოფის განხორციელება) და PCF8574 ჩიპის კონტროლის ფუნქციებით. მოკლედ, როგორ მუშაობს მოდული. ბაიტის პარალელურად გამოსასვლელად, თქვენ უნდა გაგზავნოთ მიკროსქემის მისამართი I2C ავტობუსში (ნაგულისხმევად ეს არის 0x4E. ასევე შეგიძლიათ შეცვალოთ მისამართი დაფაზე ჯემპერების შედუღებით და სამი ყველაზე ნაკლებად მნიშვნელოვანის მნიშვნელობის შეცვლით. მისამართის ბიტი), შემდეგ ACK-ის მიღების შემდეგ იგზავნება მონაცემთა ბაიტი. მას შემდეგ, რაც ჩიპი პასუხობს ACK-ით, ბაიტი გამოჩნდება ჩიპის პარალელურ პორტზე. LCD დისპლეის გასაკონტროლებლად, მე ავიღე ფუნქციები axlib ბიბლიოთეკიდან და ოდნავ შევცვალე ისინი I2C ავტობუსთან მუშაობისთვის. #შეიცავს #შეიცავს #შეიცავს #შეიცავს #define ADD 0x4E // ჩიპის მისამართი /* LCD ჩიპი RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 არის უკანა განათება კავშირის ფეხზე P3. 1 ჩართული, 0 გამორთული */ // გამომავალი მონაცემები com |= 0x04; // ე ერთეულზე pcf8574_byte_out (com, ADD); // გამომავალი მონაცემები com &= 0xFB; // E ნულამდე pcf8574_byte_out (com, ADD); // გამომავალი მონაცემები) void init(void) ( _delay_ms(30); com (0x30); _ დაგვიანებით_ჩვენ(40); com (0x30); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x30); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x20); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x20); // პარამეტრების დაყენება com (0x80); // პარამეტრების დაყენება com (0x00); // გამორთეთ ჩვენება com (0x80); // გამორთეთ ჩვენება com (0x00); // ეკრანის გასუფთავება com (0x10); // ეკრანის გასუფთავება com (0x00); com (0x60); // დააყენეთ მონაცემთა შეყვანის რეჟიმი com (0x00); com (0xC0); // ჩართეთ ეკრანი არჩეული კურსორით) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტი data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტი // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტი // დაბალი 4 ბიტის გადაცემა // დაბალი 4 ბიტის გადაცემა // დაბალი 4 ბიტის გადაცემა) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) (init(); str_out("ЁPҐBET MҐP!" ხოლო (1) ( ) )ზუსტად რა ხდება აქ. ჯერ ჩვენ ვაკავშირებთ ბიბლიოთეკებს I2C-სთვის და PCF8574-ისთვის. მე უკვე დავწერე I2C-ის შესახებ, ამიტომ გავაგრძელებ და გავაგრძელებ, მაგრამ გეტყვით რა არის PCF8574.h-ში. ბიბლიოთეკა მოიცავს მხოლოდ სამ ფუნქციას.
BYTE pcf8574_test(BYTE დამატება) (BYTE შეკითხვა = ACK; დამატება &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); დაბრუნება თხოვნა; )პირველი ფუნქცია დაიწერა იმის შესამოწმებლად, არის თუ არა მოწყობილობა ავტობუსში. პრინციპში, მისი გამოყენება შესაძლებელია ავტობუსში მდებარე ნებისმიერი მოწყობილობის მოსაძებნად. ფუნქცია იღებს სასურველი მოწყობილობის მისამართს და თუ ის პასუხობს, აბრუნებს ნულს. თუ ასეთი მისამართის მოწყობილობა ავტობუსში არ არის, ის დააბრუნებს.
BYTE pcf8574_byte_out (BYTE მონაცემები, BYTE დამატება) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); i2c_stop(); )ეს ფუნქცია უკვე მორგებულია მხოლოდ ამ ჩიპისთვის. არგუმენტად მას ეძლევა ავტობუსში გადასატანი ბაიტი და ჩიპის მისამართი. ფუნქცია ჯერ ითხოვს ჩიპს მისამართის მიხედვით და შემდეგ გაგზავნის ბაიტს. თუ ჩიპმა მიიღო ბაიტი და უპასუხა ACK-ით, მაშინ ფუნქცია დაასრულებს მუშაობას ჩიპთან და დააბრუნებს ნულს, როგორც ბაიტის წარმატებულ გაგზავნას. და ამ დროს მიკროცირკული გამოსცემს ამ ბაიტს თავის პარალელურ პორტში. წინააღმდეგ შემთხვევაში, ჩვენ მივიღებთ NACK-ს და დავაბრუნებთ ერთს, გადაცემა ვერ მოხერხდა.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE add) ( BYTE ask = ACK; დამატება &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i ეს ფუნქცია შექმნილია ექსპერიმენტებისთვის. იღებს მაჩვენებელს ერთ ბაიტიანი მონაცემების მასივზე, ამ ბაიტების რაოდენობასა და ჩიპის მისამართზე. სინამდვილეში, ყველა მონაცემის გადაცემის მცდელობა ერთ სესიაში და არა ერთ ბაიტში თითო სესიაზე. ფუნქცია მუშაობს, მაგრამ არ არის შესაფერისი LCD ეკრანისთვის. ახლა დავუბრუნდეთ მთავარ პროგრამას. ბიბლიოთეკების შეერთების შემდეგ ვწერთ მიკროსქემის მისამართს. შემდეგი, ჩვენ ვქმნით lcd.h-ის მსგავს სამ ფუნქციას. განსხვავება მხოლოდ მონაცემთა გადაცემის პრინციპშია.
void com(BYTE com) ( com |= 0x08; // P3 ერთზე ისე, რომ უკანა განათება იყოს ჩართული pcf8574_byte_out (com, ADD); // გამომავალი მონაცემები com |= 0x04; // ე ერთეულზე pcf8574_byte_out (com, ADD); // გამომავალი მონაცემები com &= 0xFB; // E ნულამდე pcf8574_byte_out (com, ADD); // გამომავალი მონაცემები } ეს ფუნქცია მხოლოდ ეკრანზე აგზავნის ბრძანებებს. სწორედ აქ გამოჩნდა პირველი ხაზი 0x08 ბრძანების ლოგიკური დამატებით. ეს ხარვეზი საჭიროა იმის გამო, რომ ჩვენ გადავცემთ ბაიტს არა პირდაპირ LCD ეკრანის პორტში, არამედ ჩვენი განმეორებით. ანუ, თუ ჩვენ მივაწოდეთ ბაიტი, შემდეგ კი მხოლოდ ერთი ბიტი უნდა გამოვიტანოთ, გთხოვთ, წინა ბაიტს მიაკუთვნოთ საჭირო ბიტი და ისევ გაგზავნოთ პორტში. ეს ისეთი უბედურებაა. 0x08-ით დამატება აუცილებელია იმისათვის, რომ მუდმივად შეინახოთ ერთი მესამე ციფრში. გახსოვთ უკანა განათება? ეს არის ეს დამატება, რომელიც რთავს უკანა განათებას. შემდეგ ჩვენ ვუწოდებთ ავტობუსში ბაიტის გადაცემის ფუნქციას. ამაზე წერია ზემოთ. შემდეგ ბაიტს ავტობუსის საშუალებით გადავიტანთ ჩიპზე. შემდეგი, თქვენ უნდა დააყენოთ E ერთზე, რასაც რეალურად აკეთებს 0x04 ბაიტის ლოგიკური დამატება. E-ს გადატვირთვის შემდეგ, თქვენ შეგიძლიათ გამოაგზავნოთ ნებისმიერი ბრძანება ეკრანზე მხოლოდ თავად ბრძანების არგუმენტად გადაცემით. void init(void) ( _delay_ms(30); // პაუზა ჩართვის შემდეგ com (0x30); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x30); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x30); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x20); // 4-ბიტიან რეჟიმში გადართვა _ დაგვიანებით_ჩვენ(40); // ბრძანების შესრულების დაყოვნება com (0x20); // პარამეტრების დაყენება com (0x80); // პარამეტრების დაყენება com (0x00); // გამორთეთ ჩვენება com (0x80); // გამორთეთ ჩვენება com (0x00); // ეკრანის გასუფთავება com (0x10); // ეკრანის გასუფთავება com (0x00); // დააყენეთ მონაცემთა შეყვანის რეჟიმი com (0x60); // დააყენეთ მონაცემთა შეყვანის რეჟიმი com (0x00); // ჩართეთ ეკრანი არჩეული კურსორით com (0xC0); // ჩართეთ ეკრანი არჩეული კურსორით } ეს ფუნქცია მხოლოდ ეკრანის ინიციალიზაციას ახდენს. ბრძანებების თანმიმდევრობა აღებულია LCD დისპლეის მონაცემთა ფურცლიდან. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტი data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტიმონაცემები_სთ &= 0xF9; // გადაიტანეთ ყველაზე მნიშვნელოვანი 4 ბიტი pcf8574_byte_out (data_h, ADD); // დაბალი 4 ბიტის გადაცემა pcf8574_byte_out(data_l, ADD); // დაბალი 4 ბიტის გადაცემამონაცემები_ლ |= 0x04; // დაბალი 4 ბიტის გადაცემა } pcf8574_byte_out(data_l, ADD); data_l &= 0xF9; pcf8574_byte_out(data_l, ADD);

ეს ფუნქცია გადასცემს მონაცემებს LCD ეკრანზე. იგი შესრულებულია ისევე, როგორც ბრძანებები, გარდა იმისა, რომ ბაიტი გადაიცემა ჯერ ყველაზე მნიშვნელოვანი ნისკარტით, შემდეგ კი დაბალი ბაიტით. და დანარჩენი იგივეა.

void str_out (BYTE *str) ( while((*str) != "\0") (char_out(*str); str++; ) )

კარგად, ეს ფუნქცია არის მხოლოდ სტრიქონის ეკრანზე გადასაცემად. ფაქტობრივად, ამას ჩვენს თემასთან არანაირი კავშირი არ აქვს.

პროექტი AtmelStudio 6.2-ისთვის

კომპეტენტური 01.08.15 17:11

მძიმით აკლია. მართალია: "HELLO WORLD!" და ეს მოწყობილობა განკუთვნილია არა მხოლოდ HD44780-ისთვის. ასაწევი რეზისტორები დამონტაჟებულია სამაგისტრო მხარეს. სპეციფიკაციის მიხედვით, LCD კონტროლერზე მონაცემები იწერება დაცემის E მიმართულებით. აქედან გამარტივებულია პირველი ფუნქცია: void com(BYTE com) ( com |= 0x08; // backlight pcf8574_byte_out(com | 0x04, ADD); // მონაცემთა გამომავალი pcf8574_byte_out(com , ADD // E to zero) და დანარჩენი ასევე შეიძლება იყოს მნიშვნელოვნად ნაკლები. მაგალითად, void char_out (BYTE მონაცემები) მიიღებს მხოლოდ ორ ზარს და მით უმეტეს დამატებითი ცვლადების გარეშე. LCD ინიციალიზაცია განხორციელდა დროის სპეციფიკაციების დარღვევით.

ალექსეი 02.08.15 19:11

გამოტოვებული მძიმის გამო, ეკრანი არ იმოქმედებს. ეს მოწყობილობა სპეციალურად შექმნილია ამ ან მსგავსი კონტროლერის მქონე ეკრანებისთვის. მაგრამ ეს მიკროსქემა მართლაც მარტივი პორტის გამაფართოებელია. ვეთანხმები ე. საჭიროა დამატებითი ცვლადები. თუ არგუმენტს გადასცემთ ფუნქციას და შეასრულებთ გარკვეულ მოქმედებებს ლოგიკით, შეიძლება მოხდეს ხარვეზები. ამას უკვე შევხვდი. ინიციალიზაცია ხორციელდება ვადების დარღვევის გარეშე. დოკუმენტაციაში ნათქვამია, რომ ბრძანებებს შორის არის 40 μs პაუზა. იმის გამო, რომ გადარიცხვა ხდება i2c ავტობუსით, რომელიც თავის მხრივ პროგრამული და ნელია, პერიოდები ინტერესით სრულდება. თუ მაინცდამაინც ძალიან არ გეზარებათ დაწერეთ თქვენი ვერსია და გამომიგზავნეთ. გამოვაქვეყნებ. საბოლოო ჯამში, ეს საიტი განკუთვნილია მოყვარული აუდიტორიისთვის და ნებისმიერ მსურველს შეუძლია გამოხატოს თავისი აზრი და ხედვა MK-ის ცხოვრებაზე.

ალექსეი 06.08.15 09:14

დამატებულია დროები ეკრანის ინიციალიზაციისას, როგორც ეს აღნიშნა პატივცემულმა "Literate"-მა

დიმიტრი 14.06.16 21:57

რუსლან 21.12.16 19:54
ალექსეი 21.12.16 21:53

ოჰ დიახ. განსაკუთრებით კოდი ASMA-ში. Arduino-ს ექსპერტები დააფასებენ მას სრულად)))

Py.sy.
მაშინაც კი, თუ თქვენ არ უყურებთ ASM-ს, პროგრამა იქ არის დაწერილი PIC კონტროლერისთვის. არის ეს „ძალიან“ სასარგებლო ინფორმაცია AVR სპეციალისტებისთვის? განსაკუთრებით დამწყებთათვის))) PIC-ის საწინააღმდეგო არაფერი მაქვს, მაგრამ PIC-ისა და AVR-ის ASM-იც კი განსხვავებულია. რაც შეეხება LCD დისპლეის მუშაობის დეტალებს, შეგიძლიათ გადახედოთ))) მართალია, CVAVR-ის ქვეშაც დავწერე, მაგრამ ყველა ბრძანება იშლება და დალაგებულია თაროებზე. მაგრამ ნებისმიერ შემთხვევაში, თავად გადაწყვიტეთ სად წერია უფრო გარკვევით))) ავტორი წერს, მკითხველი ირჩევს.

GeK 01/04/17 12:52

"ჩიპის I2C მისამართი (ნაგულისხმევად არის 0x4E"

მისამართის ყველაზე მნიშვნელოვანი 4 ბიტი ფიქსირდება,
PCF8574-ის პრეფიქსი არის 0100, ხოლო PCF8574A-სთვის არის 0111
ქვედა 3 ბიტი დამოკიდებულია ჩიპის A2-A0 შეყვანის მდგომარეობაზე. ნაგულისხმევად, სამივე ჯემპერი ღიაა, შესაბამისად, ჩიპის მისამართი იღებს მნიშვნელობას 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

ალექსეი 01/04/17 14:27

რაღაც აირია.
ამონაწერი მიკროსქემის დოკუმენტაციისგან

0b01001110 არის 0x4E
ასე რომ აქ ყველაფერი სწორია. და თუ თქვენ გჭირდებათ მისამართის შეცვლა, თქვენ უბრალოდ უნდა შეცვალოთ იგი Define-ში.

იური 14.12.17 21:26

კარგი დღე! ასევე შეგიძლიათ გამოიყენოთ lcdgotoxy და lcdclear ფუნქციის კოდი PCF8574 ადაპტერთან მუშაობისთვის.

ალექსანდრე 05.20.18 18:14

კარგი დღე! როგორ აწარმოებთ რუსულ ტექსტს?

ალექსეი 05.20.18 23:04

ეს არის შიდა ჩვენება MELT-ისგან. კირილიცა ჩართულია მის მეხსიერებაში.

ალექსანდრე 21.05.18 04:55

კარგი დღე! მე ვწერ, როგორც თქვენ, AtmelStudio 6.2-ის პროექტში "ЁPҐBET MҐP!" გამოდის ჩვეულებრივად
და თუ დაწერ "HELLO WORLD!" გამოაქვს ყველანაირი სისულელე. ორი მყავს
ეკრანის ერთ-ერთ ვარიანტს აქვს კირიული ანბანი. მეორე არის ჩინური.

ალექსეი 05/21/18 09:22

ჯერ სატესტო პროგრამას დავწერდი. იმეორებს მთელ მეხსიერებას და აჩვენებს სიმბოლოებს და მათ მისამართებს. და მერე გაარკვიე რა პრობლემაა. სავარაუდოდ, სიმბოლოების ცხრილი არ ემთხვევა ასციების ცხრილს.

ანდრეი 09/03/18 08:32

კარგი დღე!

შეგიძლიათ მოგვაწოდოთ პროტეუსის მიკროსქემის დიაგრამა?

ანდრეი 09/03/18 10:22

ანუ პროტეუსზე არავის შეუმოწმებია?

ანდრეი 09/03/18 10:56

გაარკვია main_init

პაველი 30.05.19 23:35

საინტერესოა, დისპლეის მისამართი არის 0x4E და თუ იგივე დისპლეი უკავშირდება Arduino-ს, მაშინ მისამართი არის 0x27.

პაველი 31.05.19 11:04

დიდი მადლობა თქვენი მუშაობისთვის! მთელი ინტერნეტი მოვიძიე და არცერთმა მოყვანილმა მაგალითმა შენი გარდა არ იმუშავა. ერთადერთი ის არის, რომ პროექტის არქივში _delay_ დაგვიანებები არ არის მითითებული ჩვენების ინიციალიზაციის ფუნქციაში და შესაბამისად ის არ მუშაობს.

ალექსეი 06/01/19 09:52

ისე, ეს უფრო საჩვენებელი პროექტია. კარგი მიზეზის გამო, axlib ბიბლიოთეკა უნდა გადაიწეროს, მაგრამ იმის გათვალისწინებით, რომ STM32 და STM8 მოძრაობენ ნახტომებით, AVR-ს აზრი არ აქვს.

პაველი 06/05/19 12:57

STM-ს არ აქვს DIP პაკეტები, უფრო რთულია ბეჭდური მიკროსქემის დაფების დამზადება. ჩემი პროექტებისთვის, AVR-ის შესაძლებლობები უამრავია, შეგიძლიათ ბევრი მორგება ერთ Atmega 8-ზე

ალექსეი 06/05/19 15:20

კი მაგრამ Atmega8 და stm8s003 რა ღირს)))

დიმიტრი 06/07/19 00:41

გამარჯობა, ალექსეი.
გთხოვთ მითხრათ როგორ წავიკითხო პორტის სტატუსი pcf8574-დან?
მინდა გავაკეთო გარე ერთეული, 8 GPIO i2c ავტობუსზე - ეს არის ის.

დიმიტრი 06/07/19 17:56

მე თვითონ გიპასუხებ
ფუნქცია აბრუნებს ბაიტს - მიკროსქემის პორტების მდგომარეობას
uint8_t pcf8574_byte_rcv(uint8_t adr)
{
uint8_t ask = ACK;
addr |= 0b01; //წაიკითხე
uint8_t მონაცემები=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

დაბრუნების მონაცემები;
}

პაველი 06/07/19 20:37

რა ღირს, 150 მანეთი, ზოგადად რელეს ფასში) და STM-სთვის დაფებს როგორ აკეთებთ? LUT არასანდოა, CNC როუტერი არ არის დარწმუნებული რა დასჭირდება (არ გამომიცდია)

  • FC-113 მოდული დაფუძნებულია PCF8574T ჩიპზე, რომელიც არის 8-ბიტიანი ცვლის რეგისტრი - შემავალი-გამომავალი „გაფართოება“ I2C სერიული ავტობუსისთვის. ფიგურაში, მიკროსქემა დანიშნულია DD1.
  • R1 არის მოპირკეთებული რეზისტორი LCD დისპლეის კონტრასტის რეგულირებისთვის.
  • Jumper J1 გამოიყენება ეკრანის განათების ჩასართავად.
  • ქინძისთავები 1…16 გამოიყენება მოდულის LCD ეკრანის ქინძისთავებთან დასაკავშირებლად.
  • მოწყობილობის I2C მისამართის შესაცვლელად საჭიროა საკონტაქტო ბალიშები A1...A3. შესაბამისი ჯემპერის შედუღებით, შეგიძლიათ შეცვალოთ მოწყობილობის მისამართი. ცხრილი გვიჩვენებს მისამართებისა და მხტუნავების შესაბამისობას: "0" შეესაბამება ღია წრეს, "1" დაყენებულ ჯემპერს. ნაგულისხმევად, სამივე ჯემპერი ღიაა და მოწყობილობის მისამართი 0x27.

2 LCD დისპლეის დაკავშირების დიაგრამა Arduino-სთან I2C პროტოკოლის საშუალებით

მოდული უკავშირდება Arduino-ს სტანდარტული გზით I2C ავტობუსისთვის: მოდულის SDA პინი უკავშირდება ანალოგურ პორტს A4, SCL პინი უკავშირდება Arduino-ს ანალოგურ პორტს A5. მოდული იკვებება +5 ვ-ით Arduino-დან. თავად მოდული დაკავშირებულია 1…16 ქინძისთავებით LCD დისპლეის შესაბამის 1…16 ქინძისთავებთან.


3 ბიბლიოთეკა სამუშაოდ I2C პროტოკოლის საშუალებით

ახლა ჩვენ გვჭირდება ბიბლიოთეკა LCD-თან მუშაობისთვის I2C ინტერფეისის საშუალებით. თქვენ შეგიძლიათ გამოიყენოთ, მაგალითად, ეს (ბმული "ჩამოტვირთეთ ნიმუშის კოდი და ბიბლიოთეკა").

გადმოწერილი არქივი LiquidCrystal_I2Cv1-1.rarგახსენით საქაღალდეში \ბიბლიოთეკები\, რომელიც მდებარეობს Arduino IDE დირექტორიაში.

ბიბლიოთეკა მხარს უჭერს სტანდარტული ფუნქციების კომპლექტს LCD ეკრანებისთვის:

ფუნქციამიზანი
თხევადი კრისტალი () ქმნის LiquidCrystal ტიპის ცვლადს და იღებს დისპლეის კავშირის პარამეტრებს (პინის ნომრებს);
დაწყება () LCD დისპლეის ინიციალიზაცია, პარამეტრების დაყენება (ხაზების რაოდენობა და სიმბოლოები);
ნათელი () ეკრანის გასუფთავება და კურსორის საწყის პოზიციაზე დაბრუნება;
სახლი () დააბრუნეთ კურსორი საწყის პოზიციაზე;
setCursor() კურსორის დაყენება მოცემულ პოზიციაზე;
დაწერე () აჩვენებს სიმბოლოს LCD ეკრანზე;
ბეჭდვა () აჩვენებს ტექსტს LCD ეკრანზე;
კურსორი () აჩვენებს კურსორს, ე.ი. შემდეგი სიმბოლოს ადგილის ქვეშ ხაზგასმა;
noCursor () მალავს კურსორს;
მოციმციმე () კურსორის მოციმციმე;
noBlink () ციმციმის გაუქმება;
არაჩვენება () ეკრანის გამორთვა ყველა ნაჩვენები ინფორმაციის შენახვისას;
ჩვენება () ეკრანის ჩართვა ყველა ნაჩვენები ინფორმაციის შენახვისას;
scrollDisplayLeft() გადაახვიეთ ეკრანის შიგთავსი 1 პოზიციაზე მარცხნივ;
scrollDisplayRight() გადაახვიეთ ეკრანის შიგთავსი 1 პოზიციაზე მარჯვნივ;
autoscroll() ჩართეთ ავტომატური გადახვევა;
noAutoscroll() ავტომატური გადახვევის გამორთვა;
მარცხნიდან მარჯვნივ () ადგენს ტექსტის მიმართულებას მარცხნიდან მარჯვნივ;
rightToLeft () ტექსტის მიმართულება მარჯვნიდან მარცხნივ;
createChar() ქმნის მორგებულ ხასიათს LCD ეკრანისთვის.

4 ესკიზი ტექსტის გამოსატანად LCD ეკრანზე I2C ავტობუსით

მოდით გავხსნათ ნიმუში: ფაილის ნიმუშები LiquidCrystal_I2C CustomCharsდა ჩვენ ცოტათი შევცვლით. ჩვენ გამოვაჩენთ შეტყობინებას, რომლის ბოლოს მოციმციმე სიმბოლო იქნება. კოდის კომენტარები კომენტარს აკეთებს ესკიზის ყველა ნიუანსზე.

#შეიცავს // მოიცავს Wire ბიბლიოთეკას #include // LCD ბიბლიოთეკის დაკავშირება #define printByte(args) write(args); // uint8_t გული = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // „გულის“ სიმბოლოს ბიტიანი ნიღაბი LiquidCrystal_I2C lcd(0x27, 16, 2); // დააყენეთ მისამართი 0x27 16x2 LCD ეკრანისთვის void setup() ( lcd.init(); // LCD დისპლეის ინიციალიზაცია lcd.backlight(); // ჩართეთ ეკრანის განათება lcd.createChar(3, გული); // შექმენით „გულის“ სიმბოლო მეხსიერების უჯრედში 3 lcd.home(); // მოათავსეთ კურსორი ზედა მარცხენა კუთხეში, პოზიციაზე (0,0) lcd.!"); // დაბეჭდეთ ტექსტის ხაზი lcd.setCursor(0, 1); // გადაიტანეთ კურსორი მე-2 სტრიქონზე, სიმბოლო 1 lcd.print( "i "); } void loop() (// ციმციმებს ბოლო სიმბოლოს lcd.setCursor(13, 1); // კურსორის გადატანა მე-2 სტრიქონზე, სიმბოლო 1 lcd.print("\t"); }

დაგვიანებით (500); lcd.setCursor(13, 1); // კურსორის გადატანა მე-2 სტრიქონზე, სიმბოლო 1 lcd.print(" ");დაგვიანებით (500);

5 სხვათა შორის, ბრძანებით დაწერილი სიმბოლოები lcd.createChar();

, რჩება ეკრანის მეხსიერებაში დენის გამორთვის შემდეგაც, რადგან დაწერილია ROM 1602-ის საჩვენებლად. შექმენით თქვენი საკუთარი სიმბოლოები LCD ეკრანისთვის {00000, 01010, 11111, 11111, 01110, 00100, 00000} მოდით, ცოტა უფრო დეტალურად განვიხილოთ LCD ეკრანებისთვის საკუთარი სიმბოლოების შექმნის საკითხი. ეკრანზე თითოეული სიმბოლო შედგება 35 წერტილისგან: 5 სიგანე და 7 მაღალი (+1 სარეზერვო ხაზი ხაზგასმისთვის). ზემოთ მოყვანილი ესკიზის მე-6 სტრიქონში ჩვენ განვსაზღვრავთ 7 რიცხვის მასივს:

6 (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). გადაიყვანეთ თექვსმეტობითი რიცხვები ორობითად:

. ეს რიცხვები სხვა არაფერია, თუ არა ბიტი ნიღბები სიმბოლოს 7 სტრიქონიდან თითოეულისთვის, სადაც "0" აღნიშნავს ნათელ წერტილს და "1" ბნელ წერტილს. მაგალითად, ბიტმასკის სახით მითითებული გულის სიმბოლო გამოჩნდება ეკრანზე, როგორც ნაჩვენებია სურათზე.


7 LCD ეკრანის კონტროლი I2C ავტობუსით

როგორც ბონუსი, მოდით შევხედოთ LCD ეკრანზე ლათინური სიმბოლოების "A", "B" და "C" ჩვენების დროის დიაგრამას. ეს სიმბოლოები ინახება დისპლეის ROM-ში და ნაჩვენებია ეკრანზე უბრალოდ მათი მისამართების ეკრანზე გადაცემით. დიაგრამა აღებულია დისპლეის RS, RW, E, D4, D5, D6 და D7 ქინძისთავებიდან, ე.ი. უკვე FC-113 "I2C პარალელური ავტობუსის" გადამყვანის შემდეგ. შეიძლება ითქვას, რომ ჩვენ ცოტა უფრო ღრმად ვართ ჩაძირული აპარატურაში.


ლათინური სიმბოლოების "A", "B" და "C" გამომავალი დროის დიაგრამა LCD ეკრანზე 1602

დიაგრამა გვიჩვენებს, რომ სიმბოლოები, რომლებიც დისპლეის ROM-შია (იხ. გვერდი 11 მონაცემთა ცხრილის, ბმული ქვემოთ) გადაცემულია ორ წიაღში, რომელთაგან პირველი განსაზღვრავს ცხრილის სვეტის ნომერს, ხოლო მეორე - რიგის ნომერს. ამ შემთხვევაში, მონაცემები "ჩაკეტილია" ხაზის სიგნალის კიდეზე (ჩართვა) და ხაზი რ.ს.(რეგისტრაცია აირჩიეთ) არის ლოგიკურ ერთ მდგომარეობაში, რაც ნიშნავს მონაცემთა გადაცემას. დაბალი მდგომარეობა RS ხაზზე ნიშნავს ინსტრუქციების გაგზავნას, რასაც ვხედავთ თითოეული სიმბოლოს გადაცემამდე. ამ შემთხვევაში გადადის LCD დისპლეის პოზიციაზე (0, 0) დაბრუნების ინსტრუქციის კოდი, რომლის გარკვევაც შესაძლებელია დისპლეის ტექნიკური აღწერილობის შესწავლით.

და კიდევ ერთი მაგალითი. ეს დროის დიაგრამა აჩვენებს გულის სიმბოლოს გამომავალს LCD ეკრანზე.


ისევ პირველი ორი იმპულსი ჩართვაშეასრულოს ინსტრუქციები მთავარი ()(0000 0010 2) - დააბრუნეთ ვაგონი პოზიციაზე (0; 0), ხოლო მეორე ორი - გამომავალი LCD ეკრანზე, რომელიც ინახება მეხსიერების უჯრედში 3 10 (0000 0011 2) სიმბოლო „გული“ (ინსტრუქცია lcd.createChar(3, გული);ესკიზი).