اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

    سلام
    برنامه ای که می خوام بنویسم یه برنامه اتصال LCD و KEYPAD به ای سی lpc2138 است. فقط قسمت lcd برنامه را گذاشتم ولی سخت افزاری کل قسمت ها را
    ولی مشکلی که ایجاد شده ، هنگامی مقاومت های pull up را به کی پد وصل می کنم LCD کار نمی کنه ، ولت متر میزارم مقدار یک روی پایه ها میفته ولی توی شماتیک مثا اینه که پایه ها خاموش باشه، سیم اتصال پایه هایی که ظاهرا خاموش شده اند را قطع می کنم پایه ها روشن میشه و مقدار یک میده
    وقتی پورت کی پد را تغییر می دم و اونا پورت یک می زارم مشکل حل میشه ولی نمی دفهمم چرا روی یه پورت این مشکل ایجاد میشه
    اینم برنامه:
    کد:
    [FONT=Yekan]#include <lpc21xx.h>[/FONT]#include "lcd.h"
    int main(void)
    {
     //IODIR0|=0x000000F;
        lcd_init();
     lcd_clear();
     lcd_gotoxy(1,1);
     lcd_print(" HELLO"); 
    [FONT=Yekan]}[/FONT]
    و این هم برنامه LCD
    کد:
    [FONT=Yekan]#include<lpc21xx.h>[/FONT]#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++);
    }
    [FONT=Yekan]}[/FONT]


    فایل برنامه
    جدیدترین ویرایش توسط t_heidari_elc; ۱۱:۴۸ ۱۳۹۵/۰۷/۱۶.
    دنیا آنقدر وسیع هست که برای همه مخلوقات جایی باشد پس به جای آنکه جای کسی را بگیریم تلاش کنیم جای واقعی خود را بیابیم

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

    مقاومت pull upشماتیک تون چرا اینجوری وصل کردین ؟من درهیچ جایی ندیدم pull upاینجوری وصل کنند.
    چرا vccرو مستقیم به پایهreset میکرو وصل کرده اید؟ reset میکروبایه مقاومت 10کیلو به vccوصل بشه.
    eshop-hodhod.ir

    دیدگاه


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

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

      دیدگاه

      لطفا صبر کنید...
      X