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





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









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





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

نمایش نتایج: از 1 به 8 از 8
  1. #1
    2015/11/01
    8
    0

    راه اتندازی ds1307 و نمایش روی 7seg

    ا سلام خدمت دوستان و اساتید محترم.
    من یه تازه کار هستم که با ccs شروع به کار کردم. با استفاده ازi2c تونستم ایسی ds1307 و خونده و اطلاعات روی ال سی دی نمایش بدم. حالا میخواستم ساعت رو روی سون سگمنت پیاده سازی کنم. برای این کار نیاز بود که عدد مربوط به ساعت تقسیم بر 10 کنم که باقیمانده و تقسیم رو به صورت جدا به من بده با استفاده از دستور زیر:
    a=sec/10; , b=sec%10
    اما مقادیری که به دست میاد درست نیستو این مقادیر را روی ال سی دی برای خودم نمایش دادم اما همیشه مقادیر رو اشتباه بهم میده. کسی میتونه کمک کنه
    با تشکر
  2. #2
    2006/08/16
    867
    17

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    کدتونو بزارید.

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

    عضویت

  3. #3
    2015/11/01
    8
    0

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    کدو اینقد تغییر دادم چیزی ازش نمونده :icon_razz:
    [code=c]
    #include <16F877a.h>
    #include <math.h>
    #use delay(clock=20mhz)
    #use i2c(Master,sda=PIN_C4,scl=PIN_C3)

    int seg1_m,seg2_m,seg1_h,seg2_h,s,m,h;
    #define LCD_DATA_PORT 6
    #define LCD_TYPE 2
    #include <lcd.c>
    //void set(){


    void display(){
    lcd_init();
    seg1_m=m%10;
    seg2_m=m/10;
    seg1_h=h%10;
    seg2_h=h/10;
    lcd_gotoxy(1,1);
    printf(lcd_putc,"%x:%x:%x",h,m,s);
    printf(lcd_putc,"\n%x:%x:%x:%x",seg2_h,s eg1_h,seg2_m,seg1_m);
    delay_ms(100);
    }
    void main (){
    while(true){
    i2c_start();
    i2c_write(0xd0);
    i2c_write(0);
    i2c_start();
    i2c_write(0xd1);
    s=i2c_read(1);
    m=i2c_read(1);
    h=i2c_read(0);
    i2c_stop();
    display();
    }}
    [/code]
  4. #4
    2015/11/01
    8
    0

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    کد مربوط به سون سگمنت توش نیست، مشکل من در قسمت تقسیم و باقیمانده این کد هستش اگه ممکنه راهنمایی کنید:
    seg1_m=m%10;
    seg2_m=m/10;
    seg1_h=h%10;
    seg2_h=h/10;
    اینا هیچ کدوم عدد درست رو به دست نمیاره
  5. #5
    2006/08/16
    867
    17

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    به نظر درست میاد. من الان نمیتونم تست کنم. برای مقادیر زیر چی میده؟
    01:05
    11:45
    23:58


    چرا x% نوشتی؟ باید u% باشه. هرچند، عدد زیر 10 هست و فرقی نمیکنه ولی درستش اونه.

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

    عضویت

  6. #6
    2015/11/01
    8
    0

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    با u هم نوشتم اما جواب نداد با سون سگمنتم تست کردم نشد. مثلا واسه 19 تقسیم رو میده 2 باقیمانده هم میده 2

    اضافه شده در تاریخ :
    الان تست کردم برای 18:40 داد:
    2:4:6:5
    یعنی 18 رو داده 2،4 و 40 رو داده 6،5
  7. #7
    2006/08/16
    867
    17

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    من اینو تو پروتیوس تست کردم درست کار میکرد. مشکل شما احتمالاً از چیز دیگست.

    [code=c]#include <16F877a.h>
    #include <math.h>
    #use delay(clock=20000000)
    #use i2c(Master,sda=PIN_C4,scl=PIN_C3)

    int seg1_m,seg2_m,seg1_h,seg2_h,s,m,h;
    #define LCD_DATA_PORT 6
    #define LCD_TYPE 2
    #include <lcd.c>
    //void set(){


    void display(){
    lcd_init();
    seg1_m=m%10;
    seg2_m=m/10;
    seg1_h=h%10;
    seg2_h=h/10;
    lcd_gotoxy(1,1);
    printf(lcd_putc,"%u:%u:%u",h,m,s);
    printf(lcd_putc,"\n%u,%u,%u,%u",seg2_h,s eg1_h,seg2_m,seg1_m);
    delay_ms(100);
    }
    void main (){
    while(true){
    h=18;
    m=40; //gives 1,8,4,0
    s=58;
    display();
    }}
    [/code]

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

    عضویت

  8. #8
    2015/11/01
    8
    0

    پاسخ : راه اتندازی ds1307 و نمایش روی 7seg

    اگه لطف کنید همون کدی که من نوشتم را تست کنید ممنون میشم. وقتی به صورت دستی عدد میدم " همون روش شما" درست کار میکنه اما وقتی از طریق i2c اطلاعات ds1307 رو میخونم و عملیات رو انجام میدم جواب نمیده :angry:

    اضافه شده در تاریخ :
    بعد از بررسی بیشتر متوجه شدم که عددی که ds1307 به ما میده به صورت هگزه و ما باید اونو به دسیمال تبدیل کنیم :applause: حالا اگه با ال سی دی نمایش بیم به راحتی با استفاده از %x در دستور printf عدد بصورت دسیمال نمایش داده میشه. :biggrin: اما برای نمایش روی سون سگمنت ابتدا باید عدد رو به دسیمال تبدیل کنیم.
    حال آیا دستوری تو ccs برای تبدیل هگز به دسیمال هست یا باید کدشو خودم بنویسم؟ oo:

    اضافه شده در تاریخ :
    بالاخره نوشتمش:
    کد c:
    [code=c]
    #include <16F877a.h>
    #include <math.h>
    #use delay(clock=20000000)
    #use i2c(Master,sda=PIN_C4,scl=PIN_C3)
    int seg1_m,seg2_m,seg1_h,seg2_h;
    int s,m,h,a,b,sec,min,hour;
    int seven[10]={0x01,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x0 4};

    void display(){
    seg1_m=sec%10;
    seg2_m=sec/10;
    seg1_h=min%10;
    seg2_h=min/10;

    //saat
    output_d(0b0001);
    output_b(seven[seg2_h]);
    delay_ms(10);
    output_d(0b0010);
    output_b(seven[seg1_h]);
    delay_ms(10);
    // minute
    output_d(0b0100);
    output_b(seven[seg2_m]);
    delay_ms(10);
    output_d(0b1000);
    output_b(seven[seg1_m]);
    delay_ms(10);
    }
    int convert (int value){
    a=value%16;
    b=value/16;
    value=b*10+a;
    return value;
    }

    void main (){
    set_tris_b(0x00);
    set_tris_d(0x00);
    set_tris_c(0x01);
    output_high(pin_b4);
    delay_ms(100);
    while(true){
    i2c_start();
    i2c_write(0xd0);
    i2c_write(0);
    i2c_start();
    i2c_write(0xd1);
    s=i2c_read(1);
    sec=convert(s);
    m=i2c_read(1);
    min=convert(m);
    h=i2c_read(0);
    hour=convert(h);
    i2c_stop();
    display();
    }}
    [/code]
نمایش نتایج: از 1 به 8 از 8

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

  1. نمایش دما برروی 7seg در کدویژن
    توسط hoshang.am در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2015/07/08, 04:06
  2. |مشکل با DS1307| نمایش ساعت و تاریخ به صورت 165:165:165
    توسط masoud9 در انجمن میکروکنترلرهای AVR
    پاسخ: 45
    آخرين نوشته: 2015/01/26, 10:34
  3. نمایش ساعت سیستم روی 7seg از طریق پورت lpt
    توسط hasan1575 در انجمن برنامه نویسی و اینترفیس
    پاسخ: 0
    آخرين نوشته: 2013/01/12, 01:03
  4. نمایش ساعت سیستم روی 7seg از طریق پورت lpt
    توسط hasan1575 در انجمن نرم افزار Proteus
    پاسخ: 3
    آخرين نوشته: 2012/12/21, 08:12
  5. پاسخ: 2
    آخرين نوشته: 2010/02/04, 18:14

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

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

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

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

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