以前學的AVR寫的一些程序,分享一下
#include
#include
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include
#define uchar unsigned char
#define uint unsigned int
uchar ge=0,shi=0;
uchar key_value=0;
void lay_ms(uint ms)
{
uint x,y;
for(x=0;x
{
for(y=0;y<1141;y++);
}
}
uchar keyscan()
{
uchar i,j,temp,Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};//1110 1101 1011 0111
for(j=0; j<4; j++)
{
PORTA = Buffer[j];
lay_ms(2);
temp=0x01;
for(i=0; i<4; i++)
{
if(!(PINA & temp))
{
return ((i+j*4)+1);
}
temp=temp<<1;
}
}
}
void display(uchar m)
{
if(m)
{
lcd_clear();
lay_ms(15);
lcd_putsf("the key number :");
ge=(m-56)+48;
shi=((m-56)/10)+48;
lcd_gotoxy(6,1);
lcd_putchar(shi);
lcd_putchar(ge);
lay_ms(100) ;
m=0;
}
}
void key_16()
{
if((PINC&0X0F)!=0X0F)
{
lay_ms(20);
if((PINA&0X0F)!=0X0F)
{
key_value=keyscan();
// key_value=55;
while((PINA&0X0F)!=0X0F);
lay_ms(5);
while((PINA&0X0F)!=0X0F);
}
}
}
void main(void)
{
PORTA=0x0F;
DDRA=0xF0;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
lcd_clear();
lcd_putsf("the key number :");
while (1)
{
key_16();
printf("%d\n",key_value-48);
display(key_value);
PORTA=0X0f;
};
}
|