سلام.
کسی میتونه این برنامه رو برام توضیح بده من تسلط کافی روی این برنامه ندارم.
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include "font.h"
#include "ENG font.c"
#define LED_LEFT PORTA
#define LED_RIGHT PORTB
//================================================== ====
//================================================== ====
unsigned int Angle;
unsigned int One_Degree_OCR_Value;
unsigned int Pixel_Num,Pixel_Count;
unsigned int Code_Table[400];
flash unsigned char Statement[]="somaie zameni";
//================================================== ====
//================================================== ====
void InitDevice()
{
DDRA=0xFF;
DDRB=0xFF;
PORTD=0x04;
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;
TCCR1B=0x03;
TIMSK=0x10;
LED_RIGHT=0xFF;
LED_LEFT=0xFF;
#asm("sei"
;
}
//================================================== ====
//================================================== ====
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
unsigned int n;
if(Angle==180)
Pixel_Count=0;
if(Angle<180)
{
if(Pixel_Count<Pixel_Num)
{
LED_RIGHT=~Code_Table[Pixel_Count];
n=Pixel_Count+180;
if(n<Pixel_Num)
LED_LEFT=~Code_Table[n];
Pixel_Count++;
}
else
LED_RIGHT=0xFF;
}
else
{
if(Pixel_Count<Pixel_Num)
{
LED_LEFT=~Code_Table[Pixel_Count];
n=Pixel_Count+180;
if(n<Pixel_Num)
LED_LEFT=~Code_Table[n];
Pixel_Count++;
}
else
LED_LEFT=0xFF;
}
OCR1A+=One_Degree_OCR_Value;
Angle++;
}
//================================================== ====
//================================================== ====
interrupt [EXT_INT0] void ext_int0_isr(void)
{
One_Degree_OCR_Value=TCNT1/360;
OCR1A=One_Degree_OCR_Value;
TCNT1=0;
Angle=0;
Pixel_Count=0;
}
//================================================== ====
//================================================== ====
void main()
{
unsigned char i=0,j,map,width,ch;
unsigned int offset;
do
{
ch=Statement[i];
map=Eng_Font.mapping_table[ch];
offset=Eng_Font.offset_table[map];
width=Eng_Font.width_table[map];
for(j=0;j<width;j++)
{
Code_Table[Pixel_Count]=Eng_Font.font_table[offset];
Code_Table[Pixel_Count]=(Code_Table[Pixel_Count]<<8)+Eng_Font.font_table[offset+1];
Code_Table[Pixel_Count]>>=4;
Pixel_Count++;
offset+=2;
}
}while(Statement[++i]!='\0'
;
Pixel_Num=Pixel_Count;
Pixel_Count=0;
InitDevice();
while(1)
{
}
}
کسی میتونه این برنامه رو برام توضیح بده من تسلط کافی روی این برنامه ندارم.
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include "font.h"
#include "ENG font.c"
#define LED_LEFT PORTA
#define LED_RIGHT PORTB
//================================================== ====
//================================================== ====
unsigned int Angle;
unsigned int One_Degree_OCR_Value;
unsigned int Pixel_Num,Pixel_Count;
unsigned int Code_Table[400];
flash unsigned char Statement[]="somaie zameni";
//================================================== ====
//================================================== ====
void InitDevice()
{
DDRA=0xFF;
DDRB=0xFF;
PORTD=0x04;
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;
TCCR1B=0x03;
TIMSK=0x10;
LED_RIGHT=0xFF;
LED_LEFT=0xFF;
#asm("sei"

}
//================================================== ====
//================================================== ====
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
unsigned int n;
if(Angle==180)
Pixel_Count=0;
if(Angle<180)
{
if(Pixel_Count<Pixel_Num)
{
LED_RIGHT=~Code_Table[Pixel_Count];
n=Pixel_Count+180;
if(n<Pixel_Num)
LED_LEFT=~Code_Table[n];
Pixel_Count++;
}
else
LED_RIGHT=0xFF;
}
else
{
if(Pixel_Count<Pixel_Num)
{
LED_LEFT=~Code_Table[Pixel_Count];
n=Pixel_Count+180;
if(n<Pixel_Num)
LED_LEFT=~Code_Table[n];
Pixel_Count++;
}
else
LED_LEFT=0xFF;
}
OCR1A+=One_Degree_OCR_Value;
Angle++;
}
//================================================== ====
//================================================== ====
interrupt [EXT_INT0] void ext_int0_isr(void)
{
One_Degree_OCR_Value=TCNT1/360;
OCR1A=One_Degree_OCR_Value;
TCNT1=0;
Angle=0;
Pixel_Count=0;
}
//================================================== ====
//================================================== ====
void main()
{
unsigned char i=0,j,map,width,ch;
unsigned int offset;
do
{
ch=Statement[i];
map=Eng_Font.mapping_table[ch];
offset=Eng_Font.offset_table[map];
width=Eng_Font.width_table[map];
for(j=0;j<width;j++)
{
Code_Table[Pixel_Count]=Eng_Font.font_table[offset];
Code_Table[Pixel_Count]=(Code_Table[Pixel_Count]<<8)+Eng_Font.font_table[offset+1];
Code_Table[Pixel_Count]>>=4;
Pixel_Count++;
offset+=2;
}
}while(Statement[++i]!='\0'

Pixel_Num=Pixel_Count;
Pixel_Count=0;
InitDevice();
while(1)
{
}
}
دیدگاه