ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 3 از 3
  1. #1
    2010/02/23
    197
    1

    خطا در اتصال LCD و KEYPAD

    سلام
    برنامه ای که می خوام بنویسم یه برنامه اتصال LCD و KEYPAD به ای سی lpc2138 است. فقط قسمت lcd برنامه را گذاشتم ولی سخت افزاری کل قسمت ها را
    ولی مشکلی که ایجاد شده ، هنگامی مقاومت های pull up را به کی پد وصل می کنم LCD کار نمی کنه ، ولت متر میزارم مقدار یک روی پایه ها میفته ولی توی شماتیک مثا اینه که پایه ها خاموش باشه، سیم اتصال پایه هایی که ظاهرا خاموش شده اند را قطع می کنم پایه ها روشن میشه و مقدار یک میده
    وقتی پورت کی پد را تغییر می دم و اونا پورت یک می زارم مشکل حل میشه ولی نمی دفهمم چرا روی یه پورت این مشکل ایجاد میشه
    اینم برنامه:
    کد:
    #include <lpc21xx.h>#include "lcd.h"
    int main(void)
    {
     //IODIR0|=0x000000F;
        lcd_init();
     lcd_clear();
     lcd_gotoxy(1,1);
     lcd_print(" HELLO"); 
    }
    و این هم برنامه LCD
    کد:
    #include<lpc21xx.h>#define pin_rs 1<<24 /*lcd rs pin*/
    #define pin_rw 1<<23 /*lcd rw pin*/
    #define pin_en 1<<22 /*lcd en pin*/
    #define pin_ctrl pin_rs|pin_rw|pin_en /*lcd control pins*/
    #define lcd_d4 1<<10 /*lcd data pins D4,D5,D6,D7*/
    #define lcd_d5 1<<11
    #define lcd_d6 1<<12
    #define lcd_d7 1<<13
    #define lcd_data lcd_d4|lcd_d5|lcd_d6|lcd_d7
    #define lcd_rs(x) ((x)?(IOSET1=pin_rs):(IOCLR1=pin_rs)); /*lcd_rs(x) if x=1 will set the lcd_rs pin will clear if x=0*/
    #define lcd_rw(x) ((x)?(IOSET1=pin_rw):(IOCLR1=pin_rw));
    #define lcd_en(x) ((x)?(IOSET1=pin_en):(IOCLR1=pin_en));
    #define data_in ((IOPIN0>>10)&(0x0F)) /*direction of the data pins as input*/
    #define data_out(x) IOCLR0=lcd_data; IOSET0=(x & 0x0F)<<10; /*direction of the data pins and control pins
    as output*/
    #define lcd_all_dir_out IODIR0 |= lcd_data ; IODIR1 |= pin_ctrl; /*setting as output for both data and control pins*/
    #define lcd_dir_data_out IODIR0 |= lcd_data
    #define lcd_dir_data_in IODIR0 &= ~(lcd_data)
    #define delay_2n 4
    static void delay(int);
    static unsigned char busy_wait();
    static void delay(int cnt)
    {
    cnt <<= delay_2n;
    while(cnt--);
    }
    static unsigned char busy_wait()
    {
    unsigned char status;
    do
    {
    lcd_dir_data_in;
    delay(10);
    lcd_rs(0);
    delay(10);
    lcd_rw(1);
    delay(10);
    lcd_en(1);
    delay(10);
    status= (data_in<<4)&(0xF0);
    lcd_en(0);
    delay(10);
    lcd_en(1);
    delay(10);
    status |=data_in;
    lcd_en(0);
    delay(10);
    lcd_dir_data_out;
    delay(10);
    }while(status & 0x80);
    return (status);
    }
    void lcd_write_4bit(unsigned char c)
    {
    lcd_rw(0);
    delay(10);
    lcd_en(1);
    delay(10);
    data_out(c & 0x0F);
    delay(10);
    lcd_en(0);
    delay(10);
    }
    void lcd_cmd_write(unsigned char c)
    {
    busy_wait();
    lcd_rs(0);
    delay(10);
    lcd_write_4bit(c>>4);
    lcd_write_4bit(c);
    }
    static void lcd_data_write(unsigned char c)
    {
    busy_wait();
    lcd_rs(1);
    delay(10);
    lcd_write_4bit(c>>4);
    lcd_write_4bit(c);
    }
    void lcd_putchar(char c)
    {
    lcd_data_write(c);
    }
    void lcd_init()
    {
    lcd_all_dir_out;
    delay(10);
    lcd_rs(0);
    lcd_write_4bit(0x3);
    delay(10);
    lcd_write_4bit(0x3);
    delay(10);
    lcd_write_4bit(0x3);
    lcd_write_4bit(0x2);
    lcd_cmd_write(0x28);
    lcd_cmd_write(0x0C);
    lcd_cmd_write(0x06);
    }
    int lcd_gotoxy( unsigned int x, unsigned int y)
    {
    int retval = 0;
    if( (x > 1) && (y > 15) )
    {
    retval = -1;
    } else {
    if( x == 0 )
    {
    lcd_cmd_write( 0x80 + y ); /* command - position cursor at 0x00 (0x80 + 0x00 ) */
    } else if( x==1 ){
    lcd_cmd_write( 0xC0 + y ); /* command - position cursor at 0x40 (0x80 + 0x00 ) */
    }
    }
    return retval;
    }
    void lcd_clear()
    {
    lcd_cmd_write(0x01);
    lcd_gotoxy(0,0);
    }
    void lcd_print(unsigned char const *str)
    {
    while(*str)
    {
    lcd_putchar(*str++);
    }
    }

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    فایل برنامه

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط t_heidari_elc : 2016/10/07 در ساعت 11:48
  2. #2
    2016/05/25
    464
    483

    پاسخ : خطا در اتصال LCD و KEYPAD

    مقاومت pull upشماتیک تون چرا اینجوری وصل کردین ؟من درهیچ جایی ندیدم pull upاینجوری وصل کنند.
    چرا vccرو مستقیم به پایهreset میکرو وصل کرده اید؟ reset میکروبایه مقاومت 10کیلو به vccوصل بشه.
  3. #3
    2010/02/23
    197
    1

    پاسخ : خطا در اتصال LCD و KEYPAD

    در مورد پایه reset چیزی ندارم بگم، ای سی را از یه برنامه کپی کردم توجه نکردم بهش
    Pull up فکر نکنم ذمشکلی داشته باشه وجود خازن تنها جهت نویز گیری است، پایه ها با مقاومت به vcc وصل شدند
نمایش نتایج: از 1 به 3 از 3

موضوعات مشابه

  1. اتصال keypad 4*4 به میکرو
    توسط sali147 در انجمن میکروکنترلرهای AVR
    پاسخ: 27
    آخرين نوشته: 2014/08/14, 05:43
  2. اتصال Keypad به LCD 2*16
    توسط soheilzahedy در انجمن میکروکنترلرهای PIC
    پاسخ: 5
    آخرين نوشته: 2012/08/25, 18:09
  3. اتصال KEYPAD 4*4 به میکرو با یه سیم
    توسط morteza_neverdie22 در انجمن مدار هاي ديجيتال
    پاسخ: 27
    آخرين نوشته: 2010/02/15, 21:59
  4. اتصال KEYPAD 4*4 به میکرو با یه سیم
    توسط Mehrdad001 در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2009/04/24, 00:52
  5. طریقه ی اتصال Atmega16+Keypad Telephoni+Lcd 16*2
    توسط engineer2012 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2008/11/21, 13:06

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •