دسته بندی نشده

نمایش عدد اعشاری

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

برای این کار یک نمونه برنامه در ادامه مطلب موجود است که میتوانید با دانلود آن از این روش استفاده کنید

این هم کل برنامه ای که برای این پروژه داخل کدویژن نوشته شده :

#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>

#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

unsigned char adc_data;
#define ADC_VREF_TYPE 0x20

interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCH;
}

unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
#asm
    in   r30,mcucr
    cbr  r30,__sm_mask
    sbr  r30,__se_bit | __sm_adc_noise_red
    out  mcucr,r30
    sleep
    cbr  r30,__se_bit
    out  mcucr,r30
#endasm
return adc_data;
}

unsigned int w24=65535;
char str[16],c1;
float f1;
void main(void)
{
PORTA=0x00;DDRA=0x00;
PORTB=0x00;DDRB=0xFF;
PORTC=0x00;DDRC=0x00;
PORTD=0x00;DDRD=0xFF;

TCCR0=0x00;TCNT0=0x00;OCR0=0x00;
TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;
ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;
ASSR=0x00;TCCR2=0x00;
TCNT2=0x00;OCR2=0x00;
MCUCR=0x00;MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8B;
lcd_init(16);
#asm(“sei”)
while (1)
      {
        lcd_clear();
        lcd_gotoxy(0,0);       
        lcd_putsf(“Read_ADC=”);
        c1=read_adc(0);
        itoa(c1,str);
        lcd_puts(str);

        lcd_gotoxy(0,1);       
        lcd_putsf(“Voltage=”);
        f1=c1;
        f1=f1*0.019607843;   // 5V/255=0.019607843
        ftoa(f1,3,str);

چون ای دی سی ما روی 0 تا 255 تنظیم شده باید 5 ولت را بر 255 تقسیم کنید . حال اگر عدد بدست آمده از ای دی سی را در این عدد (0.019607843
) ضرب کنیم ولتاژ بدست می آید
.

         lcd_puts(str);
        delay_ms(100);
        PORTD=~PORTD;
      };
}

 

download1 CodeVision AVR 2.04.4a.zipدانلود مستقیم

size1 CodeVision AVR 2.04.4a.zip حجم فایل : 179 کیلو بایت

lock1 CodeVision AVR 2.04.4a.zip پسورد فایل : www.roboticngo.com

برچسب ها

نوشته های مشابه

‫15 نظرها

  1. اگه اسمبلی نمیدونین از این استفاده کنین
    Dim A As Single , C As String * 6
    A = / 1.057
    C = Fusing(a , “00.000”)
    Lcd C
    End

  2. با سلام و خسته نباشيد
    برنامه تون واقعا عالي بود ولي راستش من زياد از ساختار و نحوه كاركرد برنامه متوجه نشدم
    منظورم اينه كه نفهميدم آخرش يه متغير اعشاري رو چطوري روي ال سي دي نمايش بدم
    يه برنامه برام بفرستين كه توش يه متغير اعشاري با سه رقم اعشار تعريف شده و پس از يه توقف كوتاه ، يه ميزان اعشاري خاص به اون اضافه ميشه
    اصلا نحوه تعريف متغير اعشاري و نمايشش روي ال سي دي رو بهم نشون بدين ،بقيش مياد دستم.
    اگه به ايميلم ارسالش كنين ممنون ميشم

    1. سلام
      برای نمایش یک عدد اعشاری اولین چیزی که باید رعایت بشه اینه که خود متغییر از جنس اعشاری باشه.
      برای این کار باید متغییرتون از نوع float یا double تعریف بشه.
      —————
      حالا
      تابع ftoa تابعی هست که عدد اعشاری رو با هر میزان اعشار به رشته تبدیل می کنه.
      که ساختارش به شکل زیر هست:
      (void ftoa(float number , unsigned char decimals , char *str
      اولین ورودی از سمت چپ اسم متغییرتون هست دومین ورودی تعداد اعشار و سومی رشته ی تبدیل شده ی می باشد.
      سپس
      باید این رشته ی تبدیل شده را به واسطه ی تابع زیر چاپ کنید.
      ()lcd_puts
      —————
      در ضمن برای استفاده از تابع ftoa باید کتابخونه ی stdlib رو include کنید.
      —————
      با ورود و طرح سوال در تالار گفتمان انجمن پژوهشگران رباتیک می توانید سوالات خود را حل کنید.
      لذا از این پس سوالات خود را در forum.RoboticNGO.com مطرح کنید.
      —————
      با تشکر S_Ahmad

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن