امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
چرا کیپد رو یکبار می زنم،چندبار عدد نشون میده
نویسنده پیام
alikiller990 آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 5
تاریخ عضویت: فروردین ۱۳۹۴

تشکرها : 9
( 0 تشکر در 0 ارسال )
ارسال: #1
چرا کیپد رو یکبار می زنم،چندبار عدد نشون میده
سلام.
وقتی یکی از اعداد روی کیپد رو میزنم:بجای یکبار چندبار نشون داده میشه؟چطوری میشه این مشکلو حل کرد؟
این کد برنامه است.اگه با دستور خاصی حل میشه،لطفا بگید چه چیزی رو کجا قرار بدم
کد:
#include <mega16a.h>
#include <delay.h>
#include <lcd.h>
#include <stdlib.h>
#include <math.h>

#asm
   .equ __lcd_port=0x18
#endasm
//#############################################
int key(void);
float _Main(void);
void Mohandes(void);
void Mohasebe(void);
void Alamat(int,int);
float Emoji(int);
//#############################################
float a = 0 , b = 0 , c = 0 , q , t;
int i ;
char y=0 , lcd[25] , z   ;
//#############################################
void main(void){

DDRB=0x0F;
DDRC=0x07;
DDRD=0x0F;

lcd_init(16);
while (1){
_Main();
}
}
//#############################################################
float _Main(void){
int Loop = 1 ;
y = key();
if( y == 15 ){a = 0 ;b = 0 ;c = 0 ;lcd_clear();return 0 ;}
if( y < 10 ){
        a = (a*10)+y ;
        itoa(y , lcd);
        lcd_puts(lcd);
        delay_ms(50);
}



if( y > 9 && y < 16 ){
        if( y == 15 ){a = 0 ;b = 0 ;c = 0 ;lcd_clear();return 0 ;}
        z = y ;
        Alamat(y,1);
        while(Loop){
        y = key();
        if( y == 15 ){a = 0 ;b = 0 ;c = 0 ;lcd_clear();return 0 ;}
        if( y < 10 ){
                b = (b*10)+y ;
                itoa(y , lcd);
                lcd_puts(lcd);
                delay_ms(50);
        }else if(y == 14){
                lcd_putchar('=');
                Mohasebe();
                y = 0 ;
                Loop = 0 ;
        }
        }
}
if( y > 15 ){
lcd_clear();
a= 0 ; b = 0 ; c = 0;
Alamat(y , 2);
z = y ;
Loop = 1 ;
while(Loop){
y = key();
if( y == 15 ){a = 0 ;b = 0 ;c = 0 ;lcd_clear();return 0 ;}
if(y <  10){
        a = (a*10) + y ;
        itoa(y , lcd);
        lcd_puts(lcd);
        delay_ms(50);
}else if ( y == 14){
        lcd_putchar('=');
        Mohandes();
}
Loop = 1 ;
}
}
return 0;
}
//##########################################################
void Mohasebe(void){                                          
if(z == 10)c = a / b ;
if(z == 11)c = a * b ;
if(z == 12)c = a - b ;
if(z == 13)c = a + b ;
ftoa(c , 3 , lcd);            
lcd_puts(lcd);
delay_ms(100);
}
//#########################################################
float Emoji(int rr){
q=1;
for(i=0;i<rr;i++)q = q * 2.71728 ;
return q;    
}
//#########################################################  
void Mohandes(void){
t = (3.1415926535897932384626433832795/180)*a ;
if(z == 16)c = sin(t) ;
if(z == 17)c = cos(t) ;
if(z == 18)c = tan(t) ;
if(z == 19)c = 1/tan(t) ;
if(z == 20)c = asin(t) ;
if(z == 21)c = acos(t) ;
if(z == 22)c = log(a) ;
if(z == 23)c = sqrt(a) ;
if(z == 24)c = Emoji(a) ;
ftoa(c , 3 , lcd);            
lcd_puts(lcd);
delay_ms(100);
}
//#########################################################
void Alamat(int Moji,int Halat){
if(Halat == 1){
        if(Moji == 10)lcd_putchar('/') ;
        if(Moji == 11)lcd_putchar('*') ;
        if(Moji == 12)lcd_putchar('-') ;
        if(Moji == 13)lcd_putchar('+') ;
        delay_ms(100);      
}
if(Halat == 2){
        if(Moji == 16)lcd_putsf("Sin ") ;
        if(Moji == 17)lcd_putsf("Cos ") ;
        if(Moji == 18)lcd_putsf("Tan ") ;
        if(Moji == 19)lcd_putsf("Cot ") ;  
        if(Moji == 20)lcd_putsf("aSin") ;
        if(Moji == 21)lcd_putsf("aCos") ;
        if(Moji == 22)lcd_putsf("Log ") ;
        if(Moji == 23)lcd_putsf("Sqrt ") ;  
        if(Moji == 24)lcd_putsf("exp ") ;
        delay_ms(100);

}
}
//#########################################################
int key(void){
char KEY = 1 ;
while(KEY){

        PORTD.0 = 1 ;
        PORTD.1 = 0 ;
        PORTD.2 = 0 ;
        PORTD.3 = 0 ;
        if(PIND.4 == 1){return 7 ; KEY = 0;delay_ms(50);}    
        if(PIND.5 == 1){return 8 ; KEY = 0;delay_ms(50);}    
        if(PIND.6 == 1){return 9 ; KEY = 0;delay_ms(50);}  
        if(PIND.7 == 1){return 10; KEY = 0;delay_ms(50);}      
        //==========================================
        PORTD.0 = 0 ;
        PORTD.1 = 1 ;
        PORTD.2 = 0 ;
        PORTD.3 = 0 ;
        if(PIND.4 == 1){return 4 ; KEY = 0;}    
        if(PIND.5 == 1){return 5 ; KEY = 0;}    
        if(PIND.6 == 1){return 6 ; KEY = 0;}
        if(PIND.7 == 1){return 11; KEY = 0;}      
        //==========================================
        PORTD.0 = 0 ;
        PORTD.1 = 0 ;
        PORTD.2 = 1 ;
        PORTD.3 = 0 ;
        if(PIND.4 == 1){return 1 ; KEY = 0;}        
        if(PIND.5 == 1){return 2 ; KEY = 0;}      
        if(PIND.6 == 1){return 3 ; KEY = 0;}      
        if(PIND.7 == 1){return 12; KEY = 0;}        
        //==========================================
        PORTD.0 = 0 ;
        PORTD.1 = 0 ;
        PORTD.2 = 0 ;
        PORTD.3 = 1 ;
        if(PIND.4 == 1){return 15; KEY = 0;}        
        if(PIND.5 == 1){return 0 ; KEY = 0;}        
        if(PIND.6 == 1){return 14; KEY = 0;}      
        if(PIND.7 == 1){return 13; KEY = 0;}

        //=============================================================================
        PORTC.0 = 1 ;
        PORTC.1 = 0 ;
        PORTC.2 = 0 ;
        if(PINC.5 == 1){return 16 ; KEY=0;}
        if(PINC.6 == 1){return 17; KEY=0;}
        if(PINC.7 == 1){return 18 ; KEY=0;}
        //=====================================================
        PORTC.0 = 0 ;
        PORTC.1 = 1 ;
        PORTC.2 = 0 ;
        if(PINC.5 == 1){return 19 ; KEY=0;}        
        if(PINC.6 == 1){return 20 ; KEY=0;}
        if(PINC.7 == 1){return 21 ; KEY=0;}
        //=====================================================
        PORTC.0 = 0 ;
        PORTC.1 = 0 ;
        PORTC.2 = 1 ;
        if(PINC.5 == 1){return 22 ; KEY=0;}
        if(PINC.6 == 1){return 23 ; KEY=0;}
        if(PINC.7 == 1){return 24 ; KEY=0;}

KEY = 1 ;      
}
}
//############################################################
۱۱-خرداد-۱۳۹۴, ۲۱:۳۸:۵۶
ارسال‌ها
پاسخ
milad15m آفلاین
عضو افتخاری
****

