Final Descarga Editado
Final Descarga Editado
//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;
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 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 = 0;
}
if(TimerReadKeypad>30){
TimerReadKeypad = 0;
ProcesarTeclado();
}
if(TimerRefrescarDisplays > 2) {
TimerRefrescarDisplays -= 2;
RefrescarDisplays();
}
if(TimerRefrescarLcd>100) {
TimerRefrescarLcd = 0;
if(Mode == 0) { //Visualizar Contador y Tiempo
VisualTimeLcd();
VisualLcdContador();
} else { //Visualizar Variables Análogas
VisualVariablesAnalogas();
}
}
}
}
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;
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++;
}
}
}