打印
[应用方案]

【新唐资料分享月】基于NuTiny-EVB-M058S开发板实现LCD5110显示

[复制链接]
1059|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NuTiny-EVB-M058S开发板是一款小巧的学习工具,为了便于进行人机交互,为它配置一块液晶显示屏是一个不错的选择。LCD5110在众多的液晶显示屏中是一种比较有特点的显示器件,它能耗低,显示字符量相对较高,价格也较为便宜,故选取LCD5110为显示目标。
    图1  LCD5110显示效果
       
    图2 配温湿度传感器的显示效果

程序代码如下:
//基于NuTiny-EVB-M058SSAN-LQFP64 V2.1开发板
//实现LCD5110液晶屏显示功能
#include <stdint.h>
#include "M051.h"
#include "Register_Bit.h"
#include "Common.h"
#include "Macro_SystemClock.h"
#include "Macro_Timer.h"
#define CLOCK_SETUP           1
#define CLOCK_EN              0xF
#define PLL_Engine_Enable       1
#define PLL_SEL               0x00000000
#define CLOCK_SEL             0x0
#define GPIO_SETUP            1
#define P3_MODE                    0x5555
//SCE --GND
//SCLK--P3.3
//DIN --P3.2
//DC  --P3.1
//RST --P3.0
#define SetLCD_RST_High()          P3_DOUT|=  1UL<<0
#define SetLCD_RST_Low()          P3_DOUT&=~(1UL<<0)
#define SetLCD_DC_High()          P3_DOUT|=  1UL<<1
#define SetLCD_DC_Low()            P3_DOUT&=~(1UL<<1)
#define SetLCD_SDIN_High()        P3_DOUT|=  1UL<<2
#define SetLCD_SDIN_Low()          P3_DOUT&=~(1UL<<2)
#define SetLCD_SCLK_High()        P3_DOUT|=  1UL<<3
#define SetLCD_SCLK_Low()          P3_DOUT&=~(1UL<<3)
void TMR0_Delay1ms(uint32_t ulCNT);
void Timer0_Init(void);
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 },   // $
。。。
}
// 向LCD5110写指令
void LCD_write_CMD(unsigned char com)
{
    unsigned char uci;
    SetLCD_DC_Low();
        for(uci=0;uci<8;uci++)
        {
                if(com & 0x80)
                {
                        SetLCD_SDIN_High();
                  }
                else
                {
                        SetLCD_SDIN_Low();
                  }
                SetLCD_SCLK_Low();         
                com = com << 1;
                SetLCD_SCLK_High();
        }
}
//  显示定位
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_CMD(0x40 | (Y & 0X07));                // column
    LCD_write_CMD(0x80 | (X & 0X7F));             // row
}
// 向LCD5110写字节数据
void LCD_write_Data(unsigned char dt)
{
     unsigned char uci;
     SetLCD_DC_High();
         for(uci=0;uci<8;uci++)
         {
                if(dt & 0x80)
                {
                        SetLCD_SDIN_High();
          }
                else
                {
                        SetLCD_SDIN_Low();
            }
                SetLCD_SCLK_Low();
                dt = dt << 1;
                SetLCD_SCLK_High();
         }
}
// 清屏
void LCD_Clear(void)
{
        int uii;
        LCD_set_XY(0,0);
        for(uii=0; uii<504; uii++)
        {
                LCD_write_Data(0x00);
        }
}
//  LCD5110初始化
void LCD_Init(void)
{
         SetLCD_RST_Low();   
         delay_1us();
         SetLCD_RST_High();   
         delay_1us();
         delay_1us();
     LCD_write_CMD(0x21);
         LCD_write_CMD(0xc0);
         LCD_write_CMD(0x06);
         LCD_write_CMD(0x13);
         LCD_write_CMD(0x20);
         LCD_Clear();  
         LCD_write_CMD(0x0c);
}
// 在LCD5110 显示一个字符
void LCD_write_char(unsigned char c)
{
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
          {
              LCD_write_Data(font6x8[c][line]);
            }
}
// 在LCD5110 显示字符串
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 TestLCD_Nokia5110(void)
{
        LCD_Init();
        LCD_Clear();
        LCD_write_english_string(0,0,"LCD 5110 Test");               
        delayms(100);       
    LCD_write_english_string(0,1,"ARM Cortex-M0");                 
        delayms(100);
        LCD_write_english_string(0,2," NuTiny-EVB- ");
        delayms(100);
        LCD_write_english_string(0,3,"M058SSAN V2.1");
    delayms(100);  
        LCD_write_english_string(0,4,"Design:lijing");
        delayms(100);  
}
//  主函数
main(void)
{
    Un_Lock_Reg();
        PWRCON |= XTL12M_EN;
        while((CLKSTATUS & XTL12M_STB) == 0);                 // Wait until 12M clock is stable.       
        CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;        //Set external crystal as the system clock
    Timer0_Init();
    TestLCD_Nokia5110();
        while(1);
}
在使用YBDZ转换板替代原Smart M05X时,需将YBDZ上的RSTP3.5连接,通过按K4键来实现复位处理来执行显示功能。否则不能执行正常显示。
在使用NuTiny-EVB-M058SSAN-LQFP64 V2.1开发板替代原Smart M05X时,需使用开发板上的USB接口来供电,否则用外接的稳压电源无法工作,原因待查。
     
   图3  YBDZ转换板的LCD5110显示效果

沙发
dongnanxibei| | 2016-12-13 21:20 | 只看该作者
这个显示屏貌似SPI接口的,非常流行,作为学习的显示器。

使用特权

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

本版积分规则

446

主题

2675

帖子

37

粉丝