📄 timer_c.c
字号:
#include <p18f452.h>
#include <timers.h>
#include<delays.h>
#include<adc.h>
#include<pwm.h>
#include "P18F_LCD.h"
void timer_isr (void);
void button_isr(void);
unsigned char Set_BCD_ASCII(unsigned char);
void InitializePORT(void);
int testPA4(void);
void showtime(void);
void LCD_ItoA(unsigned int AD_Data);
void InitializeAD(void);
void showsetime2(void);
void doalarm (void);
void showsetime(void);
void InitializeAD2(void);
#pragma udata access My_Access_RAM
near unsigned int AD_Temp;
union
{
unsigned int AD_10bit; // contant is 10-bit A/D Result
unsigned char AD[2]; // AD[0] is A/D Low byte, AD[1] is A/D High Byte
} near AD_Result;
#pragma udata
static char hourl=3,hourh=2,minuterh=5,minuterl=8,secondh=3,secondl=2,state=0,sml=0,smh=0,shl=0,shh=0,week=1;
static int i=0,j=0;
unsigned char DS_Zero_FLG;
const int sk[]={0X80,0XB0,0XDA,0XF6,0XFF,0XF6,0XDA,0XB0,0X80,0X4F,0X25,0X9,0X0,0X9,0X25,0X4F};
const int ha[]={100,0,100,0,100,0,100,0,200,0,200,0,200,0,200,0,400,0,400,0,400,0,400,0,600,0,600,0,600,0,600,0};
int result=0;
#pragma code hign_vector=0x08
void low_interrupt (void)
{
_asm GOTO timer_isr _endasm
}
#pragma code
#pragma interruptlow timer_isr save=PROD
void timer_isr (void)
{
if(INTCONbits.TMR0IF==1)
{INTCONbits.TMR0IF = 0;
secondl++;
if((minuterl==sml)&&(minuterh==smh)&&(hourl==shl)&&(hourh==shh))
{doalarm();}
else ClosePWM1();
if(secondl==10){secondl=0;secondh++;}
if(secondh==6){secondh=0;minuterl++;}
if(minuterl==10){minuterl=0;minuterh++;}
if(minuterh==6){minuterh=0;hourl++;}
if(hourl==10){hourh++;hourl=0;}
if((hourh==2)&&(hourl==4)){secondl=0;secondh=0;minuterl=0;minuterh=0;hourl=0;hourh=0;week++;if(week==8) week=1; }
TMR0H=0XC2;
TMR0L=0XF8;
showtime();
}
if(INTCONbits.INT0IF==1)
{INTCONbits.INT0IF=0;
while(PORTAbits.RA4==1){
InitializeAD2();
Delay10TCYx(5);
ConvertADC();
while(BusyADC()){;}
result=ReadADC();
CloseADC();
if(((result/100)==5)&&(((result%100)/10)==8))
{ Delay10KTCYx(80);minuterl++;
if(minuterl==10) minuterl=0;showsetime2();}
if(((result/100)==3)&&(((result%100)/10)==3))
{Delay10KTCYx(80);
minuterh++;
if(minuterh==6) minuterh=0;showsetime2();}
if(((result/100)==4)&&(((result%100)/10)==0))
{Delay10KTCYx(80);
hourl++;
if((hourl==10)||((hourl>=4)&&(hourh>=2))) hourl=0;showsetime2();
}
if(((result/100)==5)&&(((result%100)/10)==0))
{Delay10KTCYx(80);
hourh++;
if((hourh==3)||((hourl>=4)&&(hourh>=2))) hourh=0;showsetime2();
}
if(((result/100)==3)&&(((result%100)/10)==8))
{Delay10KTCYx(80);
week++;
if(week==8) week=0; showsetime2();
}
if(((result/100)==4)&&(((result%100)/10)==8))
{Delay10KTCYx(80);sml++;
if(sml==10) sml=0;showsetime();}
if((result/100)==6)
{Delay10KTCYx(80);
smh++;
if(smh==6) smh=0;showsetime();}
if(((result/100)==3)&&(((result%100)/10)==6))
{Delay10KTCYx(80);shl++;
if((shl==10)||((shl>=4)&&(shh>=2))) shl=0;showsetime();
}
if(((result/100)==4)&&(((result%100)/10)==5))
{Delay10KTCYx(80);
shh++;
if((shh==3)||((shl>=4)&&(shh>=2))) shh=0;showsetime();}
}
}
}
void main (void)
/* 35 */ { InitializePORT( );
InitializeAD( );
OpenTimer0(TIMER_INT_ON&T0_16BIT&T0_SOURCE_INT&T0_PS_1_256);
OpenTimer2(T2_PS_1_4&T2_POST_1_16);
/* 40 */ INTCONbits.GIE = 1;
TMR0H=0XC2;
TMR0L=0XF8;
OpenLCD( );
LCD_Set_Cursor(1,1);
/* 41 */
/* 42 */ while (1)
/* 43 */ { InitializeAD( );
ADCON0bits.GO=1; // Start to convert the A/D
while(ADCON0bits.GO);
Delay10KTCYx(255) ; // Waiting A/D until done
AD_Temp=ReadADC();
AD_Temp=AD_Temp/10;
//if (AD_Temp>20){for(i=1;i<=1000;i++)
// {LCD_Set_Cursor(1,6);
// putsLCD('WARNING');
// } }
// Get 10 bits A/D result
// put the MSB to PORTD
// else
LCD_Set_Cursor(1,1); // Set LCD cursor to Line 2 with location 12
LCD_ItoA(AD_Temp);
}
}
unsigned char Set_BCD_ASCII(unsigned char BCD_Data)
{
if (BCD_Data==0)
{
if (DS_Zero_FLG) return ' '; // ﹡
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -