STM32F103RCT6驱动LCD5110屏

一、LCD5110屏是仿SPI模拟的。

LCD屏的管脚图:1——8号脚必须接上,6和7脚并联接到VCC上

 


二、管脚配置(此处用到的IO口均为普通IO口)

#define PA5_DO                            GPIO_Pin_5  
#define DO_HIGH                         GPIO_SetBits(GPIOA,PA5_DO )
#define DO_LOW                          GPIO_ResetBits(GPIOA,PA5_DO )

#define PA6_CE                           GPIO_Pin_6  
#define CE_HIGH                         GPIO_SetBits(GPIOA,PA6_CE )
#define CE_LOW                          GPIO_ResetBits(GPIOA,PA6_CE )

#define PA7_DIN                          GPIO_Pin_7 
#define DIN_HIGH                        GPIO_SetBits(GPIOA,PA7_DIN )
#define DIN_LOW                         GPIO_ResetBits(GPIOA,PA7_DIN )

#define PC11_RST                       GPIO_Pin_11  
#define RST_HIGH                       GPIO_SetBits(GPIOC,PC11_RST )
#define RST_LOW                        GPIO_ResetBits(GPIOC,PC11_RST )

#define PB15_CLK                GPIO_Pin_15 
#define CLK_HIGH                        GPIO_SetBits(GPIOB,PB15_CLK )
#define CLK_LOW                        GPIO_ResetBits(GPIOB,PB15_CLK )


void SPI_GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | 
                            RCC_APB2Periph_GPIOB | 
                            RCC_APB2Periph_GPIOC , ENABLE);
    
    GPIO_InitStructure.GPIO_Pin=PA5_DO;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin=PA6_CE;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin=PA7_DIN;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin=PB15_CLK;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin=PC11_RST;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructure);


}
 

三、首先建立字符模:
const unsigned char font6x8[][6]=//功能ASCII码

{
{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},//5
{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},//
{0x00,0x1C,0xA0,0xA0,0xA0,0x7C},//y
{0x00,0x44,0x64,0x54,0x4C,0x44},//z
{0x14,0x14,0x14,0x14,0x14,0x14}//horizlines
};

四、LCD5110屏是有光标的,就是从哪里开始显示

/******************************************************************************
功能:设置坐标X:0-83Y:0-5
******************************************************************************/

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

四、LCD5110屏的模块数据与命令
/******************************************************************************
功能:5110写数据/命令
dat写入的数据,command写入的命令
D/C=0命令,D/C=1数据。
******************************************************************************/
void LCD_write_byte(unsigned char dat,unsigned char command)
{
    unsigned char i;
    
    CE_LOW;
    if(command==0)
     DO_LOW;
    else
      DO_HIGH;
    
    for(i=0;i<8;i++)
    {
        if(dat&0x80)
              DIN_HIGH;
        else
              DIN_LOW;
        
        CLK_LOW;
        dat=dat<<1;
        CLK_HIGH;
    }
    CE_HIGH;
}
 

4.清屏函数

/******************************************************************************
功能:清屏
******************************************************************************/
void LCD_clear(void)
{
    unsigned int i;
    LCD_write_byte(0x0c,0);
    LCD_write_byte(0x80,0);
    for(i=0;i<504;i++)
    {
       LCD_write_byte(0,1);
    }
}
 

5,LCD5110屏初始化

/******************************************************************************
   功能:5110初始化
   ******************************************************************************/
 void LCD_init(void)
 {
    RST_LOW;                                             //产生一个让LCD屏复位的低电平
    MDL_Delay_1ms(1);                            //延时一毫秒,不能超过100毫秒
    RST_HIGH;
    
    CE_HIGH;
    MDL_Delay_1ms(1);
    CE_HIGH;
    
    LCD_write_byte(0x21,0);                                   //使用扩展命令设置LCD模式
    LCD_write_byte(0xc8,0);
    LCD_write_byte(0x06,0);                                 //温度校正
    LCD_write_byte(0x13,0);                                  //1:48
    LCD_write_byte(0x20,0);                                  //使用基本命令
    LCD_clear();
    LCD_write_byte(0x0c,0);
    CE_LOW;
  }

6.如何显示一个字符

 /******************************************************************************
                  功能:显示一个字符
  ******************************************************************************/
  void LCD_write_char(unsigned char c)
  {
      unsigned char line;
    c-=32;
      for(line=0;line<6;line++)
    LCD_write_byte(font6x8[c][line],1);
  }        
 

7.显示字符串:

  /******************************************************************************
  功能:显示一个字符串
  ******************************************************************************/
void LCD_write_str(unsigned char*string)
{
    while(*string)
    {
        LCD_write_char(*string);
        string++;
    }
}

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值