昱枫 发表于 2020-5-20 16:04

MM32 eMiniBoard测评报告】+开发板接入显示

MM32 eMiniBoard 接入LCD12864
采用并行接口方式

.h 文件

#define LCD_CS   GPIO_Pin_13
#define LCD_SID    GPIO_Pin_14
#define LCD_SCK    GPIO_Pin_15

#define LCD_GPIO   GPIOC

#define SET_CS    do {GPIO_SetBits(LCD_GPIO ,LCD_CS);} while (0)
#define SET_SID   do {GPIO_SetBits(LCD_GPIO ,LCD_SID);} while (0)
#define SET_SCK   do {GPIO_SetBits(LCD_GPIO ,LCD_SCK);} while (0)

#define CLR_CS    do {GPIO_ResetBits(LCD_GPIO ,LCD_CS );} while (0)
#define CLR_SID   do {GPIO_ResetBits(LCD_GPIO ,LCD_SID );} while (0)
#define CLR_SCK   do {GPIO_ResetBits(LCD_GPIO ,LCD_SCK );} while (0)

void LCD_GPIO_Init(void);

extern void delay_s(unsigned int i);
extern void w_bit(char en);
extern void w_byte(char byt);
extern void init_lcd(void);
extern void Lcd_w_com(char data);
extern void Lcd_w_dat(char data);
extern void lcd_pos(char x,char y);
externvoid clr_screen(void);
externvoid photodis(char *bmp);
externvoid lcdflag(void);.c 文件
#include "LCD12864.h"

extern void delay_ms(__IO uint32_t nTime);

/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £ºLED_Init(void)                        
**¹¦ÄÜÃèÊö £ºLED³õʼ»¯
**ÊäÈë²ÎÊý £ºÎÞ
**Êä³ö²ÎÊý £ºÎÞ
********************************************************************************************************/
void LCD_GPIO_Init(void)
{
   
    GPIO_InitTypeDefGPIO_InitStructure;
   
   
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);//¿ªÆôGPIOA,GPIOBʱÖÓ
   
   
    GPIO_InitStructure.GPIO_Pin= LCD_CS|LCD_SID|LCD_SCK;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(LCD_GPIO, &GPIO_InitStructure);

}

#if 0
void delay_us(unsigned int i)
{
        char j = 0;
        for(j=50;j>0;j--)
          for( ;i>0;i--);
       //hile(i--);
}

void delay_ms(unsigned int i)
{
       for( ;i>0;i--)
       {
               delay_us(1000);
       }                  
}
#endif

void delay_s(unsigned int i)
{
       for( ;i>0;i--)
       {
               delay_ms(1000);
       }                  
}

void w_bit(char en)
{
        if(en==1)
        {
               SET_SID;
               SET_SCK;
               delay_ms(1);
               CLR_SCK;
        }
        else
        {
                CLR_SID;
                SET_SCK;
                delay_ms(1);
                CLR_SCK;
        }
}

void w_byte(char byt)
{
        char j1 = 0;
        for(j1=0;j1<8;j1++)
        {
                w_bit(((byt)>>(7-j1))&0x01);
                delay_ms(1);
        }
}



void init_lcd(void)
{
        delay_ms(1);
        Lcd_w_com(0x34);
        delay_ms(5);
        Lcd_w_com(0x30);
        delay_ms(5);
        Lcd_w_com(0x0c);
        delay_ms(5);
        Lcd_w_com(0x01);
        delay_ms(5);
}

void Lcd_w_com(char data)
{
        CLR_CS;
        SET_CS;
        CLR_SCK;
        SET_SID;
        delay_ms(1);
        w_byte(0xf8);
        w_byte(data&0xf0);
        w_byte(data<<4);
        delay_ms(1);
        CLR_CS;
       
}

void Lcd_w_dat(char data)
{
                CLR_CS;
                SET_CS;
                CLR_SCK;
                SET_SID;
                delay_ms(1);
                w_byte(0xfa);
                w_byte(data&0xf0);
                w_byte(data<<4);
                delay_ms(1);
                CLR_CS;
}
/*char readbyte(void)
{
        char data;
        CLR_CS;
        SET_CS;
        CLR_SCK;
        SET_SID;
        delay_us(10);
        w_byte(0xfe);
       
}*/

void lcd_pos(char x,char y)
{
        char pos;
        if(x==1)
        {
          x=0x80;       
        }
        else if(x==2)
        {
                x=0x90;
        }
        else if(x==3)
        {
                x=0x88;
        }
        else if(x==4)
        {
                x=0x98;
        }
        pos=x+y;
       
        Lcd_w_com(pos);
}

void clr_screen(void)
{
        Lcd_w_com(0x34);
        delay_ms(5);
        Lcd_w_com(0x30);
        delay_ms(5);
        Lcd_w_com(0x01);
        delay_ms(5);
}

void photodis(char *bmp)
{
        char x1,y1;
       
       Lcd_w_com(0x34);
          for(x1=0;x1<32;x1++)
          {
                  Lcd_w_com(0x80+x1);    //ÏÈдÈëË®Æ½×ø±êÖµ
                  Lcd_w_com(0x80);      //дÈë´¹Ö±×ø±êÖµ
                  for(y1=0;y1<16;y1++)   //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
                  Lcd_w_dat(*bmp++);
                  delay_ms(1);
          }
           for(x1=0;x1<32;x1++)
           {
                   Lcd_w_com(0x80+x1);    //ÏÈдÈëË®Æ½×ø±êÖµ
                   Lcd_w_com(0x88);      //дÈë´¹Ö±×ø±êÖµ
                   for(y1=0;y1<16;y1++)   //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
                   Lcd_w_dat(*bmp++);
                   delay_ms(1);
           }
          Lcd_w_com(0x36);       //дÍêÊý¾Ý,¿ªÍ¼ÐÎÏÔʾ
       
}
void hdis(char data,char x,char y)
{
       
}

