⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer_c.c

📁 这是同学做的针对PIC18F452的时钟显示程序 做得不错
💻 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 + -