打印
[MM32软件]

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

[复制链接]
405|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
昱枫|  楼主 | 2020-5-20 16:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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);
extern  void clr_screen(void);
extern  void photodis(char *bmp);
extern  void lcdflag(void);
.c 文件
#include "LCD12864.h"

extern void delay_ms(__IO uint32_t nTime);

/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £ºLED_Init(void)                        
**¹¦ÄÜÃèÊö £ºLED³õʼ»¯
**ÊäÈë²ÎÊý £ºÎÞ
**Êä³ö²ÎÊý £ºÎÞ
********************************************************************************************************/
void LCD_GPIO_Init(void)
{
   
    GPIO_InitTypeDef  GPIO_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[]={"  THANK  YOU!   "};

/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £º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[s]);
                                        }
                                        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[s]);
                                        }
                                        Lcd_w_com(0x88);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis3[s]);
                                        }
                                        Lcd_w_com(0x98);
                                        for(s=0;s<16;s++)
                                        {
                                                Lcd_w_dat(dis4[s]);
                                        }
                                       
                                        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的源码

LCD.rar (2.49 KB)

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

678

帖子

4

粉丝