مبانی راه اندازی Text LCD:
دو روش برای راه اندازی یکLCD متنی وجود دارد.استفاده از باس 8 بیتی برای انتقال دستورات و دیتا و استفاده از باس 4 بیتی .بدلیل سیم کشی کمتر ما از روش باس 4 بیتی استفاده میکنیم. توصیف پایه های LCD به صورت زیراست:پایه | نماد | توصیف رفتار |
---|---|---|
1 | VSS | زمین |
2 | VCC | تغذیه مثبت |
3 | VEE | کنترل درخشندگی |
4 | RS | انتخاب رجیستر RS و انتخاب بین دادن فرمان یا نوشتن برروی LCD |
5 | R/W | R/W=1 برای خواندن و R/W=0 برای نوشتن در LCD |
6 | E | عملیات لچ کردن داده ها |
7 | DB0 | گذرگاه داده 8 بیتی |
8 | DB1 | گذرگاه داده 8 بیتی |
9 | DB2 | گذرگاه داده 8 بیتی |
10 | DB3 | گذرگاه داده 8 بیتی |
11 | DB4 | گذرگاه داده 8 بیتی |
12 | DB5 | گذرگاه داده 8 بیتی |
13 | DB6 | گذرگاه داده 8 بیتی |
14 | DB7 | گذرگاه داده 8 بیتی |
15 | A | ولتاژ مثبت برای راه اندازه BackLight |
16 | K | ولتاژ منفی برای راه اندازی BackLight |
برای ارسال فرمان به LCD هر کدام از دستورات جدول زیر را میتوانیم به LCD اعمال کنیم. ابتدا پایه RS=0 قرار میدهیم و یک پالس بالا به پایین با عرض حداقل 0.5 میلی ثانیه به پایه E اعمال میکنیم و فرمان را بر روی باس داده قرار میدهیم.
برای ارسال داده جهت نمایش بر روی LCD ابتدا باید RS=1 باشد و یک پالس بالا به پایین با عرض حداقل 0.5 میلی ثانیه به پایه E اعمال کنیم.
کد هگز | عملکرد |
---|---|
1 | پاک کردن صفحه نمایش |
2 | بازگشت به مکان اول |
4 | کاهش مکان نما (جابجایی به چپ) |
6 | افزایش مکان نما (جابجایی به راست) |
5 | جابجایی نمایش به راست |
7 | جابجایی نمایش به چپ |
8 | نمایش خاموش،مکان نما خاموش |
A | نمایش خاموش ،مکان نما روشن |
C | نمایش روشن،مکان نما خاموش |
E | نمایش روشن،مکان نما روشن |
F | نمایش روشن،مکان نما چشمک زن |
10 | جابجایی مکان نما به چپ |
14 | جابجایی مکان نما به راست |
18 | کل صفحه نمایش به چپ جابجا شود |
1C | کل صفحه نمایش به راست جابجا شود |
C0 | انتقال مکان نما به ابتدای سطر دوم |
38 | سازمان دهی LCD بصورت 2 سطر و ماتریس های 5x7 |
با توجه به توضیحات مقدماتی فوق و مراجعه به برگه اطلاعاتی LCD ها و محل قراری مکان نما در هر سطر و ... کتابخانه lcd.h بصورت زیر برای کار با میکروهای خانواده PIC آماده شده است.
//LCD Functions Developed by electroSome
void Lcd_Port(char a)
{
if(a & 1)
D4 = 1;
else
D4 = 0;
if(a & 2)
D5 = 1;
else
D5 = 0;
if(a & 4)
D6 = 1;
else
D6 = 0;
if(a & 8)
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0; // => RS = 0
Lcd_Port(a);
EN = 1; // => E = 1
__delay_ms(4);
EN = 0; // => E = 0
}
Lcd_Clear()
{
Lcd_Cmd(0);
Lcd_Cmd(1);
}
void Lcd_Set_Cursor(char a, char b)
{
char temp,z,y;
if(a == 1)
{
temp = 0x80 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
else if(a == 2)
{
temp = 0xC0 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
}
void Lcd_Init()
{
Lcd_Port(0x00);
__delay_ms(20);
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
Lcd_Cmd(0x03);
/////////////////////////////////////////////////////
Lcd_Cmd(0x02);
Lcd_Cmd(0x02);
Lcd_Cmd(0x08);
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
Lcd_Cmd(0x00);
Lcd_Cmd(0x06);
}
void Lcd_Write_Char(char a)
{
char temp,y;
temp = a&0x0F;
y = a&0xF0;
RS = 1; // => RS = 1
Lcd_Port(y>>4); //Data transfer
EN = 1;
__delay_us(40);
EN = 0;
Lcd_Port(temp);
EN = 1;
__delay_us(40);
EN = 0;
}
void Lcd_Write_String(char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
Lcd_Write_Char(a[i]);
}
void Lcd_Shift_Right()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
void Lcd_Shift_Left()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
}
توابع کتابخانه lcd.h
()void Lcd_Init:در آغاز به کار LCD را تنظیم کرده و برای استفاده آماده میکند.
()Lcd_Clear: صفحه نمایش را کاملا پاک میکند.
void Lcd_Set_Cursor(char a, char b):مکان نما را به سطر a و ستون b منتقل میکند.
void Lcd_Write_Char(char a):یک حرف بر روی LCD چاپ میکند.
void Lcd_Write_String(char *a):یک رشته بر روی LCD چاپ میکند.
()void Lcd_Shift_Right:رشته حروف روی LCD را به راست منتقل میکند.
()void Lcd_Shift_Left:حروف بر روی LCD را به سمت چپ منتقل میکند.
LCD====>Micro
RS====>RD2
EN====>RD3
D4====>RD4
D5====>RD5
D6====>RD6
D7====>RD7
#define _XTAL_FREQ 16000000
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include < xc.h>
#include "lcd.h"
// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG
int main()
{
unsigned int a;
TRISD = 0x00;
Lcd_Init();
while(1)
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("LCD Library for");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("MPLAB XC8");
__delay_ms(2000);
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Developed By");
Lcd_Set_Cursor(2,1);
Lcd_Write_String("ALI Moradi");
__delay_ms(2000);
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("electronic4fun");
for(a=0;a<15;a++)
{
__delay_ms(300);
Lcd_Shift_Left();
}
for(a=0;a<15;a++)
{
__delay_ms(300);
Lcd_Shift_Right();
}
Lcd_Clear();
Lcd_Set_Cursor(2,1);
Lcd_Write_Char('A');
Lcd_Write_Char('l');
Lcd_Write_Char('i');
__delay_ms(2000);
}
return 0;
}
هیچ نظری موجود نیست:
ارسال یک نظر