پروژه های ramin.yousefi2@gmail.com AVR,ARM,PIC,8051

لطفا ایمیل بزنید

برنامه شمارنده 0 تا 7 و همچنین ارتباط با کلید
 

در حالت معمول چراغ های بیت صفر و یک و دو به صورت بالا شمار روشن می شوند و با زدن کلیدهای ورودی نیز می توان آنها را به صورت جداگانه روشن کرد. 



#include "at91sam7s64.h"
void ledshow(void);
void delay(unsigned long int i);
void ledinit(void);
void ledrun(void);
void ledoff(unsigned char no);
void ledon(unsigned char no);
void ledalloff(void);
void ledallon(void);
void keyinit(void);
unsigned char getkey(void);
int main(void)
{
unsigned char i;
ledshow();
for(;;)
{
i=getkey();
if(i==0)
ledalloff();
else if(i==1)
ledon(1);
else if(i==2)
ledon(2);
else if(i==3)
ledon(3);
else if(i==4)
ledallon();
else;
}
}
void ledshow(void)
{
ledrun();
delay(2000000);
ledalloff();
delay(2000000);
ledon(1);
delay(2000000);
ledon(2);
delay(2000000);
ledon(3);
delay(2000000);
ledoff(3);
delay(2000000);
ledoff(2);
delay(2000000);
ledoff(1);
delay(2000000);
ledallon();
delay(2000000);
ledalloff();
delay(2000000);
}
void delay(unsigned long int i)
{
for(;i>0;i--);
}
// Init LED I/O
void ledinit(void)
{
*AT91C_PMC_PCER|=0x00000007; //baraye tozihate pointer ha
*AT91C_PIOA_PER|=0x00000007; //name pointer ro tu file
*AT91C_PIOA_OER|=0x00000007; //at91sam7s64.h search konid.
}
// LED RUN
void ledrun(void)
{
unsigned char i;
ledinit();
for(i=0;i<8;i++) //adad 1 ta 7 ro be surat binary
{ // namayesh mide.
*AT91C_PIOA_SODR|=i;
delay(3000000);
*AT91C_PIOA_CODR|=i;
delay(3000000);
}
}
// LED OFF
void ledoff(unsigned char no)
{
ledinit();
if(no==1)
*AT91C_PIOA_SODR|=0x00000001;
if(no==2)
*AT91C_PIOA_SODR|=0x00000002;
if(no==3)
*AT91C_PIOA_SODR|=0x00000004;
}
// LED ON
void ledon(unsigned char no)
{
int l=1;
int k;
ledinit(); // in tabe ro mishe moshabeh
for(k = 2 ; k <= no ; k++) // tabe ye "LED OFF " nevesht
{ // ama be in surat hajme kamtari migire.
l = 2 * l ;
}
*AT91C_PIOA_CODR|= l;
}
// LED All Off
void ledalloff(void)
{
ledinit();
*AT91C_PIOA_SODR|=0x00000007;
}
// LED All On
void ledallon(void)
{
ledinit();
*AT91C_PIOA_CODR|=0x00000007;
}
void keyinit(void)
{
*AT91C_PMC_PCER|=0x00918000; //baraye tozihate pointer ha
*AT91C_PIOA_PER|=0x00918000; //name pointer ro tu file
*AT91C_PIOA_ODR|=0x00918000; //at91sam7s64.h search konid.
*AT91C_PIOA_SODR|=0x00918000;
*AT91C_PIOA_IDR|=0x00918000;
*AT91C_PIOA_IFDR|=0x00918000;
*AT91C_PIOA_PPUER|=0x00918000;
}
unsigned char getkey(void)
{
unsigned char keyvalue=0;
keyinit();
if((*AT91C_PIOA_PDSR&0x00918000)==0x00918000) //NO KEY PRESS
keyvalue=0;
else if((*AT91C_PIOA_PDSR&0x00918000)==0x00910000) //KEY1 PRESSED
keyvalue=1;
else if((*AT91C_PIOA_PDSR&0x00918000)==0x00908000) //KEY2 PRESSED
keyvalue=2;
else if((*AT91C_PIOA_PDSR&0x00918000)==0x00118000) //KEY3 PRESSED
keyvalue=3;
else if((*AT91C_PIOA_PDSR&0x00918000)==0x00818000) //KEY4 PRESSED
keyvalue=4;
else
keyvalue=0xf;
return(keyvalue);
}