📄 main.c
字号:
/*------------------------------------------------------------------------------------
Nom : Test_Nokia_7210_MSP430_SPI.c
Description : Test des fonctions de gestion LCD Nokia 7210 & 6100
Routines pour controleurs Epson S1D15G10 et Philips PCF8833
Utilisation du coupleur SPI
Author : 24/03/2006 - CREMMEL Marcel
History : 24/03/2006 - Premi鑢e version
--------------------------------------------------------------------------------------*/
#include <msp430x14x.h>
#include <stdio.h>
#include <stdbool.h> //Pour le type "bool"
#include <math.h>
#include <stdlib.h> //Pour le type div_t
/*------------------------------------------------------------------------------------
C鈈lage
--------------------------------------------------------------------------------------*/
// Connexions LCD Nokia
#define Lcd_CE_Pin 0x01 // P3.0 = SCE
#define Lcd_DIN_Pin 0x02 // P3.1 = SOMI = SDIN
#define Lcd_RST_Pin 0x04 // P3.2 = RES
#define Lcd_CLK_Pin 0x08 // P3.3 = UCLK = SCLK
#define Type_Controler_Pin 0x10 //P3.4 = Type de controleur : "1" : Epson; "0" : Philips
/*------------------------------------------------------------------------------------
Constantes
--------------------------------------------------------------------------------------*/
/*-------------------------------
Couleurs (palette 256 couleurs)
---------------------------------*/
#define Noir 0
#define Blanc 255
#define Bleu 3
#define Rouge 7*32
#define Vert 7*4
/*---------------------------------------
Commandes du controleur EPSON S1D15G10
----------------------------------------*/
#define DISON 0xaf
#define DISOFF 0xae
#define DISNOR 0xa6
#define DISINV 0xa7
#define COMSCN 0xbb
#define DISCTL 0xca
#define SLPIN 0x95
#define SLPOUT 0x94
#define PASET 0x75
#define CASET 0x15
#define DATCTL 0xbc
#define INV_Y 0x01
#define INV_X 0x02
#define WR_DIR 0x04
#define RGBSET8 0xce
#define RAMWR 0x5c
#define RAMRD 0x5d
#define PTLIN 0xa8
#define PTLOUT 0xa9
#define RMWIN 0xe0
#define RMWOUT 0xee
#define ASCSET 0xaa
#define SCSTART 0xab
#define OSCON 0xd1
#define OSC_OFF 0xd2
#define PWRCTR 0x20
#define VOLCTR 0x81
#define VOLUP 0xd6
#define VOLDOWN 0xd7
#define TMPGRD 0x82
#define EPCTIN 0xcd
#define EPCOUT 0xcc
#define EPMWR 0xfc
#define EPMRD 0xfd
#define EPSRRD1 0x7c
#define EPSRRD2 0x7d
#define NOP 0x25
/*---------------------------------------
Commandes du controleur Philips PCF8833
---------------------------------------*/
#define NO_OPERATION 0x00
#define SOFT_RESET 0x01
#define BOOSTER_OFF 0x02
#define BOOSTER_ON 0x03
#define DISPLAY_INFO 0x04 // read 25bits where MSB are dummy trash
#define DISPLAY_STATUS 0x09 // read 33bits where MSB are dummy trash
#define SLEEP_IN 0x10
#define SLEEP_OUT 0x11
#define PARTIAL_MODE_ON 0x12
#define NORMAL_MODE_ON 0x13
#define INVERSION_OFF 0x20
#define INVERSION_ON 0x21
#define PIXELS_OFF 0x22
#define PIXELS_ON 0x23
#define SET_CONTRAST 0x25
#define DISPLAY_OFF 0x28
#define DISPLAY_ON 0x29
#define SET_X_ADDR 0x2A // ATENTION! when X,Y address are changed BOTH must be changed
// START_X 0xXX
// STOP_X 0xXX
#define SET_Y_ADDR 0x2B
// START_Y 0xXX
// STOP_Y 0xXX
#define MEM_WRITE 0x2C
// x times pixel data 0xXX
#define COLOR_SET 0x2D
// 8 times red palette 0xXX
// 8 times green palette 0xXX
// 4 times blue palette 0xXX
#define PARTIAL_AREA 0x30
// START_Y 0xXX
// STOP_Y 0xXX
#define SCROLL_DEFINITON 0x33 // always vertical
// TOP_FIXED_LINES 0xXX
// SCROLL_LINES 0xXX
// BOTTOM_FIXED_LINES 0xXX
#define SET_SCROLL 0x37 // SEP scroll entry point
// ROW_Y 0xxx
#define MEM_CONTROL 0x36
#define MEM_RGB 0x08 // "0": ordre RGB, "1": BGR
#define MEM_LAO 0x10 // "0":haut vers bas, "1":bas vers haut
#define MEM_VW 0x20 // "0":閏riture ds le sens X
// "1":閏riture ds le sens Y
#define MEM_MX 0x40 // "0":normal, "1":miroir en X
#define MEM_MY 0x80 // "0":normal, "1":miroir en Y
#define IDLE_OFF 0x38
#define IDLE_ON 0x39
#define COLOR_INTERFACE 0x3A
// pixelformat 0xXX
#define COLOR_8_BIT 0x02
#define COLOR_12_BIT 0x03
#define COLOR_16_BIT 0x05
#define SET_VOP 0xB0 // irrelevant for Nokia6100
// 2x 0xXX
#define BOTTOM_ROW_SWAP_OFF 0xB4
#define BOTTOM_ROW_SWAP_ON 0xB5
#define TOP_ROW_SWAP_OFF 0xB6
#define TOP_ROW_SWAP_ON 0xB7
#define SUPER_FRAME_INV_OFF 0xB8
#define SUPER_FRAME_INV_ON 0xB9
#define DATA_ORDER_MSB 0xBA
#define DATA_ORDER_LSB 0xBB
#define TEMP_READ 0xC8 // read
/*------------------
Constantes Timer A
--------------------*/
// Interruption Timer A, voie 0
#define Pulse_OUT1 100 //Dur閑 de l'impulsion de d閏lenchement de la CAN
#define Periode_IntTA0 588 //Soit une fr閝uence de 6800Hz avec horloge de 4MHZ
/*---------------
Constantes UART
-----------------*/
#define RXBufSize 32 // Taille du buffer de r閏eption (puissance de 2)
#define TXBufSize 32 // Taille du buffer de transmission (puissance de 2)
#define Buffer_vide 1 // 1: rien ?transmettre
/*------------------------------------------------------------------------------------
D閒inition de type
--------------------------------------------------------------------------------------*/
typedef enum
{
Epson = Type_Controler_Pin,
Philips = ~Type_Controler_Pin
} T_Type_Controler; // Type de transfert : commande ou donn閑s
/*------------------------------------------------------------------------------------
Variables globales
-------------------------------------------------------------------------------------*/
/*-------------
LCD
---------------*/
char Adr_X ; //Copie logicielle de l'adresse X du PCD8544 (0 ?83)
char Adr_Y ; //Copie logicielle de l'adresse Y du PCD8544 (0 ?5)
char WorkString[16]; //Chaine de caract鑢es pour sortie de message
// Param鑤res pour controleur Philips
char Texte_MEM_CONTROL; //Param鑤re de MEM_CONTROL pour le texte
char Image_MEM_CONTROL; //Param鑤re de MEM_CONTROL pour l'image
// Param鑤res pour controleur Epson
char Texte_DATCTL; //Param鑤re de DATCTL pour le texte
char Image_DATCTL; //Param鑤re de DATCTL pour l'image
// Param鑤res de texte
char Couleur_texte; //Code de couleur du texte
char Fond_texte; //Code de couleur du fond
char Sens_texte; //Sens d'閏riture du texte : 0:0? 1:90? 2:180?3:270?
/*------------------------------------------------------------------------------------
Constantes en m閙oire flash
-------------------------------------------------------------------------------------*/
/* ---------------------
Polices de caract鑢es
---------------------
------
8 x 11
------
Taille en octets : 0x02AC, 684
Largeur police : 8
Hauteur police : 11
Code du 1?caract鑢e: 0x20
Code du dernier car.: 0x7E
Bits par pixel : 1
*/
typedef struct
{
unsigned int Size;
unsigned char Width; //Pour espacement constant
unsigned char Heigth;
unsigned char Bits_per_Pixels;
// if MSB are set then font is a compressed font
unsigned char First_Char;
unsigned char Last_Char;
unsigned char Char_Widths[0x7E - 0x20 +1];// Largeurs de chaque caract鑢e
unsigned char Font_data[582];// Description des caract鑢es (suite de pixels sans trou)
} Tfont8x11;
const Tfont8x11 Font8x11 =
{ 0x02AC,
0x08,
0x0B,
0x01,
0x20,
0x7E,
{
0x03, 0x01, 0x04, 0x06, 0x05, 0x07, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x01, 0x04,
0x05, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x02, 0x04, 0x05, 0x04, 0x05,
0x07, 0x07, 0x05, 0x06, 0x06, 0x05, 0x05, 0x06, 0x06, 0x01, 0x04, 0x06, 0x05, 0x07, 0x06, 0x06,
0x06, 0x06, 0x06, 0x05, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x04, 0x02, 0x05, 0x06,
0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x05, 0x05, 0x01, 0x01, 0x05, 0x01, 0x07, 0x05, 0x05,
0x05, 0x05, 0x02, 0x04, 0x02, 0x05, 0x05, 0x07, 0x04, 0x05, 0x04, 0x03, 0x01, 0x03, 0x06
},
{
0x00, 0x00, 0x00, 0x00, 0xFE, 0x72, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x44, 0xF8, 0x0F, 0x11, 0x88,
0xF0, 0x1F, 0x22, 0x30, 0x42, 0x22, 0xFF, 0x13, 0x09, 0x31, 0x04, 0x51, 0x84, 0x12, 0x48, 0x02,
0x29, 0x44, 0x11, 0x84, 0x39, 0x32, 0x62, 0x12, 0x60, 0x80, 0xE4, 0x00, 0xFE, 0x09, 0x50, 0x80,
0xFC, 0xA3, 0x00, 0x02, 0x28, 0x00, 0x04, 0x20, 0xC0, 0x07, 0x08, 0x40, 0x00, 0x20, 0x80, 0x80,
0x00, 0x04, 0x00, 0x01, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x7F, 0x04, 0x24, 0x20, 0x01, 0xF1, 0x87,
0x00, 0x04, 0xF0, 0x1F, 0xC1, 0x04, 0x25, 0x24, 0x11, 0x71, 0x88, 0x20, 0x02, 0x12, 0x91, 0x88,
0xB8, 0x03, 0x0C, 0x58, 0x30, 0xC2, 0x7F, 0x80, 0xF0, 0x89, 0x84, 0x24, 0x24, 0x21, 0xF1, 0xF0,
0x47, 0x44, 0x22, 0x12, 0x11, 0x71, 0x04, 0x20, 0x38, 0x31, 0x68, 0xC0, 0x00, 0xDC, 0x11, 0x91,
0x88, 0x44, 0xC4, 0x1D, 0x8E, 0x88, 0x48, 0x44, 0x22, 0xE2, 0x0F, 0x84, 0x00, 0x08, 0x21, 0x20,
0x80, 0x02, 0x22, 0x08, 0x02, 0x05, 0x28, 0x40, 0x01, 0x0A, 0x50, 0x20, 0x08, 0x22, 0xA0, 0x00,
0x02, 0x01, 0x04, 0x20, 0x2C, 0x11, 0x70, 0x00, 0x3C, 0x10, 0x42, 0x26, 0x4A, 0xD1, 0x09, 0x51,
0x70, 0x00, 0x0C, 0x1C, 0x98, 0x30, 0x04, 0x26, 0xC0, 0x01, 0x30, 0xFF, 0x89, 0x48, 0x44, 0x22,
0xE2, 0x0E, 0x7F, 0x04, 0x24, 0x20, 0x01, 0x09, 0x88, 0x20, 0xFE, 0x13, 0x90, 0x80, 0x04, 0x44,
0x10, 0x7C, 0xF8, 0x4F, 0x44, 0x22, 0x12, 0x91, 0x80, 0xFC, 0x27, 0x02, 0x11, 0x88, 0x40, 0x00,
0xFC, 0x11, 0x90, 0x80, 0x44, 0x24, 0x12, 0xF2, 0xF9, 0x0F, 0x04, 0x20, 0x00, 0x01, 0x08, 0xFC,
0xE7, 0x3F, 0xC0, 0x00, 0x08, 0x40, 0xFE, 0xF1, 0x1F, 0x0C, 0x90, 0x40, 0x08, 0x81, 0x00, 0xC8,
0x7F, 0x00, 0x02, 0x10, 0x80, 0x00, 0xE4, 0x3F, 0x0C, 0x80, 0x01, 0x30, 0x60, 0xC0, 0x80, 0xFF,
0xFC, 0xC7, 0x00, 0x18, 0x00, 0x01, 0x30, 0xFE, 0xE3, 0x8F, 0x80, 0x04, 0x24, 0x20, 0x01, 0xF1,
0xC7, 0x7F, 0x22, 0x10, 0x81, 0x08, 0x44, 0xC0, 0x01, 0xFE, 0x08, 0x48, 0x40, 0x82, 0x12, 0x18,
0x7F, 0xFD, 0x27, 0x02, 0x11, 0x88, 0x40, 0x04, 0xDC, 0xE3, 0x88, 0x88, 0x44, 0x24, 0x22, 0xE2,
0x08, 0x40, 0x00, 0xFE, 0x13, 0x80, 0x00, 0xFC, 0x03, 0x20, 0x00, 0x01, 0x08, 0x40, 0xFE, 0x31,
0x00, 0x0E, 0x80, 0x01, 0x30, 0x60, 0xE0, 0xC0, 0x00, 0xFE, 0x00, 0x18, 0x30, 0x70, 0x00, 0x0C,
0x80, 0xF9, 0xC3, 0x60, 0x88, 0x80, 0x02, 0x08, 0xA0, 0x80, 0x08, 0x83, 0x19, 0x00, 0x01, 0x10,
0x00, 0x1F, 0x04, 0x10, 0x60, 0x00, 0x81, 0x09, 0x4A, 0x48, 0x22, 0x92, 0x90, 0x82, 0x0C, 0xE4,
0x7F, 0x01, 0x32, 0x00, 0x06, 0xC0, 0x00, 0x98, 0x00, 0xFD, 0x8F, 0x00, 0x02, 0x08, 0x80, 0x00,
0x08, 0x00, 0x20, 0x00, 0x01, 0x08, 0x40, 0x00, 0x02, 0x50, 0x00, 0x04, 0x00, 0x0C, 0x94, 0xA0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -