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

📄 vectors08.c

📁 可以显示年月日,时间等,也可以设置闹钟,设定时间
💻 C
字号:
/*-----------------------------------------------------*
*文件名:vectors08.c                                    *
*功  能:用于定义中断矢量表                             *
*-----------------------------------------------------*/
#include "GP32C.H"
#include "SCI.h"            //串行通信头文件
#include "KB.h" 
/*[相应寄存器定义]*/
#define TSTOPBit   5        //定时器计数停止位
#define TOFBit     7        //定时器溢出标志位
/*isrTIMER1:定时器溢出中断处理函数---------------------*
*功  能:给内存单元Time[0-2](时分秒)赋值                *
*-----------------------------------------------------*/
extern unsigned char time[3], naozhong,KB_valve;     //H M S
extern unsigned int data[3];
extern unsigned char alart[2];
unsigned char flat=0,f1=0,f2=0;
unsigned char getmonthdays(unsigned int year,unsigned char month)/*得到某月的天数*/
{
 unsigned char days;
 switch (month)
 {
  case 4:
  case 6:
  case 9:
  case 11:days=30;
          break;
  case 2: if((year%4==0&&year%100!=0)||(year%400==0))  days=29;
   else days=28;
          break;
  default:days=31;
          break;
 }
 return days;
}
#pragma interrupt_handler isrTIMER1
void isrTIMER1(void)
{  
   unsigned char i;
   asm("SEI");            //关总中断
   //------------------------------
   if(((time[0]==0)&&(time[1]==0))||((time[1]==alart[0])&&(time[2]==alart[0])))naozhong=1;
   time[0]++;             //秒数加1
   if (time[0]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
   time[0]=0; time[1]++;  //秒数增加到60,清0,分钟数加1
   if (time[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
   time[1]=0; time[2]++;  //分钟数增加到60,清0,小时数加1
   if (time[2]!=24) goto isrTIMER1_exit; //小时数未增到24,转
   time[2]=0; data[0]++;           //时数增加到24,清0,日期增1
   if(data[0]!=getmonthdays(data[2],data[1])) goto isrTIMER1_exit; //天数数未增到月尾值,转
   data[0]=0;data[1]++;                //天数增加到月尾值,清0,月数加1
   if(data[1]!=13)goto isrTIMER1_exit; //月数增加未增加到12,转
   data[1]=0;data[2]++;                 //月数增加到12,清0,年数加1
   isrTIMER1_exit:	 
   //------------------------------
   //清除定时器溢出标志位
   T1SC&=~(1<<TOFBit);
   asm("CLI");            //开总中断
}
/*isrRe:接收中断处理函数-------------------------------*
*功  能:接收3字节基准时分秒放入内存单元Time[0-2]       *
*-----------------------------------------------------*/
#pragma interrupt_handler isrRe  
void isrRe(void) 
  {
   	asm("SEI");	       //禁止所有中断
        //接收数据
        SCIReN(3,time);
	  asm("CLI");        //开放总中断	
  }
/*键盘中断处理函数------------------------------------*/
#pragma interrupt_handler isrKBI
void isrKBI(void) 
{
      
	  asm("SEI");	  	        //关总中断
	  INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
	   KB_valve=KB_Scan();     //扫描键值
       KB_valve=KB_Def(KB_valve);  //键值转化为
       isrKBI_exit:  
	   KB_Init();			     //重新初始化键盘
	   INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
	   asm("CLI");			     //开总中断

      
}
//未定义的中断处理函数,本函数不能删除
#pragma interrupt_handler isrDummy  
void isrDummy(void) 
{
}
#pragma abs_address:0xffdc    //中断向量表起始地址
void (* const _vectab[])(void) = {            
	isrDummy,   //时基中断 
	isrDummy,		//AD转换中断      
	isrKBI, 	//键盘中断    
	isrDummy,		//SCI TC/TE 
	isrRe,      //SCI RF/IDLE 
	isrDummy,		//SCI PE/FE/NF/OR
	isrDummy,		//SPI TE  
	isrDummy,		//SPI MOD/OVR/RF
	isrDummy,		//TIM2溢出中断 
	isrDummy,		//TIM2通道1
	isrDummy,		//TIM2通道0
	isrTIMER1,	    //TIM1溢出中断      
	isrDummy,		//TIM1通道1
	isrDummy,		//TIM1通道0
	isrDummy,		//CGM     
	isrDummy,		//IRQ     
	isrDummy		//SWI       
    //RESET也是中断,定义在 crt08.o中 
   };
#pragma end_abs_address

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -