[MM32软件] MM32 eMiniBoard测评报告】+开发板接入显示

[复制链接]
 楼主| 昱枫 发表于 2020-5-20 16:04 | 显示全部楼层 |阅读模式
MM32 eMiniBoard 接入LCD12864
采用并行接口方式

.h 文件

  1. #define LCD_CS     GPIO_Pin_13
  2. #define LCD_SID    GPIO_Pin_14
  3. #define LCD_SCK    GPIO_Pin_15

  4. #define LCD_GPIO   GPIOC

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

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

  11. void LCD_GPIO_Init(void);

  12. extern void delay_s(unsigned int i);
  13. extern void w_bit(char en);
  14. extern void w_byte(char byt);
  15. extern void init_lcd(void);
  16. extern void Lcd_w_com(char data);
  17. extern void Lcd_w_dat(char data);
  18. extern void lcd_pos(char x,char y);
  19. extern  void clr_screen(void);
  20. extern  void photodis(char *bmp);
  21. extern  void lcdflag(void);
.c 文件
  1. #include "LCD12864.h"

  2. extern void delay_ms(__IO uint32_t nTime);

  3. /********************************************************************************************************
  4. **º¯ÊýÐÅÏ¢ £ºLED_Init(void)                        
  5. **¹¦ÄÜÃèÊö £ºLED³õʼ»¯
  6. **ÊäÈë²ÎÊý £ºÎÞ
  7. **Êä³ö²ÎÊý £ºÎÞ
  8. ********************************************************************************************************/
  9. void LCD_GPIO_Init(void)
  10. {
  11.    
  12.     GPIO_InitTypeDef  GPIO_InitStructure;
  13.    
  14.    
  15.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);  //¿ªÆôGPIOA,GPIOBʱÖÓ
  16.    
  17.    
  18.     GPIO_InitStructure.GPIO_Pin  = LCD_CS|LCD_SID|LCD_SCK;
  19.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  21.     GPIO_Init(LCD_GPIO, &GPIO_InitStructure);

  22. }

  23. #if 0
  24. void delay_us(unsigned int i)
  25. {
  26.         char j = 0;
  27.         for(j=50;j>0;j--)
  28.           for( ;i>0;i--);
  29.          //hile(i--);
  30. }

  31. void delay_ms(unsigned int i)
  32. {
  33.          for( ;i>0;i--)
  34.          {
  35.                  delay_us(1000);
  36.          }                  
  37. }
  38. #endif

  39. void delay_s(unsigned int i)
  40. {
  41.          for( ;i>0;i--)
  42.          {
  43.                  delay_ms(1000);
  44.          }                  
  45. }

  46. void w_bit(char en)
  47. {
  48.         if(en==1)
  49.         {
  50.                  SET_SID;
  51.                  SET_SCK;
  52.                  delay_ms(1);
  53.                  CLR_SCK;
  54.         }
  55.         else
  56.         {
  57.                 CLR_SID;
  58.                 SET_SCK;
  59.                 delay_ms(1);
  60.                 CLR_SCK;
  61.         }
  62. }

  63. void w_byte(char byt)
  64. {
  65.         char j1 = 0;
  66.         for(j1=0;j1<8;j1++)
  67.         {
  68.                 w_bit(((byt)>>(7-j1))&0x01);
  69.                 delay_ms(1);
  70.         }
  71. }



  72. void init_lcd(void)
  73. {
  74.         delay_ms(1);
  75.         Lcd_w_com(0x34);
  76.         delay_ms(5);
  77.         Lcd_w_com(0x30);
  78.         delay_ms(5);
  79.         Lcd_w_com(0x0c);
  80.         delay_ms(5);
  81.         Lcd_w_com(0x01);
  82.         delay_ms(5);
  83. }

  84. void Lcd_w_com(char data)
  85. {
  86.         CLR_CS;
  87.         SET_CS;
  88.         CLR_SCK;
  89.         SET_SID;
  90.         delay_ms(1);
  91.         w_byte(0xf8);
  92.         w_byte(data&0xf0);
  93.         w_byte(data<<4);
  94.         delay_ms(1);
  95.         CLR_CS;
  96.        
  97. }

  98. void Lcd_w_dat(char data)
  99. {
  100.                 CLR_CS;
  101.                 SET_CS;
  102.                 CLR_SCK;
  103.                 SET_SID;
  104.                 delay_ms(1);
  105.                 w_byte(0xfa);
  106.                 w_byte(data&0xf0);
  107.                 w_byte(data<<4);
  108.                 delay_ms(1);
  109.                 CLR_CS;
  110. }
  111. /*char readbyte(void)
  112. {
  113.         char data;
  114.         CLR_CS;
  115.         SET_CS;
  116.         CLR_SCK;
  117.         SET_SID;
  118.         delay_us(10);
  119.         w_byte(0xfe);
  120.        
  121. }*/

  122. void lcd_pos(char x,char y)
  123. {
  124.         char pos;
  125.         if(x==1)
  126.         {
  127.           x=0x80;       
  128.         }
  129.         else if(x==2)
  130.         {
  131.                 x=0x90;
  132.         }
  133.         else if(x==3)
  134.         {
  135.                 x=0x88;
  136.         }
  137.         else if(x==4)
  138.         {
  139.                 x=0x98;
  140.         }
  141.         pos=x+y;
  142.        
  143.         Lcd_w_com(pos);
  144. }

  145. void clr_screen(void)
  146. {
  147.         Lcd_w_com(0x34);
  148.         delay_ms(5);
  149.         Lcd_w_com(0x30);
  150.         delay_ms(5);
  151.         Lcd_w_com(0x01);
  152.         delay_ms(5);
  153. }

  154. void photodis(char *bmp)
  155. {
  156.         char x1,y1;
  157.        
  158.          Lcd_w_com(0x34);
  159.           for(x1=0;x1<32;x1++)
  160.           {
  161.                   Lcd_w_com(0x80+x1);    //ÏÈдÈëË®Æ½×ø±êÖµ
  162.                   Lcd_w_com(0x80);      //дÈë´¹Ö±×ø±êÖµ
  163.                   for(y1=0;y1<16;y1++)   //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
  164.                   Lcd_w_dat(*bmp++);
  165.                   delay_ms(1);
  166.           }
  167.            for(x1=0;x1<32;x1++)
  168.            {
  169.                    Lcd_w_com(0x80+x1);    //ÏÈдÈëË®Æ½×ø±êÖµ
  170.                    Lcd_w_com(0x88);      //дÈë´¹Ö±×ø±êÖµ
  171.                    for(y1=0;y1<16;y1++)   //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
  172.                    Lcd_w_dat(*bmp++);
  173.                    delay_ms(1);
  174.            }
  175.           Lcd_w_com(0x36);       //дÍêÊý¾Ý,¿ªÍ¼ÐÎÏÔʾ
  176.        
  177. }
  178. void hdis(char data,char x,char y)
  179. {
  180.        
  181. }

  182. void lcdflag(void)
  183. {
  184.         Lcd_w_com(0x08);
  185.         delay_ms(5);
  186.         Lcd_w_com(0x0c);
  187.         delay_ms(5);
  188.         Lcd_w_com(0x08);
  189.         delay_ms(5);
  190.         Lcd_w_com(0x0c);
  191.         delay_ms(5);
  192.         Lcd_w_com(0x08);
  193.         delay_ms(5);
  194.         Lcd_w_com(0x0c);
  195.         delay_ms(5);
  196.        
  197.         Lcd_w_com(0x01);
  198.         delay_ms(5);
  199. }


  200. /*

  201. void draw_dots(char x0,char y0,char color)
  202. {
  203.          char row,xlab,xlab_bit;
  204.          //char read_h,read_l;
  205.          Lcd_w_com(0x34);
  206.          Lcd_w_com(0x36);
  207.          xlab=x0>>4;
  208.          xlab_bit=x0&0x0f;
  209.          if(y0<32)
  210.          {
  211.                  row=y0;
  212.          }
  213.          else
  214.          {
  215.                 row=y0-32;
  216.                 xlab+=8;
  217.          }
  218.          
  219.          Lcd_w_com(row+0x80);
  220.          Lcd_w_com(xlab+0x80);
  221.          
  222.          // readbyte();
  223.          //read_h=readbyte();
  224.         // read_l=readbyte();
  225.          
  226.          Lcd_w_com(row+0x80);
  227.          Lcd_w_com(xlab+0x80);
  228.          
  229.          if(xlab_bit<8)
  230.          {
  231.                  switch(color)
  232.                  {
  233.                          case 0:read_h&=(~(0x01<<(7-xlab_bit)));break;
  234.                          case 1:read_h|=(0x01<<(7-xlab_bit));break;
  235.                          case 2:read_h^=(0x01<<(7-xlab_bit));break;
  236.                          default:break;
  237.                  }
  238.                  // Lcd_w_dat(read_h);
  239.                 // Lcd_w_dat(read_l);
  240.          }
  241.          else
  242.          {
  243.                  switch(color)
  244.                  {
  245.                          case 0:read_h&=(~(0x01<<(15-xlab_bit)));break;
  246.                          case 1:read_h|=(0x01<<(15-xlab_bit));break;
  247.                          case 2:read_h^=(0x01<<(15-xlab_bit));break;
  248.                          default:break;
  249.                  }
  250.                 // Lcd_w_dat(read_h);
  251.                 // Lcd_w_dat(read_l);
  252.                  
  253.          }
  254. }


主函数

  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "led.h"
  4. #include "LCD12864.h"

  5. const char dis1[]={"  eMiniBoard    "};
  6. const char dis2[]={"MB-023 MM32L073 "};
  7. const char dis3[]={"    INSIGHT     "};
  8. const char dis4[]={" 21IC : YUFENG  "};
  9. const char dis5[]={"  THANK  YOU!   "};

  10. /********************************************************************************************************
  11. **º¯ÊýÐÅÏ¢ £ºmain(void)                     
  12. **¹¦ÄÜÃèÊö £º
  13. **ÊäÈë²ÎÊý £ºÎÞ
  14. **Êä³ö²ÎÊý £ºÎÞ
  15. ********************************************************************************************************/
  16. int main(void)   
  17. {
  18.           unsigned char s;
  19.     delay_init();
  20.     LED_Init();
  21.           LCD_GPIO_Init();
  22.           init_lcd();
  23.           clr_screen();
  24.        
  25.     while(1)              //ÎÞÏÞÑ­»·
  26.     {
  27.         //LED1_TOGGLE();
  28.         //LED2_TOGGLE();
  29.         //LED3_TOGGLE();
  30.         //LED4_TOGGLE();
  31.                           //delay_ms(300);
  32.                        
  33.                                   clr_screen();
  34.                                         Lcd_w_com(0x80);
  35.                                         for(s=0;s<16;s++)
  36.                                         {
  37.                                                 Lcd_w_dat(dis1[s]);
  38.                                         }
  39.                                         Lcd_w_com(0x34);
  40.                                         delay_ms(1);
  41.                                         Lcd_w_com(0x04);
  42.                                        
  43.                                         Lcd_w_com(0x30);
  44.                                        
  45.                                         Lcd_w_com(0x90);
  46.                                         for(s=0;s<16;s++)
  47.                                         {
  48.                                                 Lcd_w_dat(dis2[s]);
  49.                                         }
  50.                                         Lcd_w_com(0x88);
  51.                                         for(s=0;s<16;s++)
  52.                                         {
  53.                                                 Lcd_w_dat(dis3[s]);
  54.                                         }
  55.                                         Lcd_w_com(0x98);
  56.                                         for(s=0;s<16;s++)
  57.                                         {
  58.                                                 Lcd_w_dat(dis4[s]);
  59.                                         }
  60.                                        
  61.                                         delay_s(5);
  62.                                         lcdflag();
  63.                                        
  64.                                                 //clr_screen();
  65.                                                 //Lcd_w_com(0x34);
  66.                                                
  67.                                                 //Lcd_w_com(0x04);
  68.                                                 //Lcd_w_com(0x05);
  69.                                                 //Lcd_w_com(0x06);
  70.                                                 //Lcd_w_com(0x07);
  71.                                                 //delay_s(5);
  72.                                                 clr_screen();
  73.                                                
  74.                                                 Lcd_w_com(0x80);
  75.                                                 for(s=0;s<16;s++)
  76.                                                 {
  77.                                                         Lcd_w_dat(0x30+s);
  78.                                                 }
  79.                                                 Lcd_w_com(0x90);
  80.                                                 for(s=0;s<16;s++)
  81.                                                 {
  82.                                                         Lcd_w_dat(0x40+s);
  83.                                                 }
  84.                                                 Lcd_w_com(0x88);
  85.                                                 for(s=0;s<16;s++)
  86.                                                 {
  87.                                                         Lcd_w_dat(0x50+s);
  88.                                                 }
  89.                                                 Lcd_w_com(0x98);
  90.                                                 for(s=0;s<16;s++)
  91.                                                 {
  92.                                                         Lcd_w_dat(0x60+s);
  93.                                                 }
  94.                                                 delay_s(5);
  95.                                                 lcdflag();
  96.                                        
  97.                                         clr_screen();
  98.                                                
  99.         
  100.     }
  101. }


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

效果:


2020-05-20_155304.png

2020-05-20_155233.png



bf165936f2ced2d5fa9458530f2569d6 (1).gif


bf165936f2ced2d5fa9458530f2569d6.gif


LCD的源码

LCD.rar (2.49 KB, 下载次数: 0)

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

679

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部