Projet

Général

Profil

491 jeleroy
/***********************************************************************/
/* */
/* FILE :SP4b2.c */
/* DATE :Tue, May 25, 2021 */
/* DESCRIPTION :main program file. */
/* CPU GROUP :87B */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.18). */
/* NOTE:THIS IS A TYPICAL EXAMPLE. */
/***********************************************************************/
499 jeleroy
#include "sfr32c87.h"
491 jeleroy
517 jeleroy
/* definition des ports connect?s au micro-controlleur*/
499 jeleroy
#define port pd3
#define LCD_RS p3_0
#define LCD_RW p3_1
#define LCD_E p3_2
#define LCD_B4 p3_4
#define LCD_B5 p3_5
#define LCD_B6 p3_6
#define LCD_B7 p3_7

517 jeleroy
499 jeleroy
void LCD_init_port(void);
517 jeleroy
/*D?claration des fonction utilis?es*/
499 jeleroy
void tpo_us(unsigned short duree);
void tpo_ms(unsigned short duree);
void LCD_4b(unsigned char car);
void LCD_8b(unsigned char car);
void LCD_com(unsigned char car);
void LCD_init(void);
void LCD_char(unsigned char car);
void LCD_str(unsigned char *str);
517 jeleroy
void init_keyboard(void);
void tpo_50ms(void);
void decode_touche(unsigned char code_touche,unsigned char* valeur_touche);
499 jeleroy
517 jeleroy
//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;

499 jeleroy
void LCD_init_port(void){
port = 0xFF;
}

void tpo_us(unsigned short duree){
517 jeleroy
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
499 jeleroy
while(ir_ta0ic != 1);
517 jeleroy
ta0s = 0; //Fin comptage
499 jeleroy
}

void tpo_ms(unsigned short duree){
tcspr = 0x8A;
ta0mr = 0x82;
ta0 = duree*1000;
ta0s = 1;
ta0os = 1;
ta0ic = 0x00;
while(ir_ta0ic != 1);
ta0s = 0;
}

void LCD_4b(unsigned char car){
517 jeleroy
LCD_E = 1; //Pr?t ? envoyer une donn?e (sur front descendant
499 jeleroy
517 jeleroy
if (car & 128){ //Si le bits de poids fort vaut 1
LCD_B7 = 1; //Application d'un 1 sur la sortie
499 jeleroy
}else{
517 jeleroy
LCD_B7 = 0; //Sinon application d'un 0 sur la sortie
499 jeleroy
}

if (car & 64){
LCD_B6 = 1;
}else{
LCD_B6 = 0;
}

if (car & 32){
LCD_B5 = 1;
}else{
LCD_B5 = 0;
}

if (car & 16){
LCD_B4 = 1;
}else{
LCD_B4 = 0;
}

517 jeleroy
LCD_E = 0; //Donn?e envoy?e
499 jeleroy
}

void LCD_8b(unsigned char car){
517 jeleroy
LCD_4b(car); //Envoi du bit de poids fort
LCD_4b(car<<4); //Envoi du bit de poids faible
499 jeleroy
}

void LCD_com(unsigned char car){
517 jeleroy
LCD_RS = 0; //Envoi d'une commande
499 jeleroy
LCD_8b(car);
}
void LCD_init(void){
517 jeleroy
//Processus necesaire ? l'initialisation de l'afficheur
499 jeleroy
LCD_RS=0;
tpo_ms(15);
517 jeleroy
LCD_4b(0x30); //Afficheur en mode 8 bits
499 jeleroy
tpo_ms(5);
517 jeleroy
LCD_4b(0x30); //Afficheur en mode 8 bits
499 jeleroy
tpo_us(100);
517 jeleroy
LCD_4b(0x30); //Afficheur en mode 8 bits
499 jeleroy
tpo_us(100);
LCD_4b(0x20);
LCD_com(0x28);
LCD_com(0x06);
517 jeleroy
LCD_com(0x0E); //Extinction de l'afficheur
LCD_com(0x01); //R?initialisation de l'afficheur
499 jeleroy
tpo_ms(5);
}

void LCD_char(unsigned char car){
517 jeleroy
LCD_RS = 1; //Envoi d'une donn?e
LCD_8b(car); //Envoi d'un caract?re
499 jeleroy
}
517 jeleroy
void LCD_str(unsigned char *str){//Envoi d'une chaine de caract?re
499 jeleroy
int i = 0;
517 jeleroy
while(str[i] != '\0'){ //Tant que l'on est pas ? la fin de la chaine de caract?re
LCD_char(str[i]);
499 jeleroy
i ++;
}
}

517 jeleroy
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;


}
}

491 jeleroy
void main(void)
517 jeleroy
{
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
491 jeleroy
}
517 jeleroy
}