你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F042的LCD5110显示

[复制链接]
jinglixixi 提问时间:2016-2-16 20:20 /
本帖最后由 jinglixixi 于 2016-2-16 20:28 编辑

新近得到一块STM32F042的开发板,怎样用好它呢?最终还是决定用它实现LCD5110的显示功能。
其程序如下:

//  基于STM32F042开发板的LCD5110显示功能程序 已经测试
//  PA5:SCE
//  PA6:RES
//  PA7C
//  PA8:SDIN
//  PA9:SCLK

#include "main.h"
static GPIO_InitTypeDef  GPIO_InitStruct;
static void SystemClock_Config(void);
const unsigned char chinese_character[][24]=
{
//tian?
        {0x20,0x22,0x22,0x22,0xA2,0x7E,0xA2,0x22,0x22,0x22,0x20,0x00,0x08,0x08,0x04,0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x08,0x00},
//jin?
        {0x22,0x44,0x00,0x08,0xAA,0xAA,0xFF,0xAA,0xAA,0xBE,0x08,0x00,0x04,0x02,0x01,0x02,0x02,0x02,0x0F,0x02,0x02,0x02,0x02,0x00},
//li?
{0x12,0x12,0xFE,0x12,0x3F,0xA5,0xA5,0xFF,0xA5,0xA5,0x3F,0x00,0x02,0x02,0x01,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x00},
//gong?
{0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00},
//da?
{0x08,0x08,0x08,0x08,0xC8,0x3F,0xC8,0x08,0x08,0x0C,0x08,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00},
//xue?
{0x9C,0x84,0x95,0x96,0x95,0xD6,0xB4,0x94,0x87,0x94,0x8C,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
//hou?
        {0x8A,0x44,0xFB,0x10,0xFC,0x03,0x48,0x3A,0xEA,0x2E,0x28,0x00,0x08,0x08,0x07,0x00,0x0F,0x00,0x09,0x05,0x03,0x05,0x09,0x00},
//nian?
        {0x10,0x08,0xE7,0x24,0x24,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,0x01,0x00},
//ji?
        {0x04,0xA4,0xA4,0xA4,0xA4,0xBF,0xA4,0xA4,0xA4,0xA4,0x04,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x00},
//xiang?
        {0x84,0x45,0xF6,0x2C,0x40,0x25,0x26,0xFC,0x26,0x25,0x00,0x00,0x00,0x00,0x0F,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,0x00},
};  
unsigned char font6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },// sp
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },// !
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },// "
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },// #
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },// $
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },// %
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },// &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },// '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },// (
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },// )
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },// *
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },// +
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },// ,
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },// -
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },// .
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },// /
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },// 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },// 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },// 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },// 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },// 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },// 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },// 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },// 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },// 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },// 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },// :
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },// ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },// <
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },// =
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },// >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },//  
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },// @
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },// A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },// B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },// C
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },// D
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },// E
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },// F
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },// G
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },// H
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },// I
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },// J
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },// K
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },// L
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },// M
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },// N
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },// O
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },// P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },// Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },// R
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },// S
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },// T
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },// U
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },// V
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },// W
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },// X
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },// Y
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },// Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },// [
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },// 55
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },// ]
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },// ^
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },// _
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },// '
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },// a
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },// b
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },// c
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },// d
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },// e
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },// f
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },// g
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },// h
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },// i
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },// j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },// k
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },// l
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },// m
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },// n
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },// o
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },// p
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },// q
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },// r
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },// s
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },// t
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },// u
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },// v
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },// w
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },// x
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },// y
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },// z
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }// horiz lines
};

long int delay_1us(void)
{
        long int count=2;
        while(count--);
        return 0;
}

void delay_ms(unsigned int nms)
{         
  unsigned int n,m;        
        n=nms;
        while(n)
        {
        for(m=0;m<1000;m++) delay_1us();
        n--;        
        }              
}   
                                                                                       

void Delay(unsigned long count)
{
        while(count--);
}

void set_SCE(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
}
void clear_SCE(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
}
void set_RES(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);        
}
void clear_RES(void)
{
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
}
void set_DC(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);        
}
void clear_DC(void)
{
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
}
void set_SDIN(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);        
}
void clear_SDIN(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);        
}
void set_SCLK(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
}
void clear_SCLK(void)
{
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
}

void LCD_write_byte(unsigned char data,unsigned char cmd)
{
  unsigned char i;   
  clear_SCE();  
  if(cmd)
    set_DC();
  else
    clear_DC();      
  for(i=0;i<8;i++)
  {  
    if(data&0x80) //???????????1
      set_SDIN(); //???SDIN=1
    else
      clear_SDIN();//????SDIN=0;SDIN???????DDRAM??
      data = data<<1; //????????????????????,???????
      clear_SCLK();  //SDIN?SCLK??????DDRAM
                  delay_1us();
                  delay_1us();
      set_SCLK();   //
      clear_SCLK(); //
  }   
}

void LCD_init(void)
{
  set_SCE();//
  set_RES();//
  delay_ms(20);
  clear_RES();   
  delay_ms(20);
  set_RES();  
  delay_ms(20);
  LCD_write_byte(0x21,0);//LCD????:????,????,??????
  LCD_write_byte(0xd0,0);//??VOP?,?????????3.00-10.68
  LCD_write_byte(0x20,0);//LCD????:????,????,??????
  LCD_write_byte(0x0c,0);//??????:????
  set_SCE();//SCE????????????,SCLK??????,?????????,??????SCE????
}

void LCD_set_XY(unsigned char X, unsigned char Y)
{
  LCD_write_byte(0x40 | Y, 0);// ?
  LCD_write_byte(0x80 | X, 0);// ?
  set_SCE();
}

void LCD_clear(void)
{
  unsigned char t;
  unsigned char k;
  LCD_set_XY(0,0);
   for(t=0;t<6;t++)
  {  
    for(k=0;k<84;k++)
    {  
      LCD_write_byte(0x00,1);     
    }  
  }
  set_SCE();
}

void LCD_write_char(unsigned char c)
{
  unsigned char c_line;
    c-=32;
    for (c_line=0; c_line<6; c_line++)
    LCD_write_byte(font6x8[c][c_line], 1);  
}

void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
  LCD_set_XY(X,Y);
  while (*s)  
  {
    LCD_write_char(*s);
    s++;
  }
}

void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)
    {
                 LCD_write_char(*s);
                s++;
          }
}
void LCD_write_chinese(unsigned char X, unsigned char Y,char n)
{
  int i;
    LCD_set_XY(X,Y);
  for(i = 0;i < 12; i++)
    {
    LCD_write_byte(chinese_character[n],1);
    }
    LCD_set_XY(X,Y+1);
  for(i = 12; i < 24; i++)
    {
    LCD_write_byte(chinese_character[n],1);
    }
}

void LCD_write_hanzi(unsigned char X,unsigned char Y,char s)
{        
    do
    {        
                char line;
                LCD_set_XY(X,Y);        
                 for (line=0; line<12; line++)
                {        
                        LCD_write_byte(chinese_character[line],1);
                  }
                LCD_set_XY(X,Y+1);
                for (line=12; line<24; line++)
                {               
                        LCD_write_byte(chinese_character
[line],1);
                  }
          }while(0);               
}

int main(void)
{
  HAL_Init();
  SystemClock_Config();
   __HAL_RCC_GPIOA_CLK_ENABLE();
        GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull  = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
        GPIO_InitStruct.Pin =GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
        LCD_init();
        LCD_clear();
   //猴年吉祥
LCD_write_hanzi(14,1,6);
LCD_write_hanzi(26,1,7);
LCD_write_hanzi(38,1,8);
LCD_write_hanzi(50,1,9);
LCD_write_english_string(0,4,"  STM32F042 ");
LCD_write_english_string(0,5,"LCD5110  v1.0");
  while (1);
}


具体显示效果如图

LCD5110显示效果

LCD5110显示效果
收藏 1 评论9 发布时间:2016-2-16 20:20

举报

9个回答
Paderboy 回答时间:2016-2-16 22:04:28
多谢分享。。恭喜。。能拿到F042
jinglixixi 回答时间:2016-2-17 13:24:27
Paderboy 发表于 2016-2-16 22:04
多谢分享。。恭喜。。能拿到F042

多谢多谢
sacq12 回答时间:2016-2-17 15:17:41
贴的代码都是带有表情的
zhangdaijin 回答时间:2016-2-18 12:44:22
谢谢楼主分享
wuweijie 回答时间:2016-2-19 18:19:41
不赖不赖,赞一个
zcl201207 回答时间:2016-2-19 20:08:16
戏如人生 回答时间:2016-2-19 20:41:09
赞一个!!!
jinglixixi 回答时间:2016-2-29 11:49:20
sacq12 发表于 2016-2-17 15:17
贴的代码都是带有表情的

见笑,不知什么原因,改了次也没变过来。
jinglixixi 回答时间:2016-2-29 11:52:57
不知谁有 STM32F051 SDHC例程能发上来,用清风的驱程好像不支持8G的SD卡,1G的市面上基本见不到了,况且容量也过小。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版