📄 main.c
字号:
LcdSend_Cmd(MEM_CONTROL); LcdSend_Data(Texte_MEM_CONTROL);
}
}
/*---------------------------------------------------------------
Nom : Texte_270_degre
Description : Parametrage du LCD pour un dessin de texte ?270? Arguments : aucun
Valeur renvoy閑 : aucune.
-----------------------------------------------------------------*/
void Texte_270_degre(void)
{
Sens_texte=3;
Texte_MEM_CONTROL=MEM_MX|MEM_MY|MEM_RGB; // Sens Y invers? Texte_DATCTL=INV_Y; //Sens Y invers?
if ((P3IN & Type_Controler_Pin)==Epson)
{ //Controleur Epson
LcdSend_Cmd(DATCTL);
LcdSend_Data(Texte_DATCTL);//Attributs pour texte
LcdSend_Data(0); //Arrangements segments = RGB
LcdSend_Data(1); //Echelle de 8 niveaux par couleur
}
else //Controleur Philips
{
LcdSend_Cmd(MEM_CONTROL); LcdSend_Data(Texte_MEM_CONTROL);
}
}
/*---------------------------------------------------------------
Nom : Exemples de textes
Description : Rempli l'閏ran avec des exemples de textes
Arguments : aucun
Valeur renvoy閑 : aucune.
-----------------------------------------------------------------*/
void Exemples_de_textes(void)
{
Texte_0_degre();
/* Couleur_texte=7*32+7*4+3; Fond_texte=0*32+0*4+0;
LcdBigStr(5,15,"Dessin de texte");
Couleur_texte=0*32+0*4+3; Fond_texte=7*32+7*4+0;
LcdBigStr(5,35,"sur le LCD 7210");
Couleur_texte=7*32+7*4+0; Fond_texte=5*32+0*4+0;
LcdBigStr(25,55,"Police 16x13");*/
Couleur_texte=0*32+0*4+0; Fond_texte=0*32+0*4+3;
LcdLittleStr(15,75,"Avec une police 11x8");
Couleur_texte=7*32+7*4+0; Fond_texte=0*32+3*4+0;
LcdLittleStr(20,90,"CREMMEL Marcel");
Couleur_texte=0*32+0*4+3; Fond_texte=7*32+7*4+3;
LcdLittleStr(20,101,"le 20 mars 2005");
Texte_0_degre();
Couleur_texte=7*32+7*4+0; Fond_texte=0*32+3*4+0;
LcdLittleStr(2,2,"Texte 0 degre");
Texte_90_degre();
LcdLittleStr(2,2,"Texte 90 degre");
Texte_180_degre();
LcdLittleStr(2,2,"Texte 180 degre");
Texte_270_degre();
LcdLittleStr(2,2,"Texte 270 degre");
}
/*---------------------------------------------------------------
Nom : Init_Epson_Controler
Description : Initialisations des registres du controleur
Arguments : Aucun
Valeur renvoy閑 : Aucune.
-----------------------------------------------------------------*/
void Init_Epson_Controler(void)
{
P3OUT |= Lcd_CE_Pin ; // Controleur non s閘ectionn?(CE = "1")
P3OUT |= Lcd_RST_Pin; // et pas de reset (RST = "1")
Delay(30000); // D閘ai de 0,5s environ
P3OUT &= ~Lcd_RST_Pin; //Reset PCD8544 (RST = "0")
Delay(30000); // D閘ai de 0,5s environ
P3OUT |= Lcd_RST_Pin; //Arr阾 reset PCD8544 (RST = "1")
Adr_X=0; Adr_Y=0;
// S閘ection du controleur (actif ?"0").
P3OUT &= ~Lcd_CE_Pin;//CE = "0"
LcdSend_Cmd(DISCTL);//Display control
LcdSend_Data(0); //CL divis?par 2. F1/F2: commutation 8H
LcdSend_Data(32); //(32+1)*4=132 lignes
LcdSend_Data(10); //Inversion de la surintensit?toutes les 10 lignes
LcdSend_Data(0); //Dispersion
LcdSend_Cmd(COMSCN); //
LcdSend_Data(1); //Balayage COM1(1)->COM68(68) et COM132(69)->COM68(132)
LcdSend_Cmd(OSCON); //Oscillateur interne ON
LcdSend_Cmd(SLPOUT); //Sleep out : broche /SLP="1"
LcdSend_Cmd(VOLCTR); //R間lage 閘ectronique du contraste
LcdSend_Data(25); //Alpha = 25
LcdSend_Data(3); //1+Rb/Ra=3,6585
LcdSend_Cmd(PWRCTR); //Power control
LcdSend_Data(0x0F);//Tous ON, pas de r閟istances externes
Delay(10000); //Attendre que les 4 sources se stabilisent
LcdSend_Cmd(DISINV); //Affichage en mode "inverse"
LcdSend_Cmd(RGBSET8);//Affectation palette de couleurs
//Les 8 niveaux de rouge cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(2);LcdSend_Data(4);LcdSend_Data(6);
LcdSend_Data(8);LcdSend_Data(10);LcdSend_Data(12);LcdSend_Data(15);
//Les 8 niveaux de vert cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(2);LcdSend_Data(4);LcdSend_Data(6);
LcdSend_Data(8);LcdSend_Data(10);LcdSend_Data(12);LcdSend_Data(15);
//Les 4 niveaux de bleu cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(4);LcdSend_Data(9);LcdSend_Data(15);
LcdSend_Cmd(NOP); //Terminateur de la cmd pr閏閐ente
LcdSend_Cmd(PASET); //Page start/end RAM
LcdSend_Data(2); //Pourquoi Start = 2 ?
LcdSend_Data(131); //End = 131
LcdSend_Cmd(CASET); //Column start/end RAM
LcdSend_Data(0); //Start = 0
LcdSend_Data(131); //End = 131
LcdSend_Cmd(DISON); //Display ON
// Param鑤res pour cmd DATCTL Epson
Texte_DATCTL=WR_DIR;//Sens du texte X normal
Image_DATCTL=INV_X; //Miroir X
LcdSend_Cmd(DATCTL);
LcdSend_Data(Texte_DATCTL);//Param鑤res pour le texte
LcdSend_Data(0); //Arrangements segments = RGB
LcdSend_Data(1); //Echelle de 8 niveaux par couleur
}
/*---------------------------------------------------------------
Nom : Init_Epson_Controler
Description : Initialisations des registres du controleur Epson
Arguments : Aucun
Valeur renvoy閑 : Aucune.
-----------------------------------------------------------------*/
void Init_Philips_Controler(void)
{
P3OUT |= Lcd_CE_Pin ; // Controleur non s閘ectionn?(CE = "1")
P3OUT |= Lcd_RST_Pin; // et pas de reset (RST = "1")
Delay(30000); // D閘ai de 0,5s environ
P3OUT &= ~Lcd_RST_Pin; //Reset controleur (RST = "0")
Delay(30000); // D閘ai de 0,5s environ
P3OUT |= Lcd_RST_Pin; //Arr阾 reset (RST = "1")
// S閘ection du controleur (actif ?"0").
P3OUT &= ~Lcd_CE_Pin;//CE = "0"
LcdSend_Cmd(SOFT_RESET);
LcdSend_Cmd(SLEEP_OUT);
LcdSend_Cmd(BOOSTER_ON);
Delay(100);
LcdSend_Cmd(DISPLAY_ON);
LcdSend_Cmd(COLOR_INTERFACE);
LcdSend_Data(COLOR_8_BIT);
LcdSend_Cmd(COLOR_SET);
//Les 8 niveaux de rouge cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(2);LcdSend_Data(4);LcdSend_Data(6);
LcdSend_Data(9);LcdSend_Data(11);LcdSend_Data(13);LcdSend_Data(15);
//Les 8 niveaux de vert cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(2);LcdSend_Data(4);LcdSend_Data(6);
LcdSend_Data(9);LcdSend_Data(11);LcdSend_Data(13);LcdSend_Data(15);
//Les 4 niveaux de bleu cod閟 sur 4 bits
LcdSend_Data(0);LcdSend_Data(4);LcdSend_Data(11);LcdSend_Data(15);
// Param鑤res pour cmd MEM_CONTROL Philips
Texte_MEM_CONTROL=MEM_VW|MEM_RGB|MEM_MX;//Sens X normal
Image_MEM_CONTROL=MEM_RGB|MEM_MX;
// MEM_RGB "0": ordre RGB, "1": BGR
// MEM_LAO "0":haut vers bas, "1":bas vers haut
// MEM_VW "0":閏riture ds le sens X "1":閏riture ds le sens Y
// MEM_MX "0":normal, "1":miroir en X
// MEM_MY "0":normal, "1":miroir en Y
LcdSend_Cmd(MEM_CONTROL);
LcdSend_Data(Texte_MEM_CONTROL);
}
/*---------------------------------------------------------------
Nom : Fill_Lcd
Description : Remplir le LCD de la m阭e couleur
Arguments : Coul_Lcd : Noir ou Blanc
Valeur renvoy閑 : aucune.
-----------------------------------------------------------------*/
void Fill_Lcd(char Couleur)
{
int i;
if ((P3IN & Type_Controler_Pin)==Epson)
{ //Controleur Epson
LcdSend_Cmd(PASET); //Page start/end RAM
LcdSend_Data(0); //Start
LcdSend_Data(131); //End
LcdSend_Cmd(CASET); //Column start/end RAM
LcdSend_Data(0); //Start = 0
LcdSend_Data(131); //End = 131
LcdSend_Cmd(RAMWR);
}
else //Controleur Philips
{
LcdSend_Cmd(SET_X_ADDR);
LcdSend_Data(0); //Start X address = 0
LcdSend_Data(131); //End X address = 131
LcdSend_Cmd(SET_Y_ADDR);
LcdSend_Data(0); //Start Y address = 0
LcdSend_Data(131); //End Y address = 131
LcdSend_Cmd(MEM_WRITE);
}
for (i=0; i<132*132; i++) LcdSend_Data(Couleur);
}
/*---------------------------------------------------------------
Nom : LcdInit
Description : Initialisation du PCD8544
Arguments : aucun
Valeur renvoy閑 : aucune.
-----------------------------------------------------------------*/
void LcdInit(void)
{
if ((P3IN & Type_Controler_Pin)==Epson) Init_Epson_Controler();
else Init_Philips_Controler();
}
/*---------------------------------------------------------------
Nom : Conv_Bin_BCD
Description : Conversion binaire -> BCD sur 2 digits maxi
Arguments : x : nombre binaire
Valeur renvoy閑 : mot de 16 bits : digit MSB ds octet MSB
digit LSB ds octet LSB
-----------------------------------------------------------------*/
unsigned int Conv_Bin_BCD(char x)
{
char BCD_h;
char BCD_l;
BCD_h=x/10;
BCD_l=x-10*BCD_h;
return (BCD_h*256+BCD_l);
}
/*---------------------------------------------------------------
Nom : Conv_10bits_Ascii
Description : Conversion 10 bits binaire -> ASCII
Arguments : x : nombre binaire (0 ?1023)
Valeur renvoy閑 : cha頽e de caract鑢es affect閑
-----------------------------------------------------------------*/
void Conv_10bits_Ascii(int x,char *s)
{
char BCD_3;
char BCD_2;
char BCD_1;
char BCD_0;
BCD_3=x/1000;
BCD_2=(x-1000*BCD_3)/100;
BCD_1=(x-1000*BCD_3-100*BCD_2)/10;
BCD_0= x-1000*BCD_3-100*BCD_2-10*BCD_1;
s[0]=BCD_3+'0';s[1]=BCD_2+'0';s[2]=BCD_1+'0';s[3]=BCD_0+'0';s[4]=0;
}
/*------------------------------------------------------------------------------------
Programme principal
--------------------------------------------------------------------------------------*/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Arr阾 du chien de garde
P3DIR=Lcd_CE_Pin|Lcd_DIN_Pin|Lcd_RST_Pin|Lcd_CLK_Pin;
SetDCOClock(7,7);
InitSPI_Lcd();//Initialisation du coupleur SPI pour Lcd
LcdInit();
Fill_Lcd(Bleu);
Exemples_de_textes();
for (;;)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -