Thứ Năm, 29 tháng 11, 2018

Giao tiếp màn hình NOKIA 5110


Giới thiệu

Nokia5110 là một màn hình hiển thị đồ họa có thể hiển thị văn bản, hình ảnh và các mẫu khác nhau.
Nó có độ phân giải 48x84 và đi kèm với đèn nền.
Nó sử dụng giao tiếp SPI để giao tiếp với một vi điều khiển.
Dữ liệu và lệnh có thể được gửi qua vi điều khiển tới màn hình để điều khiển đầu ra hiển thị.
Nó có 8 chân.
Để biết thông tin về SPI trong PIC18F4550, hãy tham khảo chủ đề về SPI trong PIC18F4550 trong phần bên trong PIC.
Màn hình LCD Nokia 5110
Mô-đun LCD Nokia 5110


Sơ đồ

  • Sơ đồ mạch sau hiển thị giao tiếp hoàn chỉnh của màn hình PIC18F4550 tới Nokia5110.
Màn hình LCD Nokia 5110 với PIC18F4550

Chi tiết kết nối

Chân Nokia5110
Chân PIC18F4550
Cổng PIC18F4550 / Chức năng
RST
20
RD1
CE
7
SS
DC
19
RD0
Din
26
SDO
CLK
34
SCK
BL và VCC
11/32
VCC
GND
12/31
GND

Lập trình Nokia5110

  • Trong bước đầu tiên mã hóa là bao gồm và khởi tạo các tệp tiêu đề SPI_Header_File.h.
  • Trong tệp SPI_Header_File.h, tất cả các định nghĩa của SPI.
Khởi tạo Nokia5110
  • Bước đầu tiên là đặt lại màn hình bằng cách gửi xung từ thấp đến cao để đặt lại pin. Độ rộng xung của tín hiệu thấp không được <100 ms.  
  • Gửi lệnh 0x21 để đặt màn hình ở chế độ lệnh mở rộng (H = 1).
  • Thiết lập hệ thống thiên vị điện áp bằng cách sử dụng lệnh 0x13, nó được khuyến nghị cho n = 4 và 1:48 tốc độ mux.
  • Đặt nhiệt độ. hệ số. Ví dụ: Đặt hệ số nhiệt độ 3 bằng cách gửi 0x07H.
  • Sau đó thiết lập VOP = 5 V bằng cách gửi lệnh 0xC0H.
  • Gửi lệnh 0x20 để cấu hình màn hình cho chế độ lệnh cơ bản (H = 0).
  • Và sau đó gửi 0x0C để vận hành màn hình ở chế độ bình thường.
void Nokia_Init()
{
    /*apply 100 ms reset(low to high) pulse */
    RES = 0;  /* enable reset */
    MSdelay(100);
    RES = 1;  /* disable reset */
    Nokia_SendCommand(0x21);  /* use extended instruction set */
    Nokia_SendCommand(0x13);  /* select Bias voltage */
    Nokia_SendCommand(0x07);  /* set temperature coefficient */
    Nokia_SendCommand(0xC0);  /* set LCD Vop for contrast */    
    Nokia_SendCommand(0x20);  /* use basic instruction set */    
    Nokia_SendCommand(0x0C);  /* set normal mode */   
}

Chức năng ghi lệnh:
  • Làm cho DC pin thấp cho hoạt động lệnh.
  • Bật chốt chọn nô lệ.
  • Gửi / ghi lệnh vào thanh ghi dữ liệu SPI (SSPBUF).
  • Vô hiệu hóa chốt chọn nô lệ.
void Nokia_SendCommand(char cmd)
{
    DC = 0;  /* Data/Command pin, D/C=1 - Data, D/C = 0 - Command*/
    CS = 0;  /* enable chip */
    SPI_Write (cmd);  /* write command to the Nokia 5110 */
    CS = 1;  /* disable chip */
}

Chức năng ghi dữ liệu:
  • Đối với dữ liệu, hoạt động làm cho DC pin cao cho một hoạt động dữ liệu.
  • Bật chốt chọn nô lệ.
  • Gửi / ghi dữ liệu vào thanh ghi dữ liệu SPI (SSPBUF).
  • Vô hiệu hóa nô lệ chọn pin sau khi gửi dữ liệu.
void Nokia_SendData(char dat)
{   
    char i;
    DC = 1;  /* Data/Command pin, D/C=1 - Data, D/C = 0 - Command*/
    CS = 0;  /* enable chip */
    for(i=0;i<5;i++)
        SPI_Write(font[(dat) - (0x20)][i]);  /* write data to the Nokia 5110 */ 
    CS = 1;  /* disable chip */
}

Thí dụ

Hiển thị “ElectronicWings” trên màn hình Nokia5110 sử dụng PIC18F4550
/*
 * Nokia 5110 display interface with PIC18F4550
 * 
 */


#include <pic18f4550.h>
#include "Configuration_Header_File.h"
#include "SPI_Header_File.h"
#include “Nokia_Font.h”

void Nokia_Init();
void Nokia_SendCommand(char);
void Nokia_SendData(char);
void Nokia_SendString(char *);
void MSdelay(unsigned int);
void Nokia_Clear();
void Nokia_PositionXY(char, char);

#define DC LATD0      
#define RES LATD1  /* connected to reset */

void main()
{
    OSCCON = 0X72;  /* set internal oscillator frequency, 8 MHz*/
    TRISD = 0;  /* set PORT as output port*/
    SPI_Init_Master();  /* initialize SPI master*/
    Nokia_Init();  /* initialize Nokia 5110 display */
    Nokia_Clear();  /* clear Nokia display */
    Nokia_PositionXY(0,0);  /* set X and Y position for printing */
    Nokia_SendString("ElectronicWings");
    while(1);
}
void Nokia_SendCommand(char cmd)
{
    DC = 0;  /* Data/Command pin, D/C=1 - Data, D/C = 0 - Command*/
    CS = 0;  /* enable chip */
    SPI_Write(cmd);  /* write command to the Nokia 5110 */
    CS = 1;  /* disable chip */
}
void Nokia_SendData(char dat)
{   
    char i;
    DC = 1;  /* Data/Command pin, D/C=1 - Data, D/C = 0 - Command*/
    CS = 0;  /* enable chip */
    for(i=0;i<5;i++)
        SPI_Write(font[(dat) - (0x20)][i]);  /* write data to the Nokia 5110 */ 
    CS = 1;  /* disable chip */
}

void Nokia_SendString(char *data)
{
    char i;
    while((*data)!=0)
    {   
        Nokia_SendData(*data);
        data++;
    }    
}
void Nokia_PositionXY(char X, char Y)
{
    Nokia_SendCommand(0x80 | X);  /* set X position */
    Nokia_SendCommand(0x40 | Y);  /* set Y position */  
}

void Nokia_Init()
{
    /*apply 100 ms reset(low to high) pulse */
    RES = 0;  /* enable reset */
    MSdelay(100);
    RES = 1;  /* disable reset */
    Nokia_SendCommand(0x21);  /* display extended commands*/
    Nokia_SendCommand(0x13);  /* select Bias voltage*/
    Nokia_SendCommand(0x07);  /* set temperature coefficient*/
    Nokia_SendCommand(0xC0);  /* set LCD Vop for contrast */   
    Nokia_SendCommand(0x20);  /* display basic commands */    
    Nokia_SendCommand(0x0C);  /* set normal mode */
}

void Nokia_Clear()
{
    char i,j;
    CS = 0;
    DC = 1;
    for(i=0;i<6;i++)
    {   
        for(j=0;j<84;j++)
            SPI_Write(0);  /*write 0 to clear display */
    }      
    CS = 1;    
}
void MSdelay(unsigned int val)
{
     unsigned int i,j;
        for(i=0;i<=val;i++)
            for(j=0;j<81;j++);  /*This count Provide delay of 1 ms for 8MHz Frequency */
 }

Chức năng hiển thị hình ảnh

void Nokia_DisplayImage (const unsigned char *image)
{
    int i;
    CS = 0;
    DC = 1;
    for(i=0;i<504;i++)
    {
        SPI_Write(image[i]);        
    }    
    CS = 1;
}
Code
Tập tin đính kèm