میخوام برنامه رو طوری تغییر بدم که بشه 4 رقم رو اسکن کرد وبتونم هر عدد چهار رقمی رو روی سگمنت نشان بدم
الان در این برنامه یک عدد میتونه متغیر باشه و بغیه ثابتند برای اینکه هر 4 دد متغیر باشه چه تغییراتی در برنامه بدم
/************************************************** ***
برنامه اسکن سون سگمنت 4 تایی توسط کیبرد4*4
این برنامه یک عدد یک رقمی را اسکن میکند
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail
ffice@hpinfotech.com
Project :
Version :
Date : 1/12/2008
Author : Mahmood
Company : AVR
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega16.h>
#include <delay.h>
flash char anod[4]={(255-1),(255-2),(255-4),(255-8)};
flash char cathod[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
char n;
unsigned char scan_key(void);
unsigned char code[4][4]={{7,4,1,0},{8,5,2,0},{9,6,3,0},{0,0,0,0}};
void main(void)
{
char j,a,b,c,d;
unsigned char seg[4];
unsigned char key1;
DDRC=255;DDRD=255;PORTC=0;PORTD=0;
seg[0]=0;
seg[1]=0;
seg[2]=0;
seg[3]=0;
PORTA=0x00;
DDRA=0xf0;
while(1){
seg[0]=a;
seg[1]=b;
seg[2]=c;
seg[3]=d;
for(j=0;j<4;j++)
{
PORTC=anod[j];
PORTD=~cathod[seg[j]];
delay_ms(2);
PORTC=255;
delay_us(10);
}
key1=scan_key();
if(key1!=0xff)
{
a=0;b=0;c=0;d=key1;
}
}
}
unsigned char scan_key(void)
{
unsigned char i,data,num_key1,temp;
num_key1=0xff;
temp=0x70;
for(i=0;i<4;i++){
PORTA=temp;
delay_ms(5);
data=PINA & 0x0f;
if(data==0x07)
num_key1=code[0][i];
if(data==0x0B)
num_key1=code[1][i];
if(data==0x0D)
num_key1=code[2][i];
if(data==0x0E)
num_key1=code[3][i];
temp= ((temp>>=1) | 0x80) & 0xF0 ;
}
return num_key1;
}
الان در این برنامه یک عدد میتونه متغیر باشه و بغیه ثابتند برای اینکه هر 4 دد متغیر باشه چه تغییراتی در برنامه بدم
/************************************************** ***
برنامه اسکن سون سگمنت 4 تایی توسط کیبرد4*4
این برنامه یک عدد یک رقمی را اسکن میکند
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 1/12/2008
Author : Mahmood
Company : AVR
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega16.h>
#include <delay.h>
flash char anod[4]={(255-1),(255-2),(255-4),(255-8)};
flash char cathod[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
char n;
unsigned char scan_key(void);
unsigned char code[4][4]={{7,4,1,0},{8,5,2,0},{9,6,3,0},{0,0,0,0}};
void main(void)
{
char j,a,b,c,d;
unsigned char seg[4];
unsigned char key1;
DDRC=255;DDRD=255;PORTC=0;PORTD=0;
seg[0]=0;
seg[1]=0;
seg[2]=0;
seg[3]=0;
PORTA=0x00;
DDRA=0xf0;
while(1){
seg[0]=a;
seg[1]=b;
seg[2]=c;
seg[3]=d;
for(j=0;j<4;j++)
{
PORTC=anod[j];
PORTD=~cathod[seg[j]];
delay_ms(2);
PORTC=255;
delay_us(10);
}
key1=scan_key();
if(key1!=0xff)
{
a=0;b=0;c=0;d=key1;
}
}
}
unsigned char scan_key(void)
{
unsigned char i,data,num_key1,temp;
num_key1=0xff;
temp=0x70;
for(i=0;i<4;i++){
PORTA=temp;
delay_ms(5);
data=PINA & 0x0f;
if(data==0x07)
num_key1=code[0][i];
if(data==0x0B)
num_key1=code[1][i];
if(data==0x0D)
num_key1=code[2][i];
if(data==0x0E)
num_key1=code[3][i];
temp= ((temp>>=1) | 0x80) & 0xF0 ;
}
return num_key1;
}