#include <htc.h>
#include <stdlib.h>
#include <string.h>
__CONFIG( BOREN_OFF & PWRTE_ON & WDTE_OFF & FOSC_HS);
#define _XTAL_FREQ 20000000
#define DAD PORTB
#define RST RC5
#define CLK RC3
#define DATA RC4
extern const char Font2[];
void blit(char a), clear(void);
unsigned char leds[30];
unsigned char buffer[30];
unsigned char pow[] = {0,128,64,32,16,8,4,2,1};
void display(char *str), blit(char a);
int data( int p);
char b;
main ()
{
int t=234;
TRISC=0B00000000;
TRISB=0B00000000;
while(1){
clear();
strcpy(buffer," Led ");
display(buffer);
blit(1);
itoa( t, &buffer[0], 10);
display(buffer);
blit(1);
}
}
void display(char *str)
{
int addr;
int z,y;
while(*str!=0)
{
addr = ((int)*str++ - 0x20);
addr *= 5;
y=0;
for(z=0;z<5;z++)
{
leds[z] = Font2[addr+y];
y++;
}
addr = ((int)*str++ - 0x20);
addr *= 5;
y=0;
for(z=6;z<11;z++)
{
leds[z] = Font2[addr+y];
y++;
}
addr = ((int)*str++ - 0x20);
addr *= 5;
y=0;
for(z=12;z<17;z++)
{
leds[z] = Font2[addr+y];
y++;
}
addr = ((int)*str++ - 0x20);
addr *= 5;
y=0;
for(z=18;z<23;z++)
{
leds[z] = Font2[addr+y];
y++;
}
addr = ((int)*str++ - 0x20);
addr *= 5;
y=0;
for(z=24;z<29;z++)
{
leds[z] = Font2[addr+y];
y++;
}
}
}
void blit(char a)
{
char x,u,t,r,n;
for(x=0;x<40;x++)
{
for(x=0;x<5;x++)
{
u=-1;
b=0b00000001;
for(r=0;r<8;r++)
{
DAD=pow[r];
__delay_ms(2);
RST=0;
RST=1;
u++;
for(a=0;a<32;a++)
{
DAD=0;
RST=1;
n=leds[a];
n >>= u;
t=(n & b);
DATA=t;
CLK=1;
__delay_us(10);
CLK=0;
}
}
}
}
if(a==1)
{
for(x=0;x<32;x++)
//leds[x]>>=1;
if(a==3)
{
for( x=0;x<32;x++)
leds[x]<<=1;
if(a==0)
{
for(x=0;x<32;x++)
leds[x]=leds[x+1];
}
}
}
}
void clear(void)
{
for(char x=0;x<30;x++)
leds[x]=0;
}