![]() |
#2
Dongtengpeng2012-04-02 10:37
|

#include<reg51.h>
#define SEG 17 //每帧图片分成17列里显示
#define INteRVAL 20 //每幅图片在左右摇摆20次后换下一幅
typedef unsigned char uchar;
typedef unsigned int uint;
code char pattern[17][3]=
{//3幅图片的字模
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0x9f,0xff},
{0xff,0x6f,0xf9},
{0xff,0x77,0x65},
{0xfe,0xbb,0x1e},
{0x7e,0xdd,0xfe},
{0x00,0xee,0xfe},
{0x7e,0xdd,0xfe},
{0xfe,0xbb,0x1e},
{0xff,0x77,0x65},
{0xff,0x6f,0xf9},
{0xff,0x9f,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
};
uchar phase,th1,tl1,index,count;
main()
{
EA=0;
EX0=1;
ET1=1;
PX0=1;
IT0=1;
TMOD=0x11;
index=0;
EA=1;
while(1) { }
} void
Int0_Handle(void)
interrupt 0 using 1
{
uint t0_time;
TR0=0;
TR1=0;
TF1=0;
t0_time=TH0<<8|TL0;
TL0=0;
TH0=0;
TR0=1;
t0_time=65535-t0_time/SEG;
th1=t0_timr/256;
TH1=th1;
tl1=t0;
if (count<3*INTERVAL)
{//三幅图片循环
count++;
}
else
count=0;
index=count/INTERVAL;
if (th1!=0xff || tl1!=0xff) //如果摆动特别慢,定时器溢出就不显示
{
phase=0;
tr1=1;
}
else
TR1=1;
} void
Timer1(void) interrupt 3 using 3
{
if (phase<SEG) //17段依次显示
{
p1=pattern[phase][index];
phase++;
TH1=th1;
TL1=tl1l
}
}
这是替一个同学问的,他说他是要做什么电具的LED灯,我也不清楚。最后能解释每一句的意思。。。 #define SEG 17 //每帧图片分成17列里显示
#define INteRVAL 20 //每幅图片在左右摇摆20次后换下一幅
typedef unsigned char uchar;
typedef unsigned int uint;
code char pattern[17][3]=
{//3幅图片的字模
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0x9f,0xff},
{0xff,0x6f,0xf9},
{0xff,0x77,0x65},
{0xfe,0xbb,0x1e},
{0x7e,0xdd,0xfe},
{0x00,0xee,0xfe},
{0x7e,0xdd,0xfe},
{0xfe,0xbb,0x1e},
{0xff,0x77,0x65},
{0xff,0x6f,0xf9},
{0xff,0x9f,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
};
uchar phase,th1,tl1,index,count;
main()
{
EA=0;
EX0=1;
ET1=1;
PX0=1;
IT0=1;
TMOD=0x11;
index=0;
EA=1;
while(1) { }
} void
Int0_Handle(void)
interrupt 0 using 1
{
uint t0_time;
TR0=0;
TR1=0;
TF1=0;
t0_time=TH0<<8|TL0;
TL0=0;
TH0=0;
TR0=1;
t0_time=65535-t0_time/SEG;
th1=t0_timr/256;
TH1=th1;
tl1=t0;
if (count<3*INTERVAL)
{//三幅图片循环
count++;
}
else
count=0;
index=count/INTERVAL;
if (th1!=0xff || tl1!=0xff) //如果摆动特别慢,定时器溢出就不显示
{
phase=0;
tr1=1;
}
else
TR1=1;
} void
Timer1(void) interrupt 3 using 3
{
if (phase<SEG) //17段依次显示
{
p1=pattern[phase][index];
phase++;
TH1=th1;
TL1=tl1l
}
}