ఇది మా పిఐసి ట్యుటోరియల్ సిరీస్లో మా ఆరవ ట్యుటోరియల్, ఈ ట్యుటోరియల్లో పిఐసి మైక్రోకంట్రోలర్తో 16x2 ఎల్సిడి ఇంటర్ఫేసింగ్ నేర్చుకుంటాము. మా మునుపటి ట్యుటోరియల్లో మేము కొన్ని LED మెరిసే ప్రోగ్రామ్లను ఉపయోగించి PIC యొక్క ప్రాథమికాలను నేర్చుకున్నాము మరియు PIC మైక్రోకంట్రోలర్లో టైమర్లను ఎలా ఉపయోగించాలో కూడా నేర్చుకున్నాము. MPLABX మరియు XC8 కంపైలర్ ఉపయోగించి PIC మైక్రోకంట్రోలర్లను నేర్చుకోవడం గురించి అన్ని ట్యుటోరియల్లను మీరు ఇక్కడ తనిఖీ చేయవచ్చు.
ఈ ట్యుటోరియల్ ఆసక్తికరంగా ఉంటుంది ఎందుకంటే PIC16F877A తో 16 × 2 LCD ని ఎలా ఇంటర్ఫేస్ చేయాలో నేర్చుకుంటాము, ఈ ట్యుటోరియల్ చివరిలో వివరణాత్మక వీడియోను తనిఖీ చేయండి. వినియోగదారు సూచనల కోసం మేము LED లను ఉపయోగించిన పాత రోజులు అయిపోయాయి. ఎల్సిడి డిస్ప్లేలను ఉపయోగించడం ద్వారా మన ప్రాజెక్ట్లను మరింత చల్లగా మరియు ఉపయోగకరంగా ఎలా చూడవచ్చో చూద్దాం. ఇంటర్ఫేసింగ్ ఎల్సిడిపై మా మునుపటి కథనాలను 8051 తో, ఆర్డునోతో, రాస్ప్బెర్రీ పైతో, ఎవిఆర్తో తనిఖీ చేయండి.
పిఐసి మైక్రోకంట్రోలర్తో ఎల్సిడిని ఇంటర్ఫేసింగ్ కోసం విధులు:
విషయాలను సులభతరం చేయడానికి మేము మా PIC16F877A తో ఈ LCD ని ఉపయోగిస్తున్నప్పుడు విషయాలు సులభతరం చేసే చిన్న లైబ్రరీని తయారు చేసాము. "MyLCD.h" అనే హెడర్ ఫైల్ డౌన్లోడ్ కోసం ఇక్కడ ఇవ్వబడింది, దీనిలో PIC MCU ని ఉపయోగించి LCD ని నడపడానికి అవసరమైన అన్ని విధులు ఉన్నాయి. వ్యాఖ్య పంక్తుల ద్వారా లైబ్రరీ కోడ్ బాగా వివరించబడింది, కానీ మీకు ఇంకా సందేహాలు ఉంటే వ్యాఖ్య విభాగం ద్వారా మమ్మల్ని చేరుకోండి. బేసిక్ ఎల్సిడి వర్కింగ్ మరియు దాని పిన్అవుట్ల కోసం కూడా ఈ కథనాన్ని తనిఖీ చేయండి.
గమనిక: మీ హెడర్ ఫైల్ లోపల వాస్తవానికి ఏమి జరుగుతుందో తెలుసుకోవడం ఎల్లప్పుడూ సిఫార్సు చేయబడింది ఎందుకంటే ఇది డీబగ్గింగ్లో లేదా MCU ని మార్చేటప్పుడు మీకు సహాయపడుతుంది.
ఇప్పుడు, మీ ప్రోగ్రామ్లో ఈ కోడ్ను జోడించడానికి రెండు మార్గాలు ఉన్నాయి. మీరు పైన పేర్కొన్న అన్ని పంక్తులను MyLCD.h లో కాపీ చేసి, శూన్యమైన ప్రధాన () ముందు వాటిని అతికించవచ్చు. లేదా మీరు లింక్ను ఉపయోగించి హెడర్ ఫైల్ను డౌన్లోడ్ చేసుకోవచ్చు మరియు వాటిని మీ ప్రాజెక్ట్ యొక్క హెడర్ ఫైల్కు జోడించవచ్చు ( # "MyLCD.h "; ). హెడర్ ఫైల్పై కుడి క్లిక్ చేసి, ఇప్పటికే ఉన్న అంశాన్ని జోడించి , ఈ హెడర్ ఫైల్కు బ్రౌజ్ చేయడం ద్వారా ఇది చేయవచ్చు.
ఇక్కడ నేను హెడర్ ఫైల్ కోడ్ను నా ప్రధాన సి ఫైల్లోకి కాపీ చేసి అతికించాను. కాబట్టి మీరు మా కోడ్ను ఉపయోగిస్తుంటే, మీరు మీ ప్రోగ్రామ్లో హెడర్ ఫైల్ను డౌన్లోడ్ చేసి జోడించాల్సిన అవసరం లేదు, ఈ ట్యుటోరియల్ చివరిలో ఇచ్చిన పూర్తి కోడ్ను ఉపయోగించండి. ఈ లైబ్రరీ PIC16F సిరీస్ PIC మైక్రోకంట్రోలర్కు మాత్రమే మద్దతు ఇస్తుందని గమనించండి.
ఇక్కడ నేను క్రింద ఉన్న మా హెడర్ ఫైల్ లోపల ప్రతి ఫంక్షన్ను వివరిస్తున్నాను:
void Lcd_Start (): ఈ ఫంక్షన్ మా LCD తో పనిచేయడం ప్రారంభించడానికి పిలవవలసిన మొదటి ఫంక్షన్ అయి ఉండాలి. ప్రోగ్రామ్లో లాగ్ను నివారించడానికి మేము ఈ ఫంక్షన్కు ఒకసారి మాత్రమే కాల్ చేయాలి.
శూన్య Lcd_Start () {Lcd_SetBit (0x00); (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __ ఆలస్యం_ఎంఎస్ (5); Lcd_Cmd (0x03); __ ఆలస్యం_ఎంఎస్ (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H ఇంటికి తిరిగి రావడానికి ఉపయోగించబడుతుంది -> RAM ని క్లియర్ చేస్తుంది మరియు LCD Lcd_Cmd (0x02) ను ప్రారంభిస్తుంది; // 02H ఇంటికి తిరిగి రావడానికి ఉపయోగించబడుతుంది -> RAM ని క్లియర్ చేస్తుంది మరియు LCD Lcd_Cmd (0x08) ను ప్రారంభిస్తుంది; // అడ్డు వరుస 1 Lcd_Cmd (0x00) ఎంచుకోండి; // క్లియర్ రో 1 డిస్ప్లే Lcd_Cmd (0x0C); // అడ్డు వరుస 2 Lcd_Cmd (0x00) ఎంచుకోండి; // క్లియర్ రో 2 డిస్ప్లే Lcd_Cmd (0x06); }
Lcd_Clear (): ఈ ఫంక్షన్ LCD స్క్రీన్ను క్లియర్ చేస్తుంది మరియు మునుపటి డేటా యొక్క రూపాన్ని క్లియర్ చేయడానికి లూప్ల లోపల ఉపయోగించవచ్చు.
Lcd_Clear () {Lcd_Cmd (0); // LCD Lcd_Cmd (1) ను క్లియర్ చేయండి; // కర్సర్ను మొదటి స్థానానికి తరలించండి}
శూన్యమైన Lcd_Set_Cursor (x pos, y pos): ప్రారంభించిన తర్వాత, మా LCD ఆదేశాలను తీసుకోవడానికి సిద్ధంగా ఉంది, ఈ ఫంక్షన్ను ఉపయోగించడం ద్వారా LCD కి కర్సర్ను మీ ఇష్టపడే ప్రదేశంలో సెట్ చేయమని మేము సూచించవచ్చు . 1 వ వరుస యొక్క 5 వ అక్షరం వద్ద మనకు కర్సర్ అవసరమైతే అనుకుందాం. అప్పుడు ఫంక్షన్ Lcd_Set_Cursor (1, 5) ను రద్దు చేస్తుంది
శూన్యమైన Lcd_Set_Cursor (చార్ a, చార్ b) {చార్ టెంప్, z, y; if (a == 1) {temp = 0x80 + b - 1; // 80H కర్సర్ను తరలించడానికి ఉపయోగిస్తారు z = టెంప్ >> 4; // దిగువ 8-బిట్స్ y = టెంప్ & 0x0F; // ఎగువ 8-బిట్స్ Lcd_Cmd (z); // వరుస Lcd_Cmd (y) సెట్ చేయండి; // నిలువు వరుసను సెట్ చేయండి if else if (a == 2) {temp = 0xC0 + b - 1; z = టెంప్ >> 4; // దిగువ 8-బిట్స్ y = టెంప్ & 0x0F; // ఎగువ 8-బిట్స్ Lcd_Cmd (z); // వరుస Lcd_Cmd (y) సెట్ చేయండి; // నిలువు వరుసను సెట్ చేయండి}}
శూన్యమైన Lcd_Print_Char (చార్ డేటా): కర్సర్ సెట్ చేయబడిన తర్వాత మనం ఈ ఫంక్షన్ను పిలవడం ద్వారా అక్షరాన్ని దాని స్థానానికి వ్రాయవచ్చు.
శూన్యమైన Lcd_Print_Char (చార్ డేటా) // 4-బిట్ మోడ్ ద్వారా 8-బిట్లను పంపండి {చార్ లోయర్_నిబుల్, అప్పర్_నిబుల్; దిగువ_నిబుల్ = డేటా & 0x0F; ఎగువ_నిబుల్ = డేటా & 0xF0; ఆర్ఎస్ = 1; // => RS = 1 Lcd_SetBit (ఎగువ_నిబుల్ >> 4); // 4 EN = 1 ద్వారా మార్చడం ద్వారా ఎగువ సగం పంపండి; (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (దిగువ_నిబుల్); // దిగువ సగం EN = 1 పంపండి; (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
శూన్యమైన Lcd_Print_String (char * a): అక్షరాల సమూహాన్ని ప్రదర్శించాలంటే, స్ట్రింగ్ ఫంక్షన్ను ఉపయోగించవచ్చు.
శూన్యమైన Lcd_Print_String (చార్ * a) {int i; (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // పాయింటర్లను ఉపయోగించి స్ట్రింగ్ను విభజించి చార్ ఫంక్షన్కు కాల్ చేయండి}
Lcd_Print_Char (చార్ డేటా) అని పిలువబడే ప్రతిసారీ, దాని సంబంధిత అక్షర విలువలు LCD యొక్క డేటా-లైన్లకు పంపబడతాయి. ఈ అక్షరాలు HD44780U ని బిట్ల రూపంలో చేరుతాయి. ఇప్పుడు ఈ ఐసి దిగువ పట్టికలో చూపిన విధంగా దాని ROM మెమరీని ఉపయోగించడం ద్వారా ప్రదర్శించబడే అక్షరానికి బిట్లను సంబంధం కలిగి ఉంటుంది. మీరు HD44780U LCD కంట్రోలర్ యొక్క డేటాషీట్లోని అన్ని అక్షరాల కోసం బిట్లను కనుగొనవచ్చు .
ఇప్పుడు, మా హెడర్ ఫైల్తో మేము సంతృప్తి చెందినందున, సర్క్యూట్ను నిర్మించి ప్రోగ్రామ్ను పరీక్షిద్దాం. పైన ఇచ్చిన లింక్లో ఇచ్చిన పూర్తి హెడర్ ఫైల్ను కూడా తనిఖీ చేయండి.
సర్క్యూట్ రేఖాచిత్రం మరియు పరీక్ష:
పిఐసి మైక్రోకంట్రోలర్తో ఇంటర్ఫేసింగ్ 16x2 ఎల్సిడి కోసం సర్క్యూట్ రేఖాచిత్రం క్రింద ఉంది .
పై సర్క్యూట్లో విద్యుత్ సరఫరా లేదా ఐసిఎస్పి కనెక్షన్ను నేను చూపించలేదు, ఎందుకంటే మేము మునుపటి ట్యుటోరియల్లో ఉపయోగించిన బోర్డును ఉపయోగిస్తున్నాము, ఇక్కడ తనిఖీ చేయండి.
ప్రోగ్రామ్లో గమనించవలసిన ఒక ముఖ్యమైన విషయం ఎల్సిడి యొక్క పిన్ నిర్వచనాలు:
# RS RD2 ని నిర్వచించండి # EN RD3 ని నిర్వచించండి # D4 RD4 ని నిర్వచించండి # D5 RD5 ని నిర్వచించండి # D6 RD6 ని నిర్వచించండి # D7 RD7 ని నిర్వచించండి
ప్రోగ్రామర్ల హార్డ్వేర్ సెటప్ ప్రకారం ఈ పిన్ నిర్వచనాలను మార్చవచ్చు. మీరు ఇక్కడ మారితే ప్రధాన ఫంక్షన్లో గౌరవనీయమైన పోర్ట్ కాన్ఫిగరేషన్ను మార్చాలని గుర్తుంచుకోండి.
ఈ ప్రాజెక్ట్ కోసం హార్డ్వేర్ చాలా సులభం. మేము చివరిసారి ఉపయోగించిన అదే PIC మాడ్యూల్ను తిరిగి ఉపయోగించబోతున్నాము మరియు జంపర్ వైర్లను ఉపయోగించి LCD మాడ్యూల్ను మా PIC కి కనెక్ట్ చేయబోతున్నాము.
కనెక్షన్ క్రింది పట్టిక ద్వారా అర్థం చేసుకోవచ్చు:
ఎల్సిడి పిన్ నం. |
LCD పిన్ పేరు |
MCU పిన్ పేరు |
MCU పిన్ నం. |
1 |
గ్రౌండ్ |
గ్రౌండ్ |
12 |
2 |
వీసీసీ |
+ 5 వి |
11 |
3 |
VEE |
గ్రౌండ్ |
12 |
4 |
రిజిస్టర్ ఎంచుకోండి |
RD2 |
21 |
5 |
చదువు రాయి |
గ్రౌండ్ |
12 |
6 |
ప్రారంభించండి |
RD3 |
22 |
7 |
డేటా బిట్ 0 |
NC |
- |
8 |
డేటా బిట్ 1 |
NC |
- |
9 |
డేటా బిట్ 2 |
NC |
- |
10 |
డేటా బిట్ 3 |
NC |
- |
11 |
డేటా బిట్ 4 |
RD4 |
27 |
12 |
డేటా బిట్ 5 |
RD5 |
28 |
13 |
డేటా బిట్ 6 |
RD6 |
29 |
14 |
డేటా బిట్ 7 |
RD7 |
30 |
15 |
LED పాజిటివ్ |
+ 5 వి |
11 |
16 |
LED నెగటివ్ |
గ్రౌండ్ |
12 |
ఇప్పుడు మనం కనెక్షన్లు చేద్దాం, కోడ్ను మా MCU కి డంప్ చేసి, అవుట్పుట్ను ధృవీకరించండి.
మీకు ఏమైనా ఇబ్బంది లేదా సందేహాలు ఉంటే, దయచేసి వ్యాఖ్య విభాగాన్ని ఉపయోగించండి. క్రింద ఇచ్చిన డెమో వీడియోను కూడా తనిఖీ చేయండి.