pas tout à fait
ils m'auraient répondu à coté de la question ?
ci-dessous le copié collé de ce code. j'ai traduis le chinois avec google translate, et j'ai mis aussi en anglais car certaines fois la traduction française me semblait étrange
ta réponse me laisse penser que c'est peut-être simplement inutilisable (?)
//*************************************************************************************
//-----------------------------通用字符型LCM测试程序-----------------------------------
//-----------------Procédures d'essai LCD de caractère universel----------------------
//------------------Universal character LCD testing procedures-----------------------
//
// google translate from chinese, vers français , to english
//*************************************************************************************
//MCU: AT89C52
//LCD Drive: SPLC708D/S6A0069/KS0066U
//实用范围: Champ d'application: Scope:
//
//-------------------------------------------------------------------------------------
//创建时间: Créé: Created: 2005.11.14
//创建者: Créateur: creator: FDZ81
//--------------------------------------------------------------------------------------
#include <reg51.h>
//--------------------------------------------------------------------------------------
//LCM I/O定义: Définition i/o: I / O definition:
sbit RS = P3^5; //;DEFINE LCM WDATA/INSTRUCTION PIN
sbit RW = P3^6; //;DEFINE LCM READ/WRITE PIN
sbit E = P3^7; //;DEFINE LCM CHIP ENABLE PIN
#define KEY P2 //按键 bouton button
#define LCM_DATA P1 //;DEFINE LCM WDATA BUS PIN
#define DATA_TYPE_4BIT 0 //数据方式为4bit读写方式 Mode de données de 4 bits à lire et à écrire 4 bit data mode to read and write
#define DATA_TYPE_8BIT 1 //数据方式为8bit读写方式 Mode de données 8bit à lire et à écrire 8bit data mode to read and write
bit biDataType; //数据方式标志 Mode données drapeau Data mode flag
#define DEALY 2
//--------------------------------------------------------------------------------------
//延时程序 procédure de retard Delay procedure , cystal frequency = 12MHz
void Delay10Ms(unsigned char d)
{
unsigned int t;
while(d--)
{
t = 5000;
while(t--);
}
}
//======================================================================================
//忙查询并等待空闲 Occupé requête et attendre ralenti Busy query and wait for idle
void LCMBusyCheck(void)
{
LCM_DATA =0xff;
while (1)
{
RS = 0;
RW = 1;
E = 1;
if ((LCM_DATA & 0x80) == 0x00) break;
E = 0;
}
}
//======================================================================================
//写入指令 Ecrire instruction Write instruction
void LCMWriteCommand(unsigned char d)
{
char t = DEALY;
t = 10;
while(--t);
// LCMBusyCheck();
RS = 0; //选择指令寄存器 Sélectionnez le registre d'instruction Select the instruction register
RW = 0;
LCM_DATA = d;
while(--t);
E = 1; //写入 écrire Write
E = 0;
if (biDataType == DATA_TYPE_4BIT) //4位数据方式 Mode de données 4 Data mode 4
{
RS = 0; //选择指令寄存器 Sélectionnez le registre d'instruction Select the instruction register
RW = 0;
LCM_DATA = (d << 4);
t = DEALY;
while(t--);
E = 1; //写入 écrire Write
E = 0;
}
}
//======================================================================================
//写入数据 Ecrire des données Write data
void LCMWriteData(unsigned char d)
{
char t = DEALY;
t = 10;
while(--t);
// LCMBusyCheck();
RS = 1; //选择数据寄存器 Sélectionnez le registre de données Select the data register
RW = 0;
LCM_DATA = d;
while(t--);
E = 1; //写入 écrire Write
E = 0;
if (biDataType == DATA_TYPE_4BIT) //4位数据方式 Mode de données 4 Data mode 4
{
RS = 1; //选择数据寄存器 Sélectionnez le registre de données Select the data register
RW = 0;
LCM_DATA = (d << 4);
t = DEALY;
while(t--);
E = 1; //写入 écrire Write
E = 0;
}
}
//=======================================================================================
//上电时,不查询busy信号的写入指令方式 La mise sous tension, ne pas interroger le mode signal occupé de commande d'écriture On power-up, does not query the write command mode busy signal
void LCMWriteInitCommand(unsigned char d)
{
char t = DEALY;
RS = 0; //选择指令寄存器 Sélectionnez le registre d'instruction Select the instruction register
RW = 0;
LCM_DATA = d;
while(t--);
E = 1; //写入 écrire Write
E = 0;
if (biDataType == DATA_TYPE_4BIT) //4位数据方式 Mode de données 4 Data mode 4
{
RS = 0; //选择指令寄存器 Sélectionnez le registre d'instruction Select the instruction register
RW = 0;
LCM_DATA = d << 4;
t = DEALY;
while(t--);
E = 1; //写入 écrire Write
E = 0;
}
}
//======================================================================================
//LCM初始化 Initialisation
void LCMInit(void)
{
/*
Delay10Ms(3); //等待 attendez wait 30ms
LCMWriteInitCommand(0x30); //不查询busy写入指令 Pas une requête de commande d'écriture occupée Not Query busy writing command
Delay10Ms(3); //等待30ms Attendre 30ms wait 30 ms
LCMWriteCommand(0x30); //8bit数据方式 Mode de données 8bit 8bit data mode
Delay10Ms(3); //等待30ms Attendre 30ms wait
LCMWriteCommand(0x38); //8bit数据方式,2行显示 Mode de données 8bit, affichage 2 lignes 8bit data mode, 2-line display
Delay10Ms(3); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x0c); //display on,cursor off,blinks off
Delay10Ms(3); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x06); //cursor shift = increment
Delay10Ms(3); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x01); //clear display
Delay10Ms(3); //等待30ms Attendre wait 30ms
*/
LCMWriteCommand(0x01); //clear display
Delay10Ms(1); //等待10ms,等待清零结束,否则如果立即写入显示数据,会造成第一行前面的字没显示 Attendez 10ms, attendez que la commande pour terminer, ou si les données d'affichage est écrit immédiatement, se traduira par la première rangée en face du mot n'a pas montré Wait 10ms, wait for the command to complete, or if the display data is written immediately, will result in the first row in front of the word did not show
if(!biDataType)
{
//4bit数据方式 Le mode de données 4bit 4bit data mode
LCMWriteInitCommand(0x20); //不查询busy写入指令 Pas une requête de commande d'écriture occupée Not Query busy writing command
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteInitCommand(0x20); //不查询busy写入指令 Pas une requête de commande d'écriture occupée Not Query busy writing command
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x20);
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x28); //4bit数据方式,2行显示 Mode de données 4bit, affichage 2 lignes 4bit data mode, 2-line display
}
else
{
//8bit数据方式 Mode de données 8bit 8bit data mode
LCMWriteInitCommand(0x30); //不查询busy写入指令 Pas une requête de commande d'écriture occupée Not Query busy writing command
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteInitCommand(0x30); //不查询busy写入指令 Pas une requête de commande d'écriture occupée Not Query busy writing command
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x30);
Delay10Ms(1); //等待30ms Attendre wait 30ms
LCMWriteCommand(0x38); //8bit数据方式,2行显示 Mode de données 8bit, affichage 2 lignes 8bit data mode, 2-line display
}
LCMWriteCommand(0x0c); //display on,cursor off,blinks off
LCMWriteCommand(0x06); //cursor shift = increment
}
//======================================================================================
void LCMWriteExtendASIC(void)
{
unsigned char i;
for(i = 0xc0;i != 0;i++)
{
LCMWriteData(i);
}
}
//======================================================================================
//2个自定义字符的点阵数据写入CGRAM中 2 personnalisé caractères des données matricielles est écrit dans le CGRAM 2 custom-character dot-matrix data is written to the CGRAM
void LCMWriteMyChar(void)
{
unsigned char code disp1[8] = {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};
unsigned char code disp2[8] = {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};
unsigned char code disp3[8] = {0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x1f};
unsigned char i;
LCMWriteCommand(0x40); //Set 第一个 première First CGRAM address
for(i = 0;i <8;i++)
{
LCMWriteData(disp1
); //写入自定义的点阵数据 Ecrire des données treillis personnalisé Write custom lattice data
}
LCMWriteCommand(0x48); //Set 第二个 deuxième second CGRAM address
for(i = 0;i <8;i++)
{
LCMWriteData(disp2); //写入自定义的点阵数据 Ecrire des données treillis personnalisé Write custom lattice data
}
LCMWriteCommand(0x50); //Set 第二个 deuxième second CGRAM address ?? devrait-elle etre "troisième" ? should it be "third" ?
for(i = 0;i <8;i++)
{
LCMWriteData(disp3); //写入自定义的点阵数据 Ecrire des données treillis personnalisé Write custom lattice data
}
//自定义符显示 Affichage de l'icône personnalisée Custom icon display
// LCMWriteCommand(0x80); //Set DDRAM address
// LCMWriteData(0); //第一个自定义字符在显存 Le premier caractère dans une mémoire personnalisée The first character in a custom memory DDRAM address = 0 中 dans in
// LCMWriteData(1); //第二个自定义字符在显存 Les seconds caractères personnalisés dans la mémoire The second custom characters in memory DDRAM address = 1 中 dans in
}
//======================================================================================
void main(void)
{
unsigned char i,j,d;
unsigned char ucDisplay[]=" Midas DIsplays ";
unsigned char ucDiffrenceChar[] = {0x61,0x71,0x81,0x91,0xa1,0xb1,0xc1,0xd1};
biDataType = DATA_TYPE_8BIT; //8位数据方式 Mode de données de 8 bits 8-bit data mode
// biDataType = DATA_TYPE_4BIT;
LCMInit();
LCMWriteMyChar(); //自定义字符点阵数据写入CGRAM Caractère personnalisé des données matricielles est écrit CGRAM Custom character dot-matrix data is written CGRAM
while(1)
{
//-----------------------------------------------
LCMWriteCommand(0x80); //点全显 Le tout était The whole point was
for(i=0;i<80;i++)
{
LCMWriteData(0);
}
Delay10Ms(11);
//-----------------------------------------------
LCMWriteCommand(0x01); //clear display
//
LCMWriteCommand(0x80); //写入8个特别选择的特征字符,作为区别不同字库 Écrit huit caractères caractéristique spécialement sélectionnés pour distinguer entre police différente Written eight specially selected characteristic character as to distinguish between different font
for(j=10;j!=0;j--)
{
for(i=0;i<8;i++)
{
LCMWriteData(ucDiffrenceChar);
}
}
Delay10Ms(11);
//-----------------------------------------------
LCMWriteCommand(0x80); //全显示“#” Affiche complet "#" Full displays "#"
for(i=0;i<80;i++)
{
LCMWriteData('#');
}
Delay10Ms(11);
//-----------------------------------------------
LCMWriteCommand(0x80); //全显示"$" Plein écran "$" Full Display "$"
for(i=0;i<80;i++)
{
LCMWriteData('$');
}
Delay10Ms(11);
//-----------------------------------------------
LCMWriteCommand(0x01); //clear display
//
LCMWriteCommand(0x80); //
LCMWriteExtendASIC(); //将扩展ASIC80个特征字符一次写入DDRAM Les étendues ASCII 80 caractères comportent l'écriture une fois DDRAM The extended ASCII 80 characters feature the write-once DDRAM
Delay10Ms(11);
}
}