⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 Wiznet iRadio Source
💻 C
字号:

#include "lcd.h"
#include "util.h"
#include "eeprom.h"
#include "netconfig.h"
#include <stdio.h> 
#include <string.h>
#include <stdlib.h> 


#define LCDCmdAddress 		*((volatile u8 *) 0x66000000)
#define LCDDataAddress 		*((volatile u8 *) 0x66000001)


#define X_BYTES     (128)
#define Y_BYTES     (8)
#define SCRN_LEFT   (0)
#define SCRN_TOP    (0)
#define SCRN_RIGHT  (127)
#define SCRN_BOTTOM (63)

#define  LCD_ERROR          (0)

#define  NUMBER_OF_PAGES    (8)

#define  FIRST_PAGE         (0)
#define  FIRST_COLUMN       (0)

#define  LAST_PAGE          (7)
#define  LAST_COLUMN        (127)

/*
The following definitions are the command codes that are passed to the
display via the data bus.
*/
#define  DISPLAY_ON         (0xAF)
#define  DISPLAY_OFF        (0xAE)
#define  START_LINE_SET     (0x40)
#define  PAGE_ADDRESS_SET   (0xB0)


/*
The Column Address is a two byte operation that writes the most significant
bits of the address to D3 - D0 and then writes the least significant bits to
D3- D0. Since the Column Address auto increments after each write, direct
access is infrequent.
*/
#define COLUMN_ADDRESS_HIGH     (0x10)
#define COLUMN_ADDRESS_LOW      (0x00)
#define ADC_SELECT_NORMAL       (0xA0)
#define ADC_SELECT_REVERSE      (0xA1)
#define DISPLAY_NORMAL          (0xA6)
#define DISPLAY_REVERSE         (0xA7)
#define ALL_POINTS_ON           (0xA5)
#define ALL_POINTS_OFF          (0xA4)
#define LCD_BIAS_1_9            (0xA2)
#define LCD_BIAS_1_7            (0xA3)
#define READ_MODIFY_WRITE       (0xE0)
#define END                     (0xEE)
#define RESET_DISPLAY           (0xE2)
#define COMMON_OUTPUT_NORMAL    (0xC0)
#define COMMON_OUTPUT_REVERSE   (0xC8)


/*
The power control set value is obtained by OR'ing the values together to
create the appropriate data value. For example:
data = (POWER_CONTROL_SET | BOOSTER_CIRCUIT |
VOLTAGE_REGULATOR | VOLTAGE_FOLLOWER);
Only the bits that are desired need be OR'ed in because the initial value
of POWER_CONTROL_SET sets them to zero.
*/
#define POWER_CONTROL_SET   (0x28)
#define BOOSTER_CIRCUIT     (0x04)
#define VOLTAGE_REGULATOR   (0x02)
#define VOLTAGE_FOLLOWER    (0x01)


/*
The initial value of the V5_RESISTOR_RATIO sets the Rb/Ra ratio to the
smallest setting. The valid range of the ratio is:
0x20 <= V5_RESISTOR_RATIO <= 0x27
*/
#define V5_RESISTOR_RATIO   (0x24)


/*
When the electronic volume command is input, the electronic volume register
set command becomes enabled. Once the electronic volume mode has been set,
no other command except for the electronic volume register command can be
used. Once the electronic volume register set command has been used to set
data into the register, then the electronic volume mode is released.
*/
#define ELECTRONIC_VOLUME_SET   (0x81)
#define ELECTRONIC_VOLUME_INIT  (0x1F)



// Static Variables
static u8 brightPercent = 10;   

// The LCD display image memory. Buffer arranged so page memory is sequential in RAM.
static u8 display_memory[Y_BYTES][X_BYTES];


// Below is the ASCII Char set table. This is used to display ASCII characters 
// on the LCD. The information is stored in a 130 by 5 array. The row is the ASCII 
// index number the columns are the (5) bytes that hold display information.
static const u8 character_table[130][5] =
{
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // nul
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // soh
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // stx
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // etx
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // eot
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // enq
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // ack
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // bel
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // bs
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // ht
    
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // nl
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // vt
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // ff
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // cr
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // so
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // si
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // dle
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // dcl
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // dc2
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // dc3
    
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // dc4
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // nak
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // syn
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // etb
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // can
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // em
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // sub
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // esc
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // fs 
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // gs
    
    {0xCF, 0x9F, 0xCF, 0xE7, 0xF3},        // rs (check mark)0x30
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // us
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // sp
    {0xFF, 0xFF, 0xA0, 0xFF, 0xFF},        //  !
    {0xFF, 0xF8, 0xFF, 0xF8, 0xFF},        // "
    {0xEB, 0x80, 0xEB, 0x80, 0xEB},        // #
    {0xDB, 0xD5, 0x80, 0xD5, 0xED},        // $
    {0xDC, 0xEC, 0xF7, 0x9B, 0x9D},        // %
    {0xC9, 0xB6, 0xA9, 0xDF, 0xAF},        // &
    {0xFF, 0xFF, 0xF8, 0xFF, 0xFF},        // '
    
    {0xE3, 0xDD, 0xBE, 0xFF, 0xFF},        // (
    {0xFF, 0xFF, 0xBE, 0xDD, 0xE3},        // )
    {0xDD, 0xEB, 0x80, 0xEB, 0xDD},        // *
    {0xF7, 0xF7, 0xC1, 0xF7, 0xF7},        // +
    {0xFF, 0xBF, 0xCF, 0xFF, 0xFF},        // ,
    {0xF7, 0xF7, 0xF7, 0xF7, 0xF7},        // -
    {0xFF, 0xFF, 0xBF, 0xFF, 0xFF},        // .
    {0x9F, 0xEF, 0xF7, 0xFB, 0xFC},        // /
    {0xC1, 0xAE, 0xB6, 0xBA, 0xC1},        // 0
    {0xFF, 0xBD, 0x80, 0xBF, 0xFF},        // 1
    
    {0x8D, 0xB6, 0xB6, 0xB6, 0xB9},        // 2
    {0xDD, 0xBE, 0xB6, 0xB6, 0xC9},        // 3
    {0xE7, 0xEB, 0xED, 0x80, 0xEF},        // 4
    {0xD8, 0xBA, 0xBA, 0xBA, 0xC6},        // 5
    {0xC3, 0xB5, 0xB6, 0xB6, 0xCF},        // 6
    {0xFE, 0x8E, 0xF6, 0xFA, 0xFC},        // 7
    {0xC9, 0xB6, 0xB6, 0xB6, 0xC9},        // 8
    {0xF9, 0xB6, 0xB6, 0xD6, 0xE1},        // 9
    {0xFF, 0xFF, 0xEB, 0xFF, 0xFF},        // :
    {0xFF, 0xBF, 0xCB, 0xFF, 0xFF},        // ;
    
    {0xF7, 0xEB, 0xDD, 0xBE, 0xFF},        // <
    {0xEB, 0xEB, 0xEB, 0xEB, 0xEB},        // =
    {0xFF, 0xBE, 0xDD, 0xEB, 0xF7},        // >
    {0xFD, 0xFE, 0xA6, 0xFA, 0xFD},        // ?
    {0xC1, 0xBE, 0xA2, 0xAA, 0xE1},        // @
    {0x83, 0xED, 0xEE, 0xED, 0x83},        // A
    {0xBE, 0x80, 0xB6, 0xB6, 0xC9},        // B
    {0xC1, 0xBE, 0xBE, 0xBE, 0xDD},        // C
    {0xBE, 0x80, 0xBE, 0xBE, 0xC1},        // D
    {0x80, 0xB6, 0xB6, 0xB6, 0xBE},        // E
    
    {0x80, 0xF6, 0xF6, 0xF6, 0xF6},        // F
    {0xC1, 0xBE, 0xBE, 0xAE, 0x8D},        // G
    {0x80, 0xF7, 0xF7, 0xF7, 0x80},        // H
    {0xFF, 0xBE, 0x80, 0xBE, 0xFF},        // I
    {0xDF, 0xBF, 0xBF, 0xBF, 0xC0},        // J
    {0x80, 0xF7, 0xEB, 0xDD, 0xBE},        // K
    {0x80, 0xBF, 0xBF, 0xBF, 0xBF},        // L
    {0x80, 0xFD, 0xFB, 0xFD, 0x80},        // M
    {0x80, 0xFB, 0xF7, 0xEF, 0x80},        // N
    {0xC1, 0xBE, 0xBE, 0xBE, 0xC1},        // O
    
    {0x80, 0xF6, 0xF6, 0xF6, 0xF9},        // P
    {0xC1, 0xBE, 0xAE, 0xDE, 0xA1},        // Q
    {0x80, 0xF6, 0xE6, 0xD6, 0xB9},        // R
    {0xD9, 0xB6, 0xB6, 0xB6, 0xCD},        // S
    {0xFE, 0xFE, 0x80, 0xFE, 0xFE},        // T
    {0xC0, 0xBF, 0xBF, 0xBF, 0xC0},        // U
    {0xF8, 0xE7, 0x9F, 0xE7, 0xF8},        // V
    {0x80, 0xDF, 0xE7, 0xDF, 0x80},        // W
    {0x9C, 0xEB, 0xF7, 0xEB, 0x9C},        // X
    {0xFC, 0xFB, 0x87, 0xFB, 0xFC},        // Y
    
    {0x9E, 0xAE, 0xB6, 0xBA, 0xBC},        // Z
    {0xFF, 0x80, 0xBE, 0xBE, 0xBE},        // [
    {0xFC, 0xFB, 0xF7, 0xEF, 0x9F},        //
    {0xBE, 0xBE, 0xBE, 0x80, 0xFF},        // ]
    {0xFB, 0xFD, 0xFE, 0xFD, 0xFB},        // ^
    {0xBF, 0xBF, 0xBF, 0xBF, 0xBF},        // _
    {0xFD, 0xFB, 0xF7, 0xFF, 0xFF},        // '
    {0xDF, 0xAB, 0xAB, 0xAB, 0x87},        // a
    {0x80, 0xB7, 0xB7, 0xB7, 0xCF},        // b
    {0xC7, 0xBB, 0xBB, 0xBB, 0xBB},        // c
    
    {0xCF, 0xB7, 0xB7, 0xB7, 0x80},        // d
    {0xC7, 0xAB, 0xAB, 0xAB, 0xF7},        // e
    {0xFF, 0xF7, 0x81, 0xF6, 0xFD},        // f
    {0xF7, 0xAB, 0xAB, 0xAB, 0xC7},        // g
    {0x80, 0xF7, 0xF7, 0xF7, 0x8F},        // h
    {0xFF, 0xFF, 0x85, 0xFF, 0xFF},        // i
    {0xFF, 0xDF, 0xBF, 0xBF, 0xC2},        // j
    {0xFF, 0x80, 0xEF, 0xD7, 0xBB},        // k
    {0xFF, 0xFF, 0x80, 0xFF, 0xFF},        // l
    {0x83, 0xFB, 0xC7, 0xFB, 0x83},        // m
    
    {0x83, 0xF7, 0xFB, 0xFB, 0x87},        // n
    {0xC7, 0xBB, 0xBB, 0xBB, 0xC7},        // o
    {0x83, 0xEB, 0xEB, 0xEB, 0xF7},        // p
    {0xF7, 0xEB, 0xEB, 0xEB, 0x83},        // q
    {0x83, 0xF7, 0xFB, 0xFB, 0xF7},        // r
    {0xB7, 0xAB, 0xAB, 0xAB, 0xDB},        // s
    {0xFB, 0xFB, 0x80, 0xFB, 0xFB},        // t
    {0xC3, 0xBF, 0xBF, 0xBF, 0xC3},        // u
    {0xE3, 0xDF, 0xBF, 0xDF, 0xE3},        // v
    {0xC3, 0xBF, 0xCF, 0xBF, 0xC3},        // w
    
    {0xBB, 0xD7, 0xEF, 0xD7, 0xBB},        // x
    {0xFB, 0xB7, 0xCF, 0xF7, 0xFB},        // y
    {0xBB, 0x9B, 0xAB, 0xB3, 0xBB},        // z
    {0xF7, 0xC9, 0xBE, 0xBE, 0xFF},        // {
    {0xFF, 0xFF, 0xC1, 0xFF, 0xFF},        // |
    {0xFF, 0xBE, 0xBE, 0xC9, 0xF7},        // }
    {0xF7, 0xFB, 0xF7, 0xEF, 0xF7},        // ~
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // del
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF},        // 
    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF}         // 
};


// Static Variables

static  u8 msg_product_name[]  = " Wiz-iRadio ";


// Implementation

/*
This performs all of the necessary initialization of the SED-1565 controller
inside the Optrex display.
Usage Examples:
lcd_init();

When the RES input comes to the 揕

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -