lcd.h 7.2 KB
Newer Older
M
Ming, Bai 已提交
1
/*
2
 * Copyright (c) 2006-2021, RT-Thread Development Team
M
Ming, Bai 已提交
3
 *
4
 * SPDX-License-Identifier: Apache-2.0
M
Ming, Bai 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17
 *
 * Change Logs:
 * Date           Author       Notes
 * 2008-03-29     Yi.Qiu
 * 2011-06-13     lgnq         modified for FM3 easy kit
 */
#ifndef __LCD_H__
#define __LCD_H__

#include <rtthread.h>
#include "mb9bf506r.h"

/********* LCD Hardward Interface *************
18 19 20 21 22 23 24 25 26
LCD_CS      PORT1.7
LCD_CD      PORT1.6
LCD_WR      PORT1.5
LCD_RD      PORT1.4
LCD_SCK     PORT1.3
LCD_MOSI    PORT1.2
LCD_C86     PORT1.1
LCD_PS      PORT1.0
LCD_DATA[0..7]      PORT5.[0..7]
M
Ming, Bai 已提交
27
***********************************************/
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#define LCD_CS                  (1UL << 7)
#define LCD_CS_DDR              (FM3_GPIO->DDR1)
#define LCD_CS_PFR              (FM3_GPIO->PFR1)
#define LCD_CS_PDOR             (FM3_GPIO->PDOR1)

#define LCD_CD                  (1UL << 6)
#define LCD_CD_DDR              (FM3_GPIO->DDR1)
#define LCD_CD_PFR              (FM3_GPIO->PFR1)
#define LCD_CD_PDOR             (FM3_GPIO->PDOR1)

#define LCD_PS                  (1UL << 0)
#define LCD_PS_DDR              (FM3_GPIO->DDR1)
#define LCD_PS_PFR              (FM3_GPIO->PFR1)
#define LCD_PS_PDOR             (FM3_GPIO->PDOR1)

#define LCD_CLK                 (1UL << 6)
#define LCD_CLK_DDR             (FM3_GPIO->DDR5)
#define LCD_CLK_PFR             (FM3_GPIO->PFR5)
#define LCD_CLK_PDOR            (FM3_GPIO->PDOR5)

#define LCD_DATA                (1UL << 7)
#define LCD_DATA_DDR            (FM3_GPIO->DDR5)
#define LCD_DATA_PFR            (FM3_GPIO->PFR5)
#define LCD_DATA_PDOR           (FM3_GPIO->PDOR5)
M
Ming, Bai 已提交
52 53

/* LCD driver for ZYMG12864C3 */
54 55
#define LCD_WIDTH               128
#define LCD_HEIGHT              64
M
Ming, Bai 已提交
56 57

// Driver the LCD with Parallel or serial interface and the command/data control pin is gpio
58 59
#define LCD_CS_HIGH()           LCD_CS_PDOR  |=  LCD_CS
#define LCD_CS_LOW()            LCD_CS_PDOR  &= ~LCD_CS
M
Ming, Bai 已提交
60

61 62
#define LCD_CD_HIGH()           LCD_CD_PDOR |=  LCD_CD
#define LCD_CD_LOW()            LCD_CD_PDOR &= ~LCD_CD
M
Ming, Bai 已提交
63

64 65
#define LCD_PS_HIGH()           LCD_PS_PDOR |=  LCD_PS
#define LCD_PS_LOW()            LCD_PS_PDOR &= ~LCD_PS
M
Ming, Bai 已提交
66

67 68
#define LCD_CLK_HIGH()          LCD_CLK_PDOR |=  LCD_CLK
#define LCD_CLK_LOW()           LCD_CLK_PDOR &= ~LCD_CLK
M
Ming, Bai 已提交
69

70 71
#define LCD_DATA_HIGH()         LCD_DATA_PDOR |=  LCD_DATA
#define LCD_DATA_LOW()          LCD_DATA_PDOR &= ~LCD_DATA
M
Ming, Bai 已提交
72 73

// define the arrtibute of ZYMG12864(LCM)
74 75 76
#define GUI_LCM_XMAX            128     // defined the lcd's line-number is 128
#define GUI_LCM_YMAX            64      // defined the lcd's column-number is 64
#define GUI_LCM_PAGE            8       // defined the lcd's page-number is 8(GUI_LCM_YMAX/8)
M
Ming, Bai 已提交
77 78

/* set LCD command */
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
#define DISPLAY_ON              0xAF    // A0,RD,WR:010
#define DISPLAY_OFF             0xAE    // A0,RD,WR:010

#define SET_START_LINE_0        0x40    // A0,RD,WR:010; line0~line63
#define SET_PAGE_ADDR_0         0xB0    // A0,RD,WR:010; addr0~addr8
#define SET_COLH_ADDR_0         0x10    // A0,RD,WR:010;
#define SET_COLL_ADDR_0         0x00    // A0,RD,WR:010; addr0~addr131

#define READ_STATUS             0x-0    // A0,RD,WR:001; BUSY | ADC | ON/OFF |  RESET | 0 0 0 0
#define STATUS_BUSY             0x80
#define STATUS_ADC_REVERSE      0x40    // column address 131-n : SEG n, else column address n : SEG n
#define STATUS_DISPLAY_OFF      0x20
#define STATUS_RESET            0x80

#define WRITE_DATA              0x--    // A0,RD,WR:110
#define READ_DATE               0x--    // A0,RD,WR:101; spi mode is unavailable

#define SET_ADC_NORMAL          0xA0    // A0,RD,WR:010
#define SET_ADC_REVERSE         0xA1    // A0,RD,WR:010
#define DISPLAY_NORMAL          0xA6    // A0,RD,WR:010
#define DISPLAY_REVERSE         0xA7    // A0,RD,WR:010; reverse color
#define DISPLAY_ALL_ON          0xA5    // A0,RD,WR:010
#define DISPLAY_ALL_NORMAL      0xA4    // A0,RD,WR:010
M
Ming, Bai 已提交
102 103

/*************************************************************
104 105 106 107
*   bias:   1/65duty | 1/49duty | 1/33duty | 1/55duty | 1/53duty *
*   ---------------|----------|----------|----------|--------- *
*   A2:     1/9 bias | 1/8 bias | 1/6 bias | 1/8 bias | 1/8 bias *
*   A3:     1/7 bias | 1/6 bias | 1/5 bias | 1/6 bias | 1/6 bias *
M
Ming, Bai 已提交
108 109
**************************************************************/

110 111
#define SET_LCD_BIAS_7          0xA3    // A0,RD,WR:010
#define SET_LCD_BIAS_9          0xA2    // A0,RD,WR:010
M
Ming, Bai 已提交
112

113 114 115
#define RMW_MODE_ENABLE         0xE0    // A0,RD,WR:010; the column address locked when read command operating
#define RMW_MODE_END            0xEE    // A0,RD,WR:010; returns to the column address when RMW was entered.
#define RESET_LCD               0xE2    // A0,RD,WR:010
M
Ming, Bai 已提交
116 117 118


/**************************************************************************************
119 120 121 122
*   Com Scan Dir:   |   1/65duty        | 1/49duty      | 1/33duty      | 1/55duty      | 1/53duty      *
*   --------------|-------------|-------------|-------------|------------------------   *
*   C0:     Normal  |   COM0:COM63  |   COM0:COM47  |   COM0:COM31  |   COM0:COM53  |   COM0:COM51  *
*   C8:     Reverse |   COM63:COM0  |   COM47:COM0  |   COM31:COM0  |   COM53:COM0  |   COM51:COM0  *
M
Ming, Bai 已提交
123 124
***************************************************************************************/

125 126
#define COM_SCAN_DIR_NORMAL     0xC0    // A0,RD,WR:010
#define COM_SCAN_DIR_REVERSE    0xC8    // A0,RD,WR:010
M
Ming, Bai 已提交
127 128

// 0 0 1 0 1 | Booster On | Regulator On | Follower On
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
#define POWER_BOOSTER_ON        0x2C    // A0,RD,WR:010
#define POWER_REGULATOR_ON      0x2E    // A0,RD,WR:010
#define POWER_FOLLOWER_ON       0x2F    // A0,RD,WR:010

#define SET_RESISTOR_RATIO      0x20    // A0,RD,WR:010; 20~27:small~large

#define SET_ELECVOL_MODE        0x81    // A0,RD,WR:010; double byte command
#define SET_ELECVOL_REG         0x20    // A0,RD,WR:010; the electronic volume(64 voltage levels:00~3F) function is not used.

#define SLEEP_MODE_ENABLE       0xAC    // A0,RD,WR:010; double byte command, preceding command
#define SLEEP_MODE_DISABLE      0xAD    // A0,RD,WR:010; preceding command
#define SLEEP_MODE_DELIVER      0x00    // A0,RD,WR:010; following command

#define BOOST_RATIO_SET         0xF8    // A0,RD,WR:010; double byte command, preceding command
#define BOOST_RATIO_234         0x00    // A0,RD,WR:010; following command
#define BOOST_RATIO_5           0x01    // A0,RD,WR:010; following command
#define BOOST_RATIO_6           0x03    // A0,RD,WR:010; following command

#define COMMAND_NOP             0xE3    // A0,RD,WR:010
#define COMMAND_IC_TEST         0xFC    // A0,RD,WR:010; don't use

#define RT_DEVICE_CTRL_LCD_GET_WIDTH            0
#define RT_DEVICE_CTRL_LCD_GET_HEIGHT           1
#define RT_DEVICE_CTRL_LCD_GET_BPP              2
#define RT_DEVICE_CTRL_LCD_GET_FRAMEBUFFER      3
#define RT_DEVICE_CTRL_LCD_POWER_ON             4
#define RT_DEVICE_CTRL_LCD_POWER_OFF            5
#define RT_DEVICE_CTRL_LCD_CLEAR_SCR            6
#define RT_DEVICE_CTRL_LCD_FILL_ALL             7
#define RT_DEVICE_CTRL_LCD_UPDATE_POINT         8
#define RT_DEVICE_CTRL_LCD_DISPLAY_ON           9
#define RT_DEVICE_CTRL_LCD_DISPLAY_OFF          10
#define RT_DEVICE_CTRL_LCD_PUT_STRING           11

enum
M
Ming, Bai 已提交
164
{
165 166 167 168
    ADC_MSG,
    KEY_MSG,
    CPU_MSG,
    MAX_MSG,
M
Ming, Bai 已提交
169 170 171 172
};

struct lcd_msg
{
173 174 175 176 177
    rt_uint8_t  type;
    rt_uint16_t adc_value;
    rt_uint8_t  key;
    rt_uint16_t major;
    rt_uint16_t minor;
M
Ming, Bai 已提交
178 179 180 181 182 183 184 185
};

extern rt_uint32_t x;
extern rt_uint32_t y;

void rt_hw_lcd_init(void);

#endif