کار با lcd کاراکتری ۲*۱۶ در atmel studio با هدرهای اکسپلور امبدد

saalek110

Well-Known Member
کار با lcd کاراکتری ۲*۱۶ در atmel studio با هدرهای اکسپلور امبدد
 
آخرین ویرایش:

saalek110

Well-Known Member
هدرهای سایت اکسپلور امبدد
در تاپیک زیر ، لینک این سایت و بسته اش هست:


ولی من فایلهای لازم را همین جا هم ضمیمه می کنم تا نیازی به اون تاپیک نباشه.

در دو پوشه حاصل از آنزیپ بسته زیر پوشه libfiles را داریم. هدرهایی در اون است که از اون ها در برنامه های این تاپیک استفاده می کنیم.
 

پیوست ها

  • AVR Tutorial Code.zip
    2.6 مگایابت · بازدیدها: 0
آخرین ویرایش:

saalek110

Well-Known Member
JavaScript:
#include <avr/io.h>
#include "lcd.h"

int main(void)
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);
    LCD_Init(2,16);
 
    LCD_DisplayString("Majidonline");
    LCD_GoToNextLine();
    LCD_DisplayString("saalek110");
 
 
 
    /* Replace with your application code */
    while (1)
    {
    }
}

22.jpg
 

saalek110

Well-Known Member
بروید به فایل lcd.h ...آخرهای فایل ..... داریم:

PHP:
void LCD_Init(uint8_t v_lcdNoOfLines_u8, uint8_t v_MaxCharsPerLine_u8);
void LCD_CmdWrite( uint8_t v_lcdCmd_u8);
void LCD_DisplayChar( char v_lcdData_u8);
void LCD_Clear();
void LCD_GoToLine(uint8_t v_lineNumber_u8);
void LCD_GoToNextLine();
void LCD_SetCursor(uint8_t v_lineNumber_u8, uint8_t v_charNumber_u8);
void LCD_DisplayString(const char *ptr_stringPointer_u8);
void LCD_ScrollMessage(uint8_t v_lineNumber_u8, char *ptr_msgPointer_u8);
void LCD_DisplayNumber(uint8_t v_numericSystem_u8, uint32_t v_number_u32, uint8_t v_numOfDigitsToDisplay_u8);
void LCD_DisplayFloatNumber(double v_floatNum_f32);
void LCD_Printf(const char *argList, ...);
void LCD_SetUp(gpioPins_et RS, .........

اینها توابعی است که در اختیار شماست.
اگر کد این توابع را می خواهید بروید به lcd.c

با توابع بالا انتخاب محل نوشتن و کارهای دیگر ممکن است.
 

saalek110

Well-Known Member
طرز افزودن فایلها به پروژه
با کلیک راست بر پوشه پروژه در پنجره solution exporer

2.jpg 3.jpg

البته روش درست ممکن است افزودن پوشه حاوی فایلها باشد که خودتان دنبالش بروید.

اینکه چطور من فهمیدم چه فایلهایی باید ادد بشود ، از روی خطاهای برنامه فهمیدم...
فایل اضافه ادد بکنید هیچی نمیشه.

PHP:
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);

اینکه چرا در کد بالا کامنت با کد فرق داره ....چون من پایه های دلخواه خودم را جایگزین کردم. شما هم می توانید پایه های دلخواه بدهید...اون p_nc یعنی پایه رها شده lcd
یعنی این 4 پایه از وسط lcd به جایی وصل نمیشن.عکس زیر:

۲۰۲۳۱۱۱۱_۰۲۱۸۴۹.jpg

6 تا از یک طرف وصل میشه و 6 تا از طرف آخر و 4 تا وسط رها میشه.
از 6 تای اول ....سه تای اولی مثبت و منفی و تنظیم روشنایی و 3 تایی بعدی به میکروکنترلر وصل میشه
از 6 تای آخری ...دو تای آخری روشنایی پس زمینه است و 4 تا هم وصل میشه به میکروکنترلر

به تاپیک زیر برای شرح بیشتر برای وصل کردن پایه ها مراجعه کنید:


تاپیک بالا برای کدویژن است ولی وصل کردن سیم ها فرقی نداره.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
#ifndef F_CPU
#define F_CPU 1000000UL
#endif

#include <avr/io.h>
#include "lcd.h"



int main(void)
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
uint16_t count=0;
        LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);
        LCD_Init(2,16);
    
    LCD_DisplayString("Count:");
 
    /* Replace with your application code */
    while (1)
    {

            LCD_GoToLine(1);
            LCD_Printf("%4d",count);
            count++;
            DELAY_ms(200);
    }
}

برنامه بالا شمارشگر است.
در main عددی تعریف شده و مساوی صفر قرار داده شده
در while اون عدد هر بار یک واحد افزایش پیدا می کنه و چاپ میشه.

همین طور می شمرد و عدد افزایش پیدا می کند.

۲۰۲۳۱۱۱۱_۰۲۳۷۳۵.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
 LCD_ScrollMessage(0,"        Welcome to AVR programming by Explore Embedded ");

کد بالا اسکرول است. من تست نکردم.
 

saalek110

Well-Known Member
PHP:
#ifndef F_CPU
#define F_CPU 1000000UL
#endif


#include <avr/io.h>
#include "lcd.h"

int main(void)
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
 int count = 0;
        LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);
        LCD_Init(2,16);
       
    LCD_DisplayString("Decimal");
   
    /* Replace with your application code */
    while (1)
    {

        LCD_GoToLine(1);
        LCD_Printf("Count=%4d",count);
        DELAY_ms(50);
        count++;
    }
}
اجرایش فرقی با برنامه قبلی ندارد.ولی گویا عدد 5 رقمی بود ....دقیق نمی دانم.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
#ifndef F_CPU
#define F_CPU 1000000UL
#endif


#include <avr/io.h>
#include "lcd.h"
#include "adc.h"
int main(void)
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    int adcValue;
    float volt;
        LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);
        LCD_Init(2,16);
       
    /* Replace with your application code */
    while (1)
    {
       adcValue = ADC_GetAdcValue(0); // Read the ADC value of channel zero(PA0)
       volt = (adcValue*5.00)/1023;
       LCD_GoToLine(0);
       LCD_Printf("ADC0 Value:%4d \nVolt:%f",adcValue,volt);     // Display Raw adc value and Equivalent temp on LCD
    }
}

این برنامه Adc است ، جای خودش باید کار بشه... در اینجا فقط خواستم نمایش اعشاری را ببینید.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
#include <avr/io.h>
#include "lcd.h"

 int main()
 
 { /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTC.4 to PORTC.7*/
      LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PC_4,PC_5,PC_6,PC_7);      
      LCD_Init(4,20);      
      LCD_DisplayString("Explore Embedded\n");
      LCD_DisplayString("LCD 4-bit Mode\n");
      LCD_DisplayString("20 x 4 \n");
      LCD_DisplayString(":)  :O");
      while(1);
     
         return (0);
 }

کد بالا هم برای lcd دارای ۴ سطر و ۲۰ ستون است.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا