PDA

View Full Version : AVR



آرام جان گل
یک شنبه 29 آذر 1388, 01:01 صبح
با سلام
غرض از مزاحمت من برنامه ای به زبان c نوشته ام که عدد را از صفحه کلید می خواند و روی سون سگمنت نمایش می دهد اما الان با مشکلی بر خوردم من می خواهم یک عدد چهر رقمی را با صفحه کلید وارد کنم و این عدد چهار رقمی را روی چهار سون سگمنت مجزا به صورت تک رقمی نمایش دهد مثلا من میزنم 1234 هر کدام از ارقام را روی یک سگمنت نمایش . میدانم که باید عددی که از صفحه کلید خوانده میشه در یک متغیر بریزم و سپس ارقام آن را جدا کنم من کد زیر را نوشتم ولی اصلا جواب نمی دهد خواهش می کنم کمکم کنید


#include <mega32.h>
#include <delay.h>
#define c1 PINB.4
#define c2 PINB.5
#define c3 PINB.6
#define c4 PINB.7
flash char row[]={0xfe,0xfd,0xfb,0xf7};
flash char data_key[]={
0x06,0x5b,0x4f,0x77,
0x66,0x6d,0x7d,0x7c,
0x07,0x7f,0x6f,0x39,
0x71,0x3f,0x79,0x5e
};
unsigned char ac,table;
unsigned int r;
flash unsigned char C7seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f};
unsigned char part1=0,part2=0,part3=0,part4=0;
void HEX_to_seg(unsigned char k){
part4=C7seg[k%10];
part3=C7seg[k/10%10];
part2=C7seg[k/10/10];
part1=C7seg[0];
}
void keypad(){
while(1){
for(r=0;r<4;r++){
ac=4;
PORTB=row[r];
DDRB=0x0F;
if(c1==0) ac=0;
if(c2==0) ac=1;
if(c3==0) ac=2;
if(c4==0) ac=3;
if(!(ac==4)){
table=data_key[(r*4)+ac];
PORTA=table;
while(c1==0){}
while(c2==0){}
while(c3==0){}
while(c4==0){}
delay_ms(50);
}
}
}
}
void main()
{
unsigned char number=0;
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x0F;
keypad();
PORTC=0x00;
DDRC=0xFF;
while (1){
number=PINB;
HEX_to_seg(number);
PORTC=0b00001110;
PORTA=part1;
delay_ms(5);
PORTC=0b00001101;
PORTA=part2;
delay_ms(5);
};
}

با تشکر