ارسال‌ها: 460
موضوع‌ها: 17
تاریخ عضویت: شهریور ۱۳۹۳

تشکرها : 1649
( 547 تشکر در 237 ارسال )
ارسال: #2
RE: چرا کیپد رو یکبار می زنم،چندبار عدد نشون میده
سلام

وقتی کلید رو میزنی یکم میکشه که کاملا کنتاکت کننه و چند با قطع و وصل میشه و چون سرعت میکرو بالاست اون رو چند بار زدن کلید حساب میکنه ولی توی سی نمیدونم چطوری میشه حل کرد یه تاخیری چیزی بعد دستورت بزار شاید حل شد اگه بسکام هم می نویسی در خدمت ام.

Exclamationبیستون کندن فرهاد نه کاریست شگفت
شور شیرین به سر هر که فتد کوهکن استExclamation

میلاد منافی
(آخرین ویرایش در این ارسال: ۱۱-خرداد-۱۳۹۴, ۲۲:۱۲:۲۱، توسط milad15m.)
۱۱-خرداد-۱۳۹۴, ۲۲:۱۱:۲۱
ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, 1نفر
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #3
RE: چرا کیپد رو یکبار می زنم،چندبار عدد نشون میده
شما یه ذره باید توی برنامه تغییر بدی
اول به محض اینکه کلید رو تشخیص دادی return نکن عددو توی یه متغییر بریز
بعد صبر کن تا کلید رها بشه
بعدش اونو return کن
----
توی کدی که نوشتی دستوراتی که بعد از return ها نوشتی هیچ وقت اجرا نمی شن! چرا نوشتی اونا رو؟!!

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
۱۲-خرداد-۱۳۹۴, ۱۰:۲۵:۳۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, 1نفر
alikiller990 آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 5
تاریخ عضویت: فروردین ۱۳۹۴