void lcdflag(void)
{
        Lcd_w_com(0x08);
        delay_ms(5);
        Lcd_w_com(0x0c);
        delay_ms(5);
        Lcd_w_com(0x08);
        delay_ms(5);
        Lcd_w_com(0x0c);
        delay_ms(5);
        Lcd_w_com(0x08);
        delay_ms(5);
        Lcd_w_com(0x0c);
        delay_ms(5);
       
        Lcd_w_com(0x01);
        delay_ms(5);
}


/*

void draw_dots(char x0,char y0,char color)
{
       char row,xlab,xlab_bit;
       //char read_h,read_l;
       Lcd_w_com(0x34);
       Lcd_w_com(0x36);
       xlab=x0>>4;
       xlab_bit=x0&0x0f;
       if(y0<32)
       {
               row=y0;
       }
       else
       {
                row=y0-32;
                xlab+=8;
       }
       
       Lcd_w_com(row+0x80);
       Lcd_w_com(xlab+0x80);
       
       // readbyte();
       //read_h=readbyte();
        // read_l=readbyte();
       
       Lcd_w_com(row+0x80);
       Lcd_w_com(xlab+0x80);
       
       if(xlab_bit<8)
       {
               switch(color)
               {
                       case 0:read_h&=(~(0x01<<(7-xlab_bit)));break;
                       case 1:read_h|=(0x01<<(7-xlab_bit));break;
                       case 2:read_h^=(0x01<<(7-xlab_bit));break;
                       default:break;
               }
               // Lcd_w_dat(read_h);
                // Lcd_w_dat(read_l);
       }
       else
       {
               switch(color)
               {
                       case 0:read_h&=(~(0x01<<(15-xlab_bit)));break;
                       case 1:read_h|=(0x01<<(15-xlab_bit));break;
                       case 2:read_h^=(0x01<<(15-xlab_bit));break;
                       default:break;
               }
                // Lcd_w_dat(read_h);
                // Lcd_w_dat(read_l);
               
       }
}


主函数

#include "delay.h"
#include "sys.h"
#include "led.h"
#include "LCD12864.h"

const char dis1[]={"eMiniBoard    "};
const char dis2[]={"MB-023 MM32L073 "};
const char dis3[]={"    INSIGHT   "};
const char dis4[]={" 21IC : YUFENG"};
const char dis5[]={"THANKYOU!   "};

/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £ºmain(void)                     
**¹¦ÄÜÃèÊö £º
**ÊäÈë²ÎÊý £ºÎÞ
**Êä³ö²ÎÊý £ºÎÞ
********************************************************************************************************/
int main(void)   
{
          unsigned char s;
    delay_init();
    LED_Init();
          LCD_GPIO_Init();
          init_lcd();
          clr_screen();
       
    while(1)            //ÎÞÏÞÑ­»·
    {
      //LED1_TOGGLE();
      //LED2_TOGGLE();
      //LED3_TOGGLE();
      //LED4_TOGGLE();
                          //delay_ms(300);
                       
                                  clr_screen();
                                        Lcd_w_com(0x80);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis1);
                                        }
                                        Lcd_w_com(0x34);
                                        delay_ms(1);
                                        Lcd_w_com(0x04);
                                       
                                        Lcd_w_com(0x30);
                                       
                                        Lcd_w_com(0x90);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis2);
                                        }
                                        Lcd_w_com(0x88);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis3);
                                        }
                                        Lcd_w_com(0x98);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis4);
                                        }
                                       
                                        delay_s(5);
                                        lcdflag();
                                       
                                                //clr_screen();
                                                //Lcd_w_com(0x34);
                                               
                                                //Lcd_w_com(0x04);
                                                //Lcd_w_com(0x05);
                                                //Lcd_w_com(0x06);
                                                //Lcd_w_com(0x07);
                                                //delay_s(5);
                                                clr_screen();
                                               
                                                Lcd_w_com(0x80);
                                                for(s=0;s<16;s++)
                                                {
                                                        Lcd_w_dat(0x30+s);
                                                }
                                                Lcd_w_com(0x90);
                                                for(s=0;s<16;s++)
                                                {
                                                        Lcd_w_dat(0x40+s);
                                                }
                                                Lcd_w_com(0x88);
                                                for(s=0;s<16;s++)
                                                {
                                                        Lcd_w_dat(0x50+s);
                                                }
                                                Lcd_w_com(0x98);
                                                for(s=0;s<16;s++)
                                                {
                                                        Lcd_w_dat(0x60+s);
                                                }
                                                delay_s(5);
                                                lcdflag();
                                       
                                        clr_screen();
                                               
      
    }
}

存在一个问题:
编译器里面不能写中文?也就无法显示中文信息了

效果:














LCD的源码



接一个显示设备,在做其他的功能就比较方面了{:smile:}

页: [1]
查看完整版本: MM32 eMiniBoard测评报告】+开发板接入显示