lpcware

Help with lpc17xx from 8051

Discussion created by lpcware Employee on Jun 15, 2016
Latest reply on Jun 15, 2016 by lpcware
Content originally posted in LPCWare by ciernes on Sat Apr 05 11:35:56 MST 2014
Hello I want to introduce myself in the arm architecture
and I would like to start converting some codes made in 8051 to arm
Could you help me please
thanks


//crystal is 22-24MHz
//was made for Keil compiler

#include <reg51.h>

sbit Cclock=P1^1;
sbit Clatch=P1^0;
sbit Cdata=P3^7;
sbit Row5=P3^0;
sbit Row4=P3^1;
sbit Row3=P3^2;
sbit Row2=P3^3;
sbit Row1=P3^4;
unsigned int shift_delay;

unsigned char code font[96][5] =
{
    {0x00, 0x00, 0x00, 0x00, 0x00},  //
    {0x00, 0x00, 0x1d, 0x00, 0x00},  //
    {0x00, 0x18, 0x00, 0x18, 0x00},  //
    {0x0a, 0x1f, 0x0a, 0x1f, 0x0a},  //
    {0x09, 0x15, 0x1f, 0x15, 0x12},  //
    {0x11, 0x02, 0x04, 0x08, 0x11},  //
    {0x0a, 0x15, 0x15, 0x0f, 0x05},  //
    {0x00, 0x14, 0x18, 0x00, 0x00},  //
    {0x00, 0x00, 0x0e, 0x11, 0x00},  //
    {0x00, 0x11, 0x0e, 0x00, 0x00},  //
    {0x0a, 0x04, 0x1f, 0x04, 0x0a},  //
    {0x04, 0x04, 0x1f, 0x04, 0x04},  //
    {0x00, 0x05, 0x06, 0x00, 0x00},  //
    {0x04, 0x04, 0x04, 0x04, 0x04},  //
    {0x00, 0x03, 0x03, 0x00, 0x00},  //
    {0x01, 0x02, 0x04, 0x08, 0x10},  //
    {0x0e, 0x13, 0x15, 0x19, 0x0e},  //0
    {0x00, 0x09, 0x1f, 0x01, 0x00},  //1
    {0x13, 0x15, 0x15, 0x15, 0x09},  //2
    {0x11, 0x11, 0x15, 0x15, 0x0a},  //3
    {0x18, 0x04, 0x04, 0x04, 0x1f},  //4
    {0x1d, 0x15, 0x15, 0x15, 0x12},  //5
    {0x0e, 0x15, 0x15, 0x15, 0x12},  //6
    {0x10, 0x10, 0x10, 0x17, 0x18},  //7
    {0x0a, 0x15, 0x15, 0x15, 0x0a},  //8
    {0x08, 0x15, 0x15, 0x15, 0x0e},  //9
    {0x00, 0x1b, 0x1b, 0x00, 0x00},  //
    {0x00, 0x15, 0x16, 0x00, 0x00},  //
    {0x00, 0x04, 0x0a, 0x11, 0x00},  //
    {0x0a, 0x0a, 0x0a, 0x0a, 0x0a},  //
    {0x00, 0x11, 0x0a, 0x04, 0x00},  //
    {0x08, 0x10, 0x15, 0x14, 0x08},  //
    {0x0e, 0x11, 0x15, 0x12, 0x0e},  //
    {0x0f, 0x12, 0x12, 0x12, 0x0f},  //A
    {0x1f, 0x15, 0x15, 0x15, 0x0a},  //B
    {0x0e, 0x11, 0x11, 0x11, 0x11},  //C
    {0x1f, 0x11, 0x11, 0x11, 0x0e},  //D
    {0x1f, 0x15, 0x15, 0x15, 0x15},  //E
    {0x1f, 0x14, 0x14, 0x14, 0x10},  //F
    {0x0e, 0x11, 0x15, 0x15, 0x17},  //G
    {0x1f, 0x04, 0x04, 0x04, 0x1f},  //H
    {0x00, 0x11, 0x1f, 0x11, 0x00},  //I
    {0x02, 0x01, 0x11, 0x11, 0x1e},  //J
    {0x1f, 0x04, 0x0c, 0x14, 0x03},  //K
    {0x1f, 0x01, 0x01, 0x01, 0x01},  //L
    {0x1f, 0x08, 0x04, 0x08, 0x1f},  //M
    {0x1f, 0x10, 0x0e, 0x01, 0x1f},  //N
    {0x0e, 0x11, 0x11, 0x11, 0x0e},  //O
    {0x1f, 0x14, 0x14, 0x14, 0x08},  //P
   //{0x0e, 0x11, 0x11, 0x0f, 0x01},  //Q
    {0x0e, 0x11, 0x15, 0x12, 0x0d},  //Q  
    {0x1f, 0x14, 0x14, 0x16, 0x09},  //R
    {0x09, 0x15, 0x15, 0x15, 0x12},  //S
    {0x10, 0x10, 0x1f, 0x10, 0x10},  //T
    {0x1e, 0x01, 0x01, 0x01, 0x1e},  //U
    {0x18, 0x06, 0x01, 0x06, 0x18},  //V
    {0x1f, 0x02, 0x04, 0x02, 0x1f},  //W
    {0x11, 0x0a, 0x04, 0x0a, 0x11},  //X
    {0x18, 0x04, 0x07, 0x04, 0x18},  //Y
    {0x11, 0x13, 0x15, 0x19, 0x11},  //Z
    {0x00, 0x1f, 0x11, 0x11, 0x00},  //
    {0x10, 0x08, 0x04, 0x02, 0x01},  //
    {0x00, 0x11, 0x11, 0x1f, 0x00},  //
    {0x04, 0x08, 0x10, 0x08, 0x04},  //
    {0x01, 0x01, 0x01, 0x01, 0x01},  //
    {0x00, 0x00, 0x10, 0x08, 0x00},  //
    {0x12, 0x15, 0x15, 0x15, 0x0f},  //a
    {0x1f, 0x09, 0x09, 0x09, 0x06},  //b
    {0x0e, 0x11, 0x11, 0x11, 0x0a},  //c
    {0x06, 0x09, 0x09, 0x09, 0x1f},  //d
    {0x0e, 0x15, 0x15, 0x15, 0x0d},  //e
    {0x0f, 0x14, 0x14, 0x10, 0x10},  //f
    {0x09, 0x15, 0x15, 0x15, 0x0e},  //g
    {0x1f, 0x08, 0x08, 0x08, 0x07},  //h
    {0x00, 0x00, 0x17, 0x00, 0x00},  //i
    {0x01, 0x01, 0x01, 0x01, 0x1e},  //j
    {0x1f, 0x04, 0x04, 0x0a, 0x11},  //k
    {0x1e, 0x01, 0x01, 0x01, 0x01},  //l
    {0x0f, 0x10, 0x0f, 0x10, 0x0f},  //m
    {0x1f, 0x10, 0x10, 0x10, 0x0f},  //n
    {0x0e, 0x11, 0x11, 0x11, 0x0e},  //o
    {0x1f, 0x12, 0x12, 0x12, 0x0c},  //p
    {0x0c, 0x12, 0x12, 0x12, 0x1f},  //q
    {0x1f, 0x08, 0x10, 0x10, 0x08},  //r
    {0x09, 0x15, 0x15, 0x15, 0x12},  //s
    {0x1e, 0x09, 0x09, 0x01, 0x02},  //t
    {0x1e, 0x01, 0x01, 0x02, 0x1f},  //u
    {0x18, 0x06, 0x01, 0x06, 0x18},  //v
    {0x1e, 0x01, 0x1e, 0x01, 0x1e},  //w
    {0x1b, 0x04, 0x04, 0x04, 0x1b},  //x
    {0x19, 0x05, 0x05, 0x05, 0x1e},  //y
    {0x11, 0x13, 0x15, 0x19, 0x11},  //z
    {0x00, 0x04, 0x0e, 0x11, 0x00},  //
    {0x00, 0x00, 0x1f, 0x00, 0x00},  //
    {0x00, 0x11, 0x0e, 0x04, 0x00},  //
    {0x08, 0x10, 0x08, 0x04, 0x08},  //
    {0x00, 0x00, 0x00, 0x00, 0x00}   //
};
unsigned char column[33]=
{
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
}; //display memory, cleared before used.

void delayms(unsigned int ms) //just about 1ms
{
    unsigned int n;
    unsigned char i;
    for (n=0; n<ms; n++)
    {
        for (i=0; i<200; i++);
    }
}

void init_timer(void)
{
    TMOD=0x01;
    TH0=0xfb;
    TL0=0x00;
    TR0=1;
    ET0=1;
    EA=1;
}

void Timer0 (void) interrupt 1 //using 2
{
    unsigned char index;
    unsigned char i,tmp1;
    unsigned char code rowtable[]={0,1,2,4,8,16};
    //TH0=0xfb; //48fps
    //TL0=0x00;
    ET0=0;
    TH0=0xf8; //30fps
    TL0=0x00;
    Row5=1; Row4=1; Row3=1; Row2=1; Row1=1;
    index++;
    if (index>5) index=1;
    //column
    tmp1=rowtable[index];
    for (i=1; i<33; i++)
    {
        Cdata=!(column & tmp1);
        Cclock=1;
        Cclock=0;
    }
    //row
    Clatch=1;
    Clatch=0;
    switch (index)
    {
        case 1:
            Row1=0;
            break;
        case 2:
            Row2=0;
            break;
        case 3:
            Row3=0;
            break;
        case 4:
            Row4=0;
            break;
        case 5:
            Row5=0;
            break;
    }
    ET0=1;
}

void LED_put_byte(unsigned char inp)
{
    unsigned char i;
    for (i=1;i<33;i++) column=column[i+1];
    column[32]=inp;
}

void LED_puts(unsigned char *lcd_string)
{
    unsigned char i,tmp_chr;
    while (*lcd_string)
    {
        tmp_chr=*lcd_string;
        for (i=0;i<5;i++)
        {
            LED_put_byte(font[tmp_chr-32]);
            delayms(shift_delay);
        }
        LED_put_byte(0); //space between character
        delayms(shift_delay);
        lcd_string++;
    }
}


void main()
{
    init_timer();
    shift_delay=100; //bigger = slower shift
    while(1)
    {
        LED_puts("8x32 Matrix LED: AT89C2051, 74HC595, "
                 "HEM1588 8x8, LEDFCS9012        ");
    }
}

Outcomes