کد:
فرستنده:
#include <mega32.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15;
#endasm
#include <lcd.h>
#define RD PORTA.0
#define WR PORTA.1
#define INT PINA.2
flash char sine[256]={
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
};
char s1[8];
unsigned char f=1;
char i=0;
float a;
int f1=1;
int f2=5;
int d= 100;
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
OCR1A=sine[i];
i=i+f;
if(i==255)
i=0;
}
void main(void)
{
DDRA=0x07;
DDRB=0x00;
DDRD=0xFF;
TCCR1A=0x81;
TCCR1B=0x09;
TIMSK=0x10;
WR=1;
lcd_init(16);
while (1)
{
WR=0;
delay_us(2);
WR=1;
RD=0;
delay_ms(20);
a=PINB;
PINA.2=0;
if (PINA.2==1)
{
#asm("sei");
if(PINB.0==1) //0
{
f=f1;
}
else if(PINB.0==0)
{
f=f2;
}
delay_ms(d);
if(PINB.1==1) //1
{
f=f1;
}
else if(PINB.1==0)
{
f=f2;
}
delay_ms(d);
if(PINB.2==1) //2
{
f=f1;
}
else if(PINB.2==0)
{
f=f2;
}
delay_ms(d);
if(PINB.3==1) //3
{
f=f1;
}
else if(PINB.3==0)
{
f=f2;
}
delay_ms(d);
if(PINB.4==1) //4
{
f=f1;
}
else if(PINB.4==0)
{
f=f2;
}
delay_ms(d);
if(PINB.5==1) //5
{
f=f1;
}
else if(PINB.5==0)
{
f=f2;
}
delay_ms(d);
if(PINB.6==1) //6
{
f=f1;
}
else if(PINB.6==0)
{
f=f2;
}
delay_ms(d);
if(PINB.7==1) //7
{
f=f1;
}
else if(PINB.7==0)
{
f=f2;
}
delay_ms(d);
#asm("cli");
};
a=(a*0.0200784);
RD=1;
lcd_clear();
ftoa(a,2,s1);
lcd_puts(s1);
}
}