سلام خدمت همه عزیزان
یه مشکل کوچیک برام پیش اومده بود نتونستم حلش کنم گفتم از اساتید یه کمکی بگیرم ، و اونم این که توی این برنامه که قسمتی از یه برنامه اصلیه این عمل تقسیم کار نمیکنه! البته لازم به ذکره که احتال میدم به علت آشنائی کم بنده با زبان سی هستش و کامپایلر کدویژن ، از دوستان اگه کسی علت و نقص برنامه رو میدونه لطفا راهنمائیم کنه ممنون.
برنامه به این شکله که توسط چند تا کلید یه مقدار عدید بین 0تا9999 تنظیم میشه (که تنظیات روی LCD هم نمایش داده میشه)بعد می خوام این مقدار رشته ای تنظیم شده رو به عدد صحیح تبدیل کنم (تا اینجاش برنامه مشکلی نداره) ولی بعدش می خوام که این عدید تنظیم شده رو روش یه تعداد عملیات ریاضی انجام بدم ولی متاسفانه عمل نمیکنه!
و یه مشکلی هم که دارم اینه که آیا دستوری هستش که عدد رو گرد کنه منظورم اینه که بعد اعمال ریاضی اگه ممیز دار بود ممیز رو گرد کنه و حذف کنه
#include <mega32.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <stdlib.h>
#define set PIND.0
#define up PIND.1
#define down PIND.2
#define shift PIND.3
unsigned char t=0x00,p=0x00;
///////////////////////////////////************************************///////////////////////////////////
void set_counter()
{
unsigned char pointer=1;
unsigned long int num=0;
unsigned char str_num[]="00000";
float s;
/////////////////////////////////////این قسمت مربوط به تنظیم اعداد 0 تا 9999 هستش ////////////////////////////////////
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("Type Frequency"
;
lcd_gotoxy(4,1);
lcd_putsf("0000 KHz"
;
lcd_gotoxy(4,1);
_lcd_ready();
_lcd_write_data(0x0f);
while(set==0);
while(1)
{
if(up==0)
{
if(str_num[pointer]!='9'
str_num[pointer]++;
lcd_putchar(str_num[pointer]);
lcd_gotoxy(pointer+3,1);
while(up==0);
}
if(down==0)
{
if(str_num[pointer]!='0'
str_num[pointer]--;
lcd_putchar(str_num[pointer]);
lcd_gotoxy(pointer+3,1);
while(down==0);
}
if(shift==0)
{
pointer++;
if(pointer==5)pointer=1;
lcd_gotoxy(pointer+3,1);
while(shift==0);
}
if(set==0) goto exit;
}
/////////////////////////////////////پایان قسمت مربوط به تنظیم اعداد 0 تا 9999 هستش ////////////////////////////////////
/////////////////////////////////////////مشکل من تو این قسمته///////////////////////////////
الان اون عدد تنظیم شدهتو بالا تو str_num ذخیره شده توسط دستور num=atoi(str_num); تبدلش می کنم به عدد چون رشته هستش،الان می خوام روی اون T یه اعمال ریاضی انجام بدم ولی وقتی از تقسیم استفاده میکنم خروجی 0میشه!
تو این t ایراد کار از کجاس؟نوع متغیر رو هم flot تعریف کردم چون ممکنه خوذجی اعشاری باشه ولی کلا خروجی 0میشه!!!
و اگه این مشکل حل شد بعد اون یه دستور می خوام اضافه کنم که اگه خروجی اعشاری بود گردش کنه آیا همچین دستوری هست؟اگه نیست آیا روشی برای این کار هست؟
exit:
num=atoi(str_num);
t=num;
s=256-(((1/(1000*t))*0.5)/0.125)
if(t>0)p=0x01;
else p=0x00;
while(set==0);
_lcd_ready() ;
_lcd_write_data(0x0c);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("&&&&&&& ;"
;
s=1/2; -------------------------------->>>>>>>>>>این پارامتر رو همین جوری دادم که ببینم اصلا کار میکنه یا نه ولی خروجی این تقسیم رو 0میده؟؟!!! نوع پرامتر رو هم فلوت تعریف کردم ولی کار نمیکنه!
ltoa(s,str_num);
lcd_gotoxy(0,1);
lcd_puts(str_num);
lcd_gotoxy(5,1);
lcd_putsf("&&&&&"
;
}
ممنون.
یه مشکل کوچیک برام پیش اومده بود نتونستم حلش کنم گفتم از اساتید یه کمکی بگیرم ، و اونم این که توی این برنامه که قسمتی از یه برنامه اصلیه این عمل تقسیم کار نمیکنه! البته لازم به ذکره که احتال میدم به علت آشنائی کم بنده با زبان سی هستش و کامپایلر کدویژن ، از دوستان اگه کسی علت و نقص برنامه رو میدونه لطفا راهنمائیم کنه ممنون.
برنامه به این شکله که توسط چند تا کلید یه مقدار عدید بین 0تا9999 تنظیم میشه (که تنظیات روی LCD هم نمایش داده میشه)بعد می خوام این مقدار رشته ای تنظیم شده رو به عدد صحیح تبدیل کنم (تا اینجاش برنامه مشکلی نداره) ولی بعدش می خوام که این عدید تنظیم شده رو روش یه تعداد عملیات ریاضی انجام بدم ولی متاسفانه عمل نمیکنه!
و یه مشکلی هم که دارم اینه که آیا دستوری هستش که عدد رو گرد کنه منظورم اینه که بعد اعمال ریاضی اگه ممیز دار بود ممیز رو گرد کنه و حذف کنه
#include <mega32.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <stdlib.h>
#define set PIND.0
#define up PIND.1
#define down PIND.2
#define shift PIND.3
unsigned char t=0x00,p=0x00;
///////////////////////////////////************************************///////////////////////////////////
void set_counter()
{
unsigned char pointer=1;
unsigned long int num=0;
unsigned char str_num[]="00000";
float s;
/////////////////////////////////////این قسمت مربوط به تنظیم اعداد 0 تا 9999 هستش ////////////////////////////////////
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("Type Frequency"

lcd_gotoxy(4,1);
lcd_putsf("0000 KHz"

lcd_gotoxy(4,1);
_lcd_ready();
_lcd_write_data(0x0f);
while(set==0);
while(1)
{
if(up==0)
{
if(str_num[pointer]!='9'

lcd_putchar(str_num[pointer]);
lcd_gotoxy(pointer+3,1);
while(up==0);
}
if(down==0)
{
if(str_num[pointer]!='0'

lcd_putchar(str_num[pointer]);
lcd_gotoxy(pointer+3,1);
while(down==0);
}
if(shift==0)
{
pointer++;
if(pointer==5)pointer=1;
lcd_gotoxy(pointer+3,1);
while(shift==0);
}
if(set==0) goto exit;
}
/////////////////////////////////////پایان قسمت مربوط به تنظیم اعداد 0 تا 9999 هستش ////////////////////////////////////
/////////////////////////////////////////مشکل من تو این قسمته///////////////////////////////
الان اون عدد تنظیم شدهتو بالا تو str_num ذخیره شده توسط دستور num=atoi(str_num); تبدلش می کنم به عدد چون رشته هستش،الان می خوام روی اون T یه اعمال ریاضی انجام بدم ولی وقتی از تقسیم استفاده میکنم خروجی 0میشه!
تو این t ایراد کار از کجاس؟نوع متغیر رو هم flot تعریف کردم چون ممکنه خوذجی اعشاری باشه ولی کلا خروجی 0میشه!!!
و اگه این مشکل حل شد بعد اون یه دستور می خوام اضافه کنم که اگه خروجی اعشاری بود گردش کنه آیا همچین دستوری هست؟اگه نیست آیا روشی برای این کار هست؟
exit:
num=atoi(str_num);
t=num;
s=256-(((1/(1000*t))*0.5)/0.125)
if(t>0)p=0x01;
else p=0x00;
while(set==0);
_lcd_ready() ;
_lcd_write_data(0x0c);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("&&&&&&& ;"

s=1/2; -------------------------------->>>>>>>>>>این پارامتر رو همین جوری دادم که ببینم اصلا کار میکنه یا نه ولی خروجی این تقسیم رو 0میده؟؟!!! نوع پرامتر رو هم فلوت تعریف کردم ولی کار نمیکنه!
ltoa(s,str_num);
lcd_gotoxy(0,1);
lcd_puts(str_num);
lcd_gotoxy(5,1);
lcd_putsf("&&&&&"

}
ممنون.
دیدگاه