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

📄 main.c

📁 用mc9s12dg128实现电子时钟
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#include "LED.h"

extern   INT8U  DispSegTbl[],DispHexToSegTbl[];

#define   A        PORTA_BIT0     //A键,接定时器TC1
#define   B        PORTA_BIT1     //B键,接定时器TC2
#define   C        PORTA_BIT2     //C键,接定时器TC3
#define   Stop     PORTA_BIT3     //Stop键,接定时器TC1

unsigned char Sec;
unsigned char Min;
unsigned char Her;
unsigned char Flag; 
 
 unsigned char   Display[6];
 

/***********1ms延时**************/
void Dly1ms(int cnt) 
{
int i;      
int j;
for(i=0; i<cnt; i++) 
  {
   j = 0x1300;
   while(j--);
  }
}


void main(void) 
{    
   unsigned int i; 
   Sec = 0;
   Min = 0;
   Her = 0;
   Flag = 0;
 /**********************/
   
  MCCTL = 0x4F;   //模计数器设置,分频系数为16,(1100 1111)
  MCFLG_MCZF = 1;  //清除模计数器中断标志位
  MCCNT = 500;   //模计数器置初始值
 /*********************/
  
   
   
  /******************按键中断初始化**********************/  
 
  TSCR1 = 0X80;  //TIMER使能
  TSCR2 = 0X07;  //主定时器中断禁止,并且设置预定因子为128
  TIE = 0X1F;    //TC0中断使能
  TIOS = 0X01;   //TC0设置为输出比较,TC1,CT2,TC3,TC4为输入捕捉
  TCTL2 = 0;
  TFLG1 = 0X01;
  TCTL3 = 0X02;
  TCTL4 = 0xAA;  // 下降沿有效 
  
  PERT = 0xFF; //Pull enable
  PPST =0X00;  //Pull
  
  TC0 = 62560;
  TFLG1 = 0X1F;  //清TC0中断标志位
  DLYCT = 0x01;  //延迟时间256个总线时钟周期
                                             
  /*************************************************/
  
   PORTB = 0xA4;
   DDRB = 0XFF;  
   
   PORTK = 0XFF;
   DDRK = 0XFF;
   
   DispInit();
   MCCTL_MCZI = 1;
  /*************************************************/
   
  
  for(i=0; i<6; i++) 
   DispSegTbl[i] = DispHexToSegTbl[16];   
   
   EnableInterrupts;
   for(;;) 
   {
    DispSegTbl[4] = DispHexToSegTbl[Sec/10];
    DispSegTbl[5] = DispHexToSegTbl[Sec%10];
    
    DispSegTbl[2] = DispHexToSegTbl[Min/10];
    DispSegTbl[3] = DispHexToSegTbl[Min%10]&0x7f;
     
    DispSegTbl[0] = DispHexToSegTbl[Her/10];
    DispSegTbl[1] = DispHexToSegTbl[Her%10]&0x7f;
   
 }     
        
 
}


//以下代码为TC0定时器中断服务程序
#pragma CODE_SEG NON_BANKED
void interrupt TC0_ISR(void)    
{ 

   TFLG1 = 0X01;
   TC0+= 62560;
   if(Flag%2==0) {
    
   Sec++;
   if(Sec >= 60) {
     Sec = 0;
     Min++;
   }
   if(Min >= 60) {
      Min = 0;
      Her++;
   }
   if(Her > 23) {
    Her = 0 ;
   }
   }
}
#pragma CODE_SEG DEFAULT
//以下代码为TC1定时器中断服务程序
#pragma CODE_SEG NON_BANKED
void interrupt TC1_ISR(void)    
{ 
    TFLG1 = 0X02;
    Flag = 1;
    if(Flag%2) {
    
      Sec++;
      if(Sec >= 60) {
      Sec = 0;
      }
    
    }
   
}
#pragma CODE_SEG DEFAULT


//以下代码为TC2定时器中断服务程序
#pragma CODE_SEG NON_BANKED
void interrupt TC2_ISR(void)    
{ 
    TFLG1 = 0X04;
    Flag=1;
    if(Flag%2) {
    
      Min++;
      if(Min >= 60) {
      Min = 0;
      }
    
    }
   
}
#pragma CODE_SEG DEFAULT



//以下代码为TC3定时器中断服务程序
#pragma CODE_SEG NON_BANKED
void interrupt TC3_ISR(void)    
{ 
    TFLG1 = 0X08;
    Flag = 1;
    if(Flag%2) {
    
      Her++;
      if(Her >= 24) {
      Her = 0;
      }
    
    }
   
}
#pragma CODE_SEG DEFAULT

//以下代码为TC4定时器中断服务程序
#pragma CODE_SEG NON_BANKED
void interrupt TC4_ISR(void)    
{ 
    TFLG1 = 0X10;
    Flag = 0 ;
    
}
#pragma CODE_SEG DEFAULT




⌨️ 快捷键说明

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