تشکرها : 9
( 0 تشکر در 0 ارسال )
ارسال: #4
RE: چرا کیپد رو یکبار می زنم،چندبار عدد نشون میده
برنامه ی ماشین حسابه خودم ننوشتم اما درست اجرا میشه فقط مشکلش نمایش چند عدد با یکبار فشردن کلید هست
اینم که شما میگی میتونی دستورشو بنویسی و بگی کدوم قسمت قرارش بدم؟
۱۲-خرداد-۱۳۹۴, ۱۴:۲۹:۳۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  تبدیل اعداد نشون داده شده روی سون سگمنت به عدد saeedsmk 2 1,761 ۰۶-اردیبهشت-۱۳۹۷, ۲۱:۵۹:۳۵
آخرین ارسال: 1نفر
  [فوری] کنترل سرعت موتور با کیپد kurd9691 0 2,231 ۱۴-اردیبهشت-۱۳۹۵, ۱۶:۵۷:۴۶
آخرین ارسال: kurd9691
Question مشکل در برنامه ی تایپ با کیپد 4×4 salehjg 4 7,249 ۲۵-اردیبهشت-۱۳۹۴, ۱۸:۲۵:۰۳
آخرین ارسال: z20
  [سوال] lمشکل در راه اندازی کیپد 4*4 majid mir 11 10,408 ۰۲-آذر-۱۳۹۰, ۰۱:۵۸:۵۷
آخرین ارسال: علي برقي
  برنامه نویسی با خیال راحت ,که میکرو کارش رو درست انجام میده! EBKA 2 4,021 ۰۶-شهریور-۱۳۸۹, ۱۴:۰۹:۲۲
آخرین ارسال: maxn@morteza
Question مشکل با کیپد در پورتC در Mega32 salehjg 2 3,918 ۰۷-دى-۱۳۸۸, ۱۷:۲۱:۵۲
آخرین ارسال: salehjg

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS