1. Salah satu contoh rangkaian digital adalah running LED.
2. Running LED merupakan bentuk sederhana dari rangkaian digital yang biasa digunakan sehari-hari.
3. Running LED dapat berupa dalam berbagai bentuk tergantung bagaimana kita memvariasikannya. Dapat berupa nama ataupun hanya sekedar garis saja.
FLOWCHART RUNNING LED
CONTOH LISTING RUNNING LED
include <at89x51.h>
#define ResetCol P1_0
#define NextCol P1_1
#define PortData P0
#define PortCtrl P1
#define CycleTime 3600/100
#define DelayTime 30
#define DispWidth 32
unsigned char ColomX,CycleCounter,BufferDisplay[DispWidth],BufferHiden[DispWidth];
bit OneCycle;
#define ShortDelay _asm nop _endasm;
code unsigned char YCcorpStart[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
code unsigned char YCcorp[]={
0xfe,0x33,0x33,0xfe,0x00,0x00,0xff,0x1c,0x36,0x63,0xc0,0x00,0x00,0x7f,0xc0,0xc0,
0x7f,0x00,0x00,0x00,0xff,0x03,0x02,0xfe,0x02,0x03,0xff,0x00,0x00,0xfe,0x33,0x33,
0xfe,0x00,0x00,0x7f,0xc0,0xc0,0x7f,0x00,0x00,0x00,0xff,0x0c,0x18,0x30,0xff,0x00,
0x00,0xff,0x00,0x00,0xff,0xc0,0xc0,0xc0,0x00,0x00,0xfe,0x33,0x33,0xfe,0x00,0x00,
0xff,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x33,0x33,0xfe,0x00,0x00,0x01};
code unsigned char YCcorpEnd[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void timer0_handler(void) interrupt 1
{
PortData=0;
if(ColomX==DispWidth)
{
ColomX=0;
ResetCol=1;
ShortDelay;
ResetCol=0;
}
else
{
NextCol=1;
ShortDelay;
NextCol=0;
}
PortData=BufferDisplay[ColomX++];
if(!--CycleCounter)
{
CycleCounter=CycleTime;
OneCycle=1;
}
}
void LoadImage2Buffer(data char *p,code unsigned char *Image)
{
unsigned char ctr;
for(ctr=0;ctr<DispWidth;ctr++)
{
*p++=*Image++;
}
}
void ClearBuffer(data char *Disp)
{
LoadImage2Buffer(Disp,YCcorpStart);
}
void ShiftImageUp()
{
unsigned char ctr,tmp;
for(ctr=0;ctr<DispWidth;ctr++)
{
tmp=BufferDisplay[ctr];
BufferDisplay[ctr]=BufferDisplay[ctr]>>1|BufferHiden[ctr]<<7;
BufferHiden[ctr]=BufferHiden[ctr]>>1|tmp<<7;
}
}
void Delay(unsigned char DT)
{
do
{
while(!OneCycle);
OneCycle=0;
}
while(--DT);
}
void main()
{
unsigned char ctr1,ctr2;
code unsigned char *Image;
ColomX=0;
CycleCounter=CycleTime;
PortData=PortCtrl=0;
TMOD=2;
TH0=0;
EA=TR0=ET0=1;
while(1)
{
//tampilkan tulisan
Image=YCcorpStart;
while(Image<=YCcorpEnd)
{
LoadImage2Buffer(BufferDisplay,Image);
Image++;
Delay(DelayTime);
}
}
}
#define ResetCol P1_0
#define NextCol P1_1
#define PortData P0
#define PortCtrl P1
#define CycleTime 3600/100
#define DelayTime 30
#define DispWidth 32
unsigned char ColomX,CycleCounter,BufferDisplay[DispWidth],BufferHiden[DispWidth];
bit OneCycle;
#define ShortDelay _asm nop _endasm;
code unsigned char YCcorpStart[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
code unsigned char YCcorp[]={
0xfe,0x33,0x33,0xfe,0x00,0x00,0xff,0x1c,0x36,0x63,0xc0,0x00,0x00,0x7f,0xc0,0xc0,
0x7f,0x00,0x00,0x00,0xff,0x03,0x02,0xfe,0x02,0x03,0xff,0x00,0x00,0xfe,0x33,0x33,
0xfe,0x00,0x00,0x7f,0xc0,0xc0,0x7f,0x00,0x00,0x00,0xff,0x0c,0x18,0x30,0xff,0x00,
0x00,0xff,0x00,0x00,0xff,0xc0,0xc0,0xc0,0x00,0x00,0xfe,0x33,0x33,0xfe,0x00,0x00,
0xff,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x33,0x33,0xfe,0x00,0x00,0x01};
code unsigned char YCcorpEnd[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void timer0_handler(void) interrupt 1
{
PortData=0;
if(ColomX==DispWidth)
{
ColomX=0;
ResetCol=1;
ShortDelay;
ResetCol=0;
}
else
{
NextCol=1;
ShortDelay;
NextCol=0;
}
PortData=BufferDisplay[ColomX++];
if(!--CycleCounter)
{
CycleCounter=CycleTime;
OneCycle=1;
}
}
void LoadImage2Buffer(data char *p,code unsigned char *Image)
{
unsigned char ctr;
for(ctr=0;ctr<DispWidth;ctr++)
{
*p++=*Image++;
}
}
void ClearBuffer(data char *Disp)
{
LoadImage2Buffer(Disp,YCcorpStart);
}
void ShiftImageUp()
{
unsigned char ctr,tmp;
for(ctr=0;ctr<DispWidth;ctr++)
{
tmp=BufferDisplay[ctr];
BufferDisplay[ctr]=BufferDisplay[ctr]>>1|BufferHiden[ctr]<<7;
BufferHiden[ctr]=BufferHiden[ctr]>>1|tmp<<7;
}
}
void Delay(unsigned char DT)
{
do
{
while(!OneCycle);
OneCycle=0;
}
while(--DT);
}
void main()
{
unsigned char ctr1,ctr2;
code unsigned char *Image;
ColomX=0;
CycleCounter=CycleTime;
PortData=PortCtrl=0;
TMOD=2;
TH0=0;
EA=TR0=ET0=1;
while(1)
{
//tampilkan tulisan
Image=YCcorpStart;
while(Image<=YCcorpEnd)
{
LoadImage2Buffer(BufferDisplay,Image);
Image++;
Delay(DelayTime);
}
}
}



Posting Komentar