اطلاعیه

Collapse
No announcement yet.

کار نکردن تابعlcd define character

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

    کار نکردن تابعlcd define character

    سلام با میکروی stm32f103rcکار می کنم
    برای LCD کاراکتری از توابع آماده ای که قبلا ECA برای هدر برد lpc1768 ارائه داده بود استفاده کردم
    فقط بخش lcd_define_char کار نمی کنه
    وقتی این تابع رو فراخوانی می کنم فقط مکان نمای LCD جابه جا میشه و هیچ چیزی نمایش نمیده
    void lcd_define_char(const char *pc,char char_code)
    {
    unsigned char a , i;
    //a = ((char_code<<3)|0x80);// & 0xff;
    a=64;
    //lcd_command(0x80);
    clcd_Delay();
    for (i = 0; i < 8 ;i++)
    {
    lcd_command(a++);
    clcd_Delay();
    lcd_putchar(pc[i]);
    clcd_Delay();
    //clcd_Delay();
    }
    }
    به نظرتون اشکال از کجاست ؟؟
    کل هدر رو هم می گذارم

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    #include "stm32f10x.h"
    #include "LCD.h"


    #define F_CPU 72000000

    #define clcd_minDelay() cwait(F_CPU/48000)
    #define clcd_Delay() cwait(F_CPU/4800)
    #define clcd_maxDelay() cwait(F_CPU/72)


    //================================================== ==========================
    void cwait (volatile int t) {
    for (;t; t--);
    }
    // ================================================== ==========================
    void setD4567(char val)
    {
    GPIOB->ODR &=~0XF000;
    if (val & 0x80)
    GPIOB->ODR |=(1<<12);
    if (val & 0x40)
    GPIOB->ODR |=(1<<13);
    if (val & 0x20)
    GPIOB->ODR |=(1<<14);
    if (val & 0x10)
    GPIOB->ODR |=(1<<15);
    }
    // ================================================== ==========================
    void lcd_putchar(char ch)
    {
    GPIOC->ODR |=(1<<8); //LCD_RS
    setD4567(ch);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_minDelay();
    setD4567(ch<<4);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    }
    // ================================================== ==========================
    void lcd_command(char cmd) //Sends Command to LCD
    {
    GPIOC->ODR &=~(1<<8); //LCD_RS
    setD4567(cmd);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_minDelay();
    setD4567(cmd<<4);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    }
    // ================================================== ==========================
    void lcd_init()
    {
    GPIOB->CRH &=~0XFFFF0000;
    GPIOB->CRH |=0X11110000;
    GPIOC->CRL &=~0XFF000000;
    GPIOC->CRL |=0X11000000;
    GPIOC->CRH &=~0X0000000F;
    GPIOC->CRH |=0X00000001;

    GPIOC->ODR &=~(1<<7); //LCD_RW
    clcd_Delay();
    setD4567(0);
    setD4567((1<<5)|(1<<4));
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    setD4567((1<<5)|(1<<4));
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    setD4567((1<<5)|(1<<4));
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    setD4567(1<<5);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    //
    setD4567(0);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    //
    setD4567(1<<7);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    //
    setD4567(0);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    //
    setD4567(1<<4);
    GPIOC->ODR |=(1<<6); //LCD_EN
    clcd_minDelay();
    GPIOC->ODR &=~(1<<6); //LCD_EN
    clcd_Delay();
    //
    lcd_command(0x28);
    lcd_command(0x0f);
    clcd_Delay();
    }
    //================================================== ==========================
    void lcd_gotoxy(char y, char x) //Cursor to X Y position
    {
    char DDRAMAddr;
    x=x;
    switch(y)
    {
    case 0: DDRAMAddr = 0x00+x; break;
    case 1: DDRAMAddr = 0x40+x; break;
    case 2: DDRAMAddr = 0x14+x; break;
    case 3: DDRAMAddr = 0x54+x; break;
    default: DDRAMAddr = 0x00+x;
    }
    lcd_command(1<<7 | DDRAMAddr);
    clcd_Delay();
    }
    // ================================================== ==========================
    void lcd_define_char(const char *pc,char char_code)
    {
    unsigned char a , i;
    //a = ((char_code<<3)|0x80);// & 0xff;
    a=64;
    //lcd_command(0x80);
    clcd_Delay();
    for (i = 0; i < 8 ;i++)
    {
    lcd_command(a++);
    clcd_Delay();
    lcd_putchar(pc[i]);
    clcd_Delay();
    //clcd_Delay();
    }
    }
    //================================================== ===========================
    void lcd_clear(void) //Clears LCD
    {
    lcd_command(0x01);
    clcd_Delay();
    lcd_command(0x02);
    clcd_maxDelay();
    }
    //================================================== ===========================
    void lcd_shift_left(char n) //Scrol n of characters Right
    {
    char i;
    for (i = 0 ; i < n ; i++)
    {
    lcd_command(0x1E);
    clcd_Delay();
    }
    }
    //================================================== ===========================
    void lcd_shift_right(char n) //Scrol n of characters Left
    {
    char q;
    for (q = 0 ;q < n ; q++)
    {
    lcd_command(0x18);
    clcd_Delay();
    }
    }
    //================================================== ==========================
    void lcd_puts(int num)
    {
    int i1,j1;
    int p,f=0;
    char ch[5];
    for(i1=0;i1<5;i1++)
    {
    p=1;
    for(j1=4-i1;j1>0;j1--)
    p = p*10;
    ch[i1] = (num/p);
    if (num>=p && !f){
    f=1;
    }
    num =num - ch[i1] *p ;
    ch[i1] = ch[i1] +48;
    if(f) lcd_putchar(ch[i1]);
    }
    }
    // ================================================== ==========================
    void lcd_putsf(char* data) //Outputs string to LCD
    {
    char *p;
    p = data;
    if (!p)
    return;
    for(; *p ; )
    {
    lcd_putchar(*p);
    p++;
    }
    }
    //================================================== ===========================
    void Display_off(void)
    {
    lcd_command(0x08);
    clcd_Delay();
    }
    //================================================== ===========================
    void Display_on(void)
    {
    lcd_command(0x0C);
    clcd_Delay();
    }
    //================================================== ===========================
    void cursor_off(void)
    {
    lcd_command(0x0C);
    clcd_Delay();
    }
    //================================================== ===========================
    void cursor_on(void)
    {
    lcd_command(0x0E);
    clcd_Delay();
    }
    //================================================== ===========================
    void cursor_blink(void)
    {
    lcd_command(0x0F);
    clcd_Delay();
    }
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : کار نکردن تابعlcd define character

    کسی از دوستان نظری نداره ؟؟
    واقعا هیچ کس نمی دونه مشکل از کجاست ؟؟
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    دیدگاه


      #3
      پاسخ : کار نکردن تابعlcd define character

      یعنی از lpc1768 پورت کردی به stm32f103rc؟
      خداوندا
      از بچگی به من آموختندهمه را دوست بدار حال که بزرگ شده ام و کسی را دوست می*دارم می گویند:
      فراموشش کن
      دکتر علی شریعتی

      دیدگاه

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