Projet

Général

Profil

« Précédent | Suivant » 

Révision 517

Ajouté par jeleroy il y a presque 4 ans

Affichage touche du clavier sur l'afficheur fonctionnel

Voir les différences:

branch/leroy/sp4b2/SP4b2/SessionM32C_E8a_SYSTEM.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=fe0000
RESET=fe0004
branch/leroy/sp4b2/SP4b2/SP4b2.c
/***********************************************************************/
#include "sfr32c87.h"
/* definition des ports connect?s au micro-controlleur*/
#define port pd3
#define LCD_RS p3_0
#define LCD_RW p3_1
......
#define LCD_B6 p3_6
#define LCD_B7 p3_7
void LCD_init_port(void);
/*D?claration des fonction utilis?es*/
void tpo_us(unsigned short duree);
void tpo_ms(unsigned short duree);
void LCD_4b(unsigned char car);
......
void LCD_init(void);
void LCD_char(unsigned char car);
void LCD_str(unsigned char *str);
void init_keyboard(void);
void tpo_50ms(void);
void decode_touche(unsigned char code_touche,unsigned char* valeur_touche);
//D?claration des variables
unsigned char touche = 0;
unsigned char premier_code_touche = 0;
unsigned char deuxieme_code_touche = 0;
unsigned char code_touche = 0;
unsigned char valeur_touche;
void LCD_init_port(void){
port = 0xFF;
}
void tpo_us(unsigned short duree){
tcspr = 0x8A;
ta0mr = 0x82;
ta0 = duree;
ta0s = 1;
ta0os = 1;
ta0ic = 0x00;
tcspr = 0x8A; //Rapport de division fr?quence
ta0mr = 0x82; //Mode comptage une seule fois
ta0 = duree; //Valeur de la temporisation
ta0s = 1; //D?but comptage
ta0os = 1; //D?marrage comptage
ta0ic = 0x00; //D?sactivation des interruptions
while(ir_ta0ic != 1);
ta0s = 0;
ta0s = 0; //Fin comptage
}
void tpo_ms(unsigned short duree){
......
}
void LCD_4b(unsigned char car){
LCD_E = 1;
LCD_E = 1; //Pr?t ? envoyer une donn?e (sur front descendant
if (car & 128){
LCD_B7 = 1;
if (car & 128){ //Si le bits de poids fort vaut 1
LCD_B7 = 1; //Application d'un 1 sur la sortie
}else{
LCD_B7 = 0;
LCD_B7 = 0; //Sinon application d'un 0 sur la sortie
}
if (car & 64){
......
LCD_B4 = 0;
}
LCD_E = 0;
LCD_E = 0; //Donn?e envoy?e
}
void LCD_8b(unsigned char car){
LCD_4b(car);
LCD_4b(car<<4);
LCD_4b(car); //Envoi du bit de poids fort
LCD_4b(car<<4); //Envoi du bit de poids faible
}
void LCD_com(unsigned char car){
LCD_RS = 0;
LCD_RS = 0; //Envoi d'une commande
LCD_8b(car);
}
void LCD_init(void){
//Processus necesaire ? l'initialisation de l'afficheur
LCD_RS=0;
tpo_ms(15);
LCD_4b(0x30);
LCD_4b(0x30); //Afficheur en mode 8 bits
tpo_ms(5);
LCD_4b(0x30);
LCD_4b(0x30); //Afficheur en mode 8 bits
tpo_us(100);
LCD_4b(0x30);
LCD_4b(0x30); //Afficheur en mode 8 bits
tpo_us(100);
LCD_4b(0x20);
LCD_com(0x28);
LCD_com(0x06);
LCD_com(0x0E);
LCD_com(0x01);
LCD_com(0x0E); //Extinction de l'afficheur
LCD_com(0x01); //R?initialisation de l'afficheur
tpo_ms(5);
}
void LCD_char(unsigned char car){
LCD_RS = 1;
LCD_8b(car);
LCD_RS = 1; //Envoi d'une donn?e
LCD_8b(car); //Envoi d'un caract?re
}
void LCD_str(unsigned char *str){
void LCD_str(unsigned char *str){//Envoi d'une chaine de caract?re
int i = 0;
while(str[i] != '\0'){
LCD_char(str[i]);
while(str[i] != '\0'){ //Tant que l'on est pas ? la fin de la chaine de caract?re
LCD_char(str[i]);
i ++;
}
}
void init_keyboard(void){
pd10 = 0x0F; //Configuration des broches du clavier en entr?e/sortie
p10=0; //Mise des broches du port 1? ? 0
pu31 = 1; //Activation des r?sistance de tirage ? l'?tat haut
}
void tpo_50ms(void){
tcspr = 0x8A;
ta0mr = 0x82;
ta0 = 50000;
ta0s = 1;
ta0os = 1;
ta0ic = 0x00;
while(ir_ta0ic != 1);
ta0s = 0;
}
void decode_touche(unsigned char code_touche,unsigned char* valeur_touche){
switch(code_touche){
case (0xBE): //Code de la touche du clavier
*valeur_touche = 0x31;//code de la touche en hexadecimale
break;
case (0xDE):
*valeur_touche = 0x32;
break;
case (0x7E):
*valeur_touche = 0x33;
break;
case (0xBD):
*valeur_touche = 0x34;
break;
case (0xDD):
*valeur_touche = 0x35;
break;
case (0x7D):
*valeur_touche = 0x36;
break;
case (0xEB):
*valeur_touche = 0x37;
break;
case (0xDB):
*valeur_touche = 0x38;
break;
case (0x7B):
*valeur_touche = 0x39;
break;
case (0xE7):
*valeur_touche = 0x2A;
break;
case (0xD7):
*valeur_touche = 0x30;
break;
case (0x77):
*valeur_touche = 0x23;
break;
}
}
void main(void)
{
char car[] = {'B','o','n','j','o','u','r',' ',};
LCD_init_port();
LCD_init();
LCD_str(car);
{
char car[] = {'B','o','n','j','o','u','r',' '};
LCD_init_port(); //Initialisation des broches
LCD_init(); //Initialisation de l'afficheur
while (1){
init_keyboard();
pd10 = 0x0F; //Mode entr?e (colonnes) sortie (lignes)
p10=0; //Mise ? 0 des sorties
pu31 = 1; //Activation des r?sistance de tirage ? l'?tat haut (colonnes)
pu30 = 1;//Activation des r?sistance de tirage ? l'?tat haut (lignes)
touche = p10; //Lecture de la valeur sur les sorties
tpo_50ms(); //anti rebond
while(p10 == 0xF0);
premier_code_touche = touche & 0xF0; //Stockage du premier code de la touche
pd10 = 0xF0; ////Mode sortie (colonnes) entr?e (lignes)
p10 = 0;
pu31 = 1;
p10 = touche; //stockage du premier code la touche dans p10 pour l'appliquer sur les sorties du micro-controlleur
touche = p10;
deuxieme_code_touche = 0x0F & touche;//Stockage du deuxi?me code de la touche
code_touche = deuxieme_code_touche+premier_code_touche;//Stockage des deux code de la touche
while(p10 == 0x0F);
decode_touche(code_touche, &valeur_touche);
LCD_char(valeur_touche);// Affichage de la valeur de la touche
}
}

Formats disponibles : Unified diff