ايران ويج

نسخه‌ی کامل: ماشین حساب
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من می خوام کی پد 4*4 را وصل کنم به میکرو و خروجی اش را روی lcd نمایش بدم
بعوان مثال وقتی کلید 1 زدم 1 نمایش داده شودو اگر پشت سرش 2 زدم بعد یک دو نمایش داده بشه یعنی 12 و...
وقتی c رو زدم عداد را یکی یکی پاک کند مثل ماشین حساب
میخوام عمل جمع ضرب هم انجام بدم
برنامه kypad بصورت زیر نوشتم ولی مشکلی که داره نمیدونم چطور یکبار 1 میزنمیم نمایش داده میشه دوباره 2 رو که میزنم یک پاک میشه دونمایش داده میشه
حتی میخوام جاروب kypad به صورت زیر با شد

کد php:
#include <mega32.h>
#include <delay.h>

unsigned char key

void main(void)
{
while(
1)
      { 
      do{
      
     
DDRA 0x0f;
       
PORTA 0xf0
       
delay_us(100);
       
key PINA;
        
     
       
DDRA 0xf0;
       
PORTA 0x0f
       
delay_us(100);
       
key key PINA;
     
     }while(
key==0xff);
    
     
        
       
          switch(
key)
    {
        case 
0b11101110:    
        
key=1;
        break;
        case 
0b11011110:    
        
key=2;
        break;
        case 
0b10111110:   
        
key=3;
        break;
        case 
0b01111110:    
        
key=4;
        break;
        case 
0b11101101:    
        
key=5;
        break;
        case 
0b11011101:    
        
key=6;
        break;
        case 
0b10111101:    
        
key=7;
        break;
        case 
0b01111101:   
        
key=8;
        break;
        case 
0b11101011:    
        
key=9;
        break;
        case 
0b11011011:    
        
key=10;
        break;
        case 
0b10111011:    
        
key=11;
        break;
        case 
0b01111011:    
        
key=12;
        break;
        case 
0b11100111:    
        
key=13;
        break;
        case 
0b11010111:    
        
key=14;
        break;
        case 
0b10110111:    
        
key=15;
        break;
        case 
0b01110111:    
        
key=16;
        
    }
}

کسی از دوستان راحل شو پیدا نکرد؟؟؟
من فقط می خوام عداد را بصورت رشته روی lcd نمایش بدم
من تو کامپایلر های همچون stdio ,BASIC که در کامپیوتر استفاده میشه
برای این که دوتا عدد یا بیشتر در کنار هم قرارگیرند انان را بصورت کارکتر جمع یا اند میکنیم ولی تو کدویژن این دو عدد بجای این که در کنار هم قرار بگیره جمع میشه
کسی هست دلیلشو بدونه و راحل ش چیه؟؟؟؟؟
سلام.

دلیلش اینه که اون عملگرها در واقع تابع هستن.
برای کار شما، شاید ساده ترین راه اش این باشه که عدد اول که زده شد، در متغیر a ذخیره بشه، عدددوم که زده شد، در متغیر b قرار بگیره و a*=10 بشه و a+=b بشه و رو lcd نمایش داده بشه.
با زدن دکمه ی بعدی باز در b قرار بگیرهه و a*=10 بشه و a+=b بشه و رو lcd نمایش داده بشه.
و ... به همین ترتیب برای ورودی های بعدی. درواقع اینطوری 10 گان و 100 گان و ... رو به ترتیب ایجاد می کنید و عددتون رو بزرگ می کنید.

موفق باشید.
سلام
بله درسته با دو متغیر a,b میشه این کارو کرد
ولی چطور تشخیص بدم عددی که زده شد عدد دوم.
نمیدونم چرا جواب نمیده
کد php:
#include <mega32.h>
#include <stdio.h>
#include <alcd.h>
#include <delay.h>

unsigned char str[16], key

void main(void)
{

lcd_init(16);

while (
1)
      {

      do{ 
      
      
     
DDRA 0x0f;
       
PORTA 0xf0
       
delay_us(100);
       
key PINA;
        
     
       
DDRA 0xf0;
       
PORTA 0x0f
       
delay_us(100);
       
key key PINA;
     
     }while(
key==0xff);
    
     
        
       
       switch(
key)
    {            

        case 
0b11101110:    
        
key=1;
        break;
        case 
0b11011110:    
        
key=2;
        break;
        case 
0b10111110:   
        
key=3;
        break;
        case 
0b01111110:    
        
key=4;
        break;
        case 
0b11101101:    
        
key=5;
        break;
        case 
0b11011101:    
        
key=6;
        break;
        case 
0b10111101:    
        
key=7;
        break;
        case 
0b01111101:   
        
key=8;
        break;
        case 
0b11101011:    
        
key=9;
        break;
        case 
0b11011011:    
        
key=10;
        break;
        case 
0b10111011:    
        
key=11;
        break;
        case 
0b01111011:    
        
key=12;
        break;
        case 
0b11100111:    
        
key=13;
        break;
        case 
0b11010111:    
        
key=14;
        break;
        case 
0b10110111:    
        
key=15;
        break;
        case 
0b01110111:    
        
key=16;
        
    }  
     
lcd_clear();
     
sprintf(str,"key=%d",key);
     
lcd_gotoxy(0,0);
     
lcd_puts(str);
     
      }

سلام
من چند روزی درگیر این پروژه ماشین حسابم نمیدونم چرا جواب نمیده
اگه کسی نمونه پروژه ای در این ضمیمه داره بزاره
مشکل اول قرار دادن کارکتر ها در کنار هم بدو که به نتیجه نرسید
ولی اسکن key pad جور دیگه انجام داد مشکلش حل شد
ولی از اینجا به بعدش نمیدونم چه کار کنم؟؟؟؟
این کد جدید
کد php:
#include <mega32.h>
#include <alcd.h>
#include <delay.h> 
flash char layout[16]={ '7','8','9','/',
                        
'4','5','6','*',
                        
'1','2','3','+',
                        
'C','0','=','-',
                                         };

flash char shift[16]={0XFE,0XFD,0XFB,0xF7};
                
//0x11111110,0x11111101,0x11111011,0x11110111
int r=0,column=-1,position=0;
void main(void)
{                                                 
PORTD=0Xf0;      //11110000
DDRD=0X0f;       //00001111
lcd_init(16);

while (
1)          
      { 
      
//shift dadan portd
      
for(r=0r<4r++ ){
      
PORTD=shift[r];
      
// khondane meghdare PIND.4,PIND.5,PIND.6,PIND.7 
      
if(PIND.4==0){column=0;}// manzor az column hamon stone 
      
if(PIND.5==0){column=1;}
      if(
PIND.6==0){column=2;}
      if(
PIND.7==0){column=3;}
      
//frmole mohasebeh position keypad
      // p=r*4+c
      //6=1*4+2
      
if(column != -1){position=r*4+column
      
lcd_putchar(layout[position]);
      if(
position==12)lcd_clear();
      
column = -1;
      } 
      
delay_ms(50);
      }
      
      }