100% found this document useful (1 vote)
34 views7 pages

Final Descarga Editado

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
34 views7 pages

Final Descarga Editado

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

//Lcd pinout settings

sbit LCD_RS at RC4_bit;


sbit LCD_EN at RC5_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_E4 at RC0_bit;

//Pin direction
sbit LCD_RS_diection at TRISC4_bit;
sbit LCD_EN_diection at TRISC5_bit;
sbit LCD_D7_diection at TRISC3_bit;
sbit LCD_D6_diection at TRISC2_bit;
sbit LCD_D5_diection at TRISC1_bit;
sbit LCD_E4_diection at TRISC0_bit;

#define PinUNI PORTE.B0


#define PinDEC PORTE.B1
#define PinCEN PORTE.B2
#define PortDISPLAY PORTD

#define PinSensorIN PORTA.B3


#define PinSensorOUT PORTA.B4
#define PinAdjUP PORTA.B5
#define PinAdjDOWN PORTA.B6
#define PinRESET PORTA.B7

#define pinMode PORTD.B7

unsigned char ContMs=0;


unsigned char FlagRC6=0, FlagSensorIN=0, FlagSensorOUT=0, FlagAdjUp=0,
FlagAdjDOWN=0, FlagRESET=0, FlagpinMode=0;
signed int Contador= 879;
unsigned int Sample, Volt0a5V,Volt0a50V, TempLM35;
unsigned int TimerSecond;
unsigned char Time[3]={0,0,0};
unsigned char UNI, DEC, CEN;
unsigned char TimerReadKeypad=0, TimerRefrescarDisplays=0, TimerSensors=0,
TimerRefrescarLcd=0, TimerVolt5V=0, TimerVolt50V=0, TimerTempLM35=0,
TimerReadButtons=0;
unsigned char Mode=0;

void ConfigTIMER0(void);
void ProcesarTeclado(void);
void Clock(void);
void VisualTimeLcd(void);
void ProcesarSensors(void);
void RefrescarDisplays(void);
void SepararContador(void);
void VisualLcdContador(void);
void VisualVariablesAnalogas(void);

void RunMyTimers(unsigned char ms) { // Ejemplo de uso: 'MyTimer +=ms'


TimerSecond += ms;
TimerRefrescarDisplays += ms;
TimerSensors += ms;
TimerReadKeypad += ms;
TimerRefrescarLcd += ms;
TimerVolt5V += ms;
TimerVolt50V += ms;
TimerTempLM35 += ms;
TimerReadButtons += ms;
}

void MyTimers(){
unsigned char auxMs= ContMs; INTCON.TMR0IE =0; auxMs = ContMs; ContMs =0;
INTCON.TMR0IE=1; if(auxMs) RunMyTimers(auxMs);
}

void main(){
ConfigTIMER0();
ANSEL = 0b00000111;
ANSELH = 0b00000000;
TRISC.B6 = 1;
TRISC.B7 = 0;
TRISD = 0b10000000;
TRISE = 0b11111000;
TRISA = 0b11111111;

Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
SepararContador();
VisualLcdContador();

while(1){
MyTimers();
if(TimerReadButtons>25){
if(PORTC.B6 == 0 && FlagRC6 == 0){
FlagRC6 = 1;
PORTC.B7 = !PORTC.B7;
}
if(PORTC.B6 == 1)
FlagRC6 = 0;

if(!pinMode && !FlagPinMode){


FlagPinMode = 1;
if(Mode == 1)
Mode = 0;
else
Mode = 1;
}

if(pinMode)
FlagPinMode = 0;
}

if(TimerReadKeypad>30){
TimerReadKeypad = 0;
ProcesarTeclado();
}

if(TimerSecond > 999){


TimerSecond -= 1000;
Clock();
}

if(TimerSensors > 30) {


TimerSensors = 0;
ProcesarSensors();
}

if(TimerRefrescarDisplays > 2) {
TimerRefrescarDisplays -= 2;
RefrescarDisplays();
}

if(TimerTempLM35 > 100) {


TimerTempLM35 = 0;
Sample = ADC_Read(0);
TempLM35 = 150 * (long)Sample / 1023;
}

if(TimerVolt5V > 50)


TimerVolt5V = 0;
Sample = ADC_Read(1);{
Volt0a5V = 500 * (long)Sample/1023; // Valor =
ValorMaxSalida*ValorMuestra/ValorMaximoADC 'Volt0a5V=357'
}

if(TimerVolt50V > 60)


TimerVolt50V = 0;
Sample = ADC_Read(2);{
Volt0a5V = 500 * (long)Sample/1023; // Valor =
ValorMaxSalida*ValorMuestra/ValorMaximoADC 'Volt0a5V=357'
}

if(TimerRefrescarLcd>100) {
TimerRefrescarLcd = 0;
if(Mode == 0) { //Visualizar Contador y Tiempo
VisualTimeLcd();
VisualLcdContador();
} else { //Visualizar Variables Análogas
VisualVariablesAnalogas();
}
}
}
}

// PARTE DEL PROFESOR

void VisualVariablesAnalogas(void) {
Lcd_Out(1,1,"V1:");
Lcd_Chr_Cp(Volt0a5V/100+0x30);
Lcd_Chr_Cp('.');
Lcd_Chr_Cp(Volt0a5V%100/10+0x30);
Lcd_Chr_Cp(Volt0a5V%100%10+0x30);
Lcd_Chr_Cp('V');
Lcd_Chr_Cp(' ');

Lcd_Out(2,1,"V2:");
Lcd_Chr_Cp(Volt0a50V/100+0x30);
Lcd_Chr_Cp(Volt0a50V%100/10+0x30);
Lcd_Chr_Cp('.');
Lcd_Chr_Cp(Volt0a50V%100%10+0x30);
Lcd_Chr_Cp('V');
Lcd_Chr_Cp(' ');

Lcd_Out(1,10,"T:");
Lcd_Chr_Cp(TempLM35/100+0x30);
Lcd_Chr_Cp(TempLM35%100/10+0x30);
Lcd_Chr_Cp(TempLM35%100%10+0x30);
Lcd_Chr_Cp('C');
}

void Clock(void) {
Time[0]++;
if(Time[0]>59){
Time[0]-=60;
Time[1]++;
if(Time[1]>59) {
Time[1]=0;
Time[2]++;
if(Time[2]>23)
Time[2]=0;
}
}
}

void VisualTimeLcd(void) {
Lcd_Out(1,1,"T:");
Lcd_Chr_Cp(Time[2]/10+0x30);
Lcd_Chr_Cp(Time[2]%10+0x30);
Lcd_Chr_Cp(':');
Lcd_Chr_Cp(Time[1]/10+0x30);
Lcd_Chr_Cp(Time[1]%10+0x30);
Lcd_Chr_Cp(':');
Lcd_Chr_Cp(Time[0]/10+0x30);
Lcd_Chr_Cp(Time[0]%10+0x30);
Lcd_Out_Cp(" ");
}

void ProcesarSensors(void) {
if(!PinSensorIN && !FlagSensorIN) {
FlagSensorIN = 1;
Contador++;
if(Contador>999)
Contador = 0;
SepararContador();
}
if(PinSensorIN)
FlagSensorIN = 0;

if(!PinAdjUP && !FlagAdjUP) {


FlagAdjUP = 1;
Contador++;
if(Contador>999)
Contador = 0;
SepararContador();
}
if(PinAdjUP)
FlagAdjUP = 0;

if(!PinSensorOUT && !FlagSensorOUT) {


FlagSensorOUT = 1;
Contador--;
if(Contador<0)
Contador = 999;
SepararContador();
}
if(PinSensorOUT)
FlagSensorOUT = 0;

if(!PinAdjDOWN && !FlagAdjDOWN) {


FlagAdjDOWN = 1;
Contador--;
if(Contador<0)
Contador = 999;
SepararContador();
}
if(PinAdjDOWN)
FlagAdjDOWN = 0;

if(!PinRESET && !FlagRESET) {


FlagRESET = 1;
Contador = 0;
SepararContador();
}
if(PinRESET)
FlagRESET = 0;
}

void RefrescarDisplays(void) {
const static unsigned char Display[16] =
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
static unsigned char pDisplay=0;
switch(pDisplay) {
case 0:
PinCEN = 0;
PortDISPLAY=Display[UNI];
PinUNI = 1;
break;
case 1:
PinUNI = 0;
PortDISPLAY=Display[DEC];
PinDEC = 1;
break;
case 2:
PinDEC = 0;
PortDISPLAY=Display[CEN];
PinCEN = 1;
break;
}
pDisplay++;
if(pDisplay>2)
pDisplay = 0;
}

void SepararContador(void) {
CEN = Contador / 100;
UNI = Contador % 100;
DEC = UNI / 10;
UNI = UNI % 10;
}
void VisualLcdContador(void) {
Lcd_Out(2,1,"Cont: ");
Lcd_Chr_Cp(CEN+0x30);
Lcd_Chr_Cp(DEC+0x30);
Lcd_Chr_Cp(UNI+0x30);
Lcd_Out_Cp(" ");
}

void ProcesarTeclado(void) {
unsigned char key; static unsigned char fk=0; OPTION_REG.B7=0; TRISB=0xF0;
PORTB=0; key=PORTB; if(key==0xF0) {fk=0; return;} if(fk) return; TRISB=0x0F;
PORTB=key; key=PORTB; fk=1;
switch(key) {
case 0b01110111: //1
PORTD.B7 = !PORTD.B7;
break;
case 0b10110111: //2
PORTD.B7 = 1;
break;
case 0b11010111: //3
PORTD.B7 = 0;
break;
case 0b01111011: //4
Contador++;
if(Contador>999)
Contador = 0;
SepararContador();
break;
case 0b11100111: //A
Contador--;
if(Contador<0)
Contador = 999;
SepararContador();
break;
case 0b01111110: //*
fk=0;
break;
case 0b01100110: //* y A
PORTD.B7 = !PORTD.B7;
break;
}
}

void ConfigTIMER0(void) {
OPTION_REG.T0CS = 0;
OPTION_REG.PSA = 0;
OPTION_REG.PS2 = 0;
OPTION_REG.PS1 = 0;
OPTION_REG.PS0 = 1;
INTCON.TMR0IF = 0;
INTCON.TMR0IE = 1;
INTCON.GIE = 1;
}

void interrupt() {
static unsigned int uS=0;
if(TMR0IF_bit && TMR0IE_bit) {
TMR0IF_bit = 0;
ContMs++;
uS += 24;
if(uS>999) {
uS -= 1000;
ContMs++;
}
}
}

You might also like