root/branch/leroy/sp4b2/SP4b2/SP4b2.c @ 517
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 | ||
}
|