andy520 发表于 2013-6-25 14:14:50

lpc1768控制lcd12864正常显示一次,之后下载出现乱码。求解释?

#include <LPC17xx.H>
#include "LCD12864.h"



unsigned charIC_DAT[]={
"   HOT-51   "
"                "
"   欢迎你来到   "
"    东流电子    "
};

unsigned char IC_DAT1[]={
"GoodGoodStudy "
"    DayDayUp    "
"    好好学习    "
"    天天向上    "
};

unsigned char IC_DAT2[]={
"Energy and persi"
"   all things   "
" stence conquer "
"动力坚持战胜一切"
};



unsigned char pic2[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x07,0x82,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x1E,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x01,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x78,0x00,0x00,0x00,0x07,0x80,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x1E,0x00,0x00,0x00,0x1E,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x07,0x80,0x00,0x00,0x78,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x01,0xE0,0x00,0x01,0xE0,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x00,0x78,0x1F,0x07,0x80,0x01,0xF1,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0E,0x00,0x1E,0x3F,0x9E,0x00,0x03,0xF9,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0E,0x00,0x07,0xB3,0x78,0x00,0x0F,0xF9,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x80,0x01,0xFF,0xE0,0x00,0x79,0x98,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xE0,0x00,0x7F,0x80,0x00,0xE0,0xD8,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0xF8,0x00,0x0C,0x00,0x07,0xE0,0xF8,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0E,0x7E,0x00,0x0C,0x00,0x1F,0xF0,0xF8,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0E,0x1F,0x80,0x0C,0x00,0x7E,0x70,0xDC,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x07,0xE0,0x0C,0x01,0xE3,0x70,0x5C,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x81,0xF8,0x0C,0x07,0x83,0x70,0x5F,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0D,0xE0,0x7E,0x0C,0x1F,0xC1,0xF0,0x5F,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x78,0x3F,0x8C,0x7F,0xC1,0xB8,0x47,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1E,0x0F,0xED,0xEC,0xE1,0xB8,0xC7,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0x83,0xFF,0xC6,0xE1,0xB9,0xC7,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0xE0,0xFF,0xE7,0xE1,0xBF,0x07,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0xF8,0x3F,0xE7,0xE1,0xBF,0x07,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0x9E,0x0C,0xE6,0xE1,0x8F,0x07,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0x87,0x8C,0xE6,0xE3,0x8F,0x83,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x0F,0x81,0xED,0xE6,0xE7,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x07,0x00,0x7F,0xE6,0xFE,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x00,0x00,0x1E,0x76,0xFE,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x72,0x1E,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7E,0x1A,0x0F,0x83,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7C,0x1A,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x78,0x1A,0x0F,0x83,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x1A,0x07,0x83,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1E,0x07,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x1F,0x00,0x00,0x00,0x00,0x10,0x00,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0x00,0x00,0x00,0x00,0xFF,0x08,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0x00,0x00,0x00,0x00,0x28,0x05,0xFC,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x0C,0x00,0x00,0x00,0x00,0x48,0x00,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0xFF,0x08,0x88,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0xFC,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x4A,0x00,0xA8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x89,0x04,0xA8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x08,0x88,0xA8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x10,0xAA,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x2E,

};


int main(void)
{
        SystemInit();
        LPC_PINCON->PINSEL0 |= 0x0;//P0.25,P0.24,P0.23 Set GPIO
    LPC_PINCON->PINSEL3 |= 0x0;//P1.18--P1.25 Set GPIO
        LPC_GPIO0->FIODIR |= 0X03;
        LPC_GPIO1->FIODIR |= 0x7FF<<18;

        //while(1)
        //{
                LCD12864_init();
                delay(10000);
                TransferData('a');
                delay(10000);
//                TransferData('b');
//                delay(10000);
//                TransferData('c');
//                delay(10000);
//                TransferData('d');
//                delay(10000);
//                lcd_mesg(IC_DAT);       
//            delayms(24000);


//
//
//                LCD12864_init2();
//                delay(1000);
//                DisplayGraphic(pic2);
//                delay(1000);
//        }
        while(1);

}

andy520 发表于 2013-6-25 14:15:06

#include <LPC17xx.H>
#include "LCD12864.h"







void    delay(uint32_t m)            //延时程序
                   {
                      uint32_t i,j;
                      for(i=0;i<m;i++)
                         for(j=0;j<10;j++);
                   }

void    delayms(unsigned int n)            //延时10×n毫秒程序
                   {
                      unsigned int i,j;
                      for(i=0;i<n;i++)
                         for(j=0;j<2000;j++);
                   }



void    Transfercmd(char cmd)
{
        LPC_GPIO1->FIOCLR |= RW;
        LPC_GPIO1->FIOCLR |= RS;
        delay(100000);
        LPC_GPIO1->FIOCLR |= (0XFF<<21);
        LPC_GPIO1->FIOSET |= cmd<<21;
        LPC_GPIO1->FIOSET |= EN;
        delay(100000);
        LPC_GPIO1->FIOCLR |= EN;
}

void    TransferData(char data)
{
        LPC_GPIO1->FIOCLR |= RW;
        LPC_GPIO1->FIOSET |= RS;
        delay(100000);
        LPC_GPIO1->FIOCLR |= (0XFF<<21);
        LPC_GPIO1->FIOSET |= data<<21;
        LPC_GPIO1->FIOSET |= EN;
        delay(100000);
        LPC_GPIO1->FIOCLR |= EN;
}

void LCD12864_init(void)
{
        delay(40000);
        LPC_GPIO0->FIOSET |= PSB;
        delay(10000);
        LPC_GPIO0->FIOCLR |= RES;
        delay(10000);
        LPC_GPIO0->FIOSET |= RES;
        delayms(1000);

        Transfercmd(0x38);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);            //大于100uS的延时程序
    Transfercmd(0x38);//Function Set
    delay(100000);             ////大于37uS的延时程序
        Transfercmd(0x0f);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
        Transfercmd(0x01);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
        Transfercmd(0x06);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
        Transfercmd(0x84);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
}


void   lcd_mesg(unsigned char (*adder1))
{
        uint8_t i;
        delay(100000);
        Transfercmd(0x80);
        delay(100000);

        for(i=0;i<32;i++)
        {
                delay(100000);
                TransferData(*adder1);
                   adder1++;
                delay(100000);
               
        }

                Transfercmd(0x90);//Set Graphic Display RAM Address
                delay(100000);

                for(i=32;i<64;i++)
                {
                        delay(100000);
                          TransferData(*adder1);
                           adder1++;
                        delay(100000);
                }
}

void LCD12864_init2(void)
{
        delay(400000);
        LPC_GPIO0->FIOSET |= PSB;
        delay(100000);
        LPC_GPIO0->FIOCLR |= RES;
        delay(100000);
        LPC_GPIO0->FIOSET |= RES;
        delay(100000);

        Transfercmd(0x36);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);            //大于100uS的延时程序
    Transfercmd(0x36);//Function Set
    delay(100000);             ////大于37uS的延时程序
        Transfercmd(0x3e);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
        Transfercmd(0x01);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
        Transfercmd(0x81);//Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
    delay(100000);
}

void DisplayGraphic(uint8_t *adder)
{
        uint8_t i,j;
        for(i=0;i<32;i++)
        {
                Transfercmd(0x80+i);
                delay(10000);
                Transfercmd(0x80);
                delay(10000);
                for(j=0;j<16;j++)
                {
                        TransferData(*adder);
                        adder++;
                        delay(1000);
                }
        }
        for(i=0;i<32;i++)
        {
                Transfercmd(0x80+i);
                delay(10000);
                Transfercmd(0x88);
                delay(10000);
                for(j=0;j<16;j++)
                {
                        TransferData(*adder);
                        adder++;
                        delay(1000);
                }
        }
}

andy520 发表于 2013-6-25 14:15:41

//lcd 12864.h
#ifndef LCD_1602_H
#define LCD_1602_H

#define RS   0x00040000   //P1.18 Connect RS
#define RW   0x00080000   //P1.19 Connect RW
#define EN   0x00100000   //P1.20 Connect E
#define PSB           0x00000001
#define RES           0x00000002




void    delay(uint32_t m);
void    delayms(unsigned int n);
void    Transfercmd(char cmd);
void    TransferData(char data);
void    LCD12864_init(void);
void    lcd_mesg(unsigned char (*adder1));
void    LCD12864_init2(void);
void    DisplayGraphic(uint8_t *adder);

#endif
页: [1]
查看完整版本: lpc1768控制lcd12864正常显示一次,之后下载出现乱码。求解释?