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

📄 main.bak

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 BAK
字号:
/**********************************************************************************************
main.c file

ADuC7027的第九个实验——定时计数器

作者:Computer-lov
建立日期:2006-4-24
修改日期:2006-4-24
版本:V1.0
版权所有,盗版必究。
任何技术问题可到我的博客上留言:    http://computer00.21ic.org
Copyright(C) Computer-lov 2006-2016
All rights reserved
**********************************************************************************************/


#include <ADuC7027.H>
#include <../my_type.h>
#include "LED.H"
#include "interrupt.h"
#include "Timer.h"
#include "UART.H"

/*********************************************************************************************/
void SysClkInit(void)
{
 PLLKEY1=0xAA;
 PLLCON=0x01;   //PLL配置  
 PLLKEY2=0x55;
 POWKEY1=0x01;
 POWCON=0x00;  //CPU时钟配置为41.78MHz
 POWKEY2=0xF4;
// while(!(PLLSTA & 0x01));
}
///////////////////////////////////////////////////////////////////////////////////////////////


/*********************************************************************************************/
void IRQ_Handler(void) __irq	//IRQ中断服务程序
{
   
 if(IRQSTA & TIMER1)   //Timer0中断.每24小时中断一次
  {
   T1CLRI=0;		  //清中断
//   RealDate.Day++;
   return;
  }


 if(IRQSTA & TIMER2)	   //读取IRQ中断状态,判断IRQ中断源
  {						   //Timer2中断
   T2CLRI=0;			   //清中断
   if(LED6STAT)
    {
	 ON_LED6();			  	//如果LED6灭的,则点亮它
	}
   else
    {
	 OFF_LED6();		  //如果LED6亮的,则熄灭它
	}				   
   return;
  }


 if(IRQSTA & TIMER3)	   //读取IRQ中断状态,判断IRQ中断源
  {						   //Timer2中断
   T3CLRI=0;
   if(LED7STAT)
    {
	 ON_LED7();			   	//如果LED7灭的,则点亮它
	}
   else
    {
	 OFF_LED7();			//如果LED7亮的,则熄灭它
	}				   
   return;
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////


/*********************************************************************************************/
void FIQ_Handler(void) __fiq   //FIQ中断服务程序
{
 if(FIQSTA & TIMER0)	   //读取FIQ中断状态,判断FIQ中断源
  {						   //Timer0中断
   GP0CLR=(1<<(6+16));	   //在P0.6上产生一个上升沿,给Timer1提供1/128秒的时钟信号
   GP0SET=(1<<(6+16));
   T0CLRI=0;                //清Timer0中断
   if(LED4STAT)
    {
	 ON_LED4();	//如果LED4灭的,则点亮它
	}
   else
    {
	 OFF_LED4();			//如果LED4亮的,则熄灭它
    }
   return;
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////


union 
{
 uint32 TimeData;
 time_type Time;
}RealTime;

/*********************************************************************************************/
void DisplayTime(void)
{
 static uint32 OldSecond;	//用来判断是否需要更新显示

 if(OldSecond==RealTime.Time.Second)  //如果秒值没有变化,则不用刷新时间
  {
   return;
  }

 OldSecond=RealTime.Time.Second;	 //如果秒值发生了变化,则需要刷新,并保存当前秒值

 if(LED5STAT)	 //控制LED5每秒闪烁一次
  {
   ON_LED5();
  }
 else
  {
   OFF_LED5();
  }

 send_a_byte(RealTime.Time.Hour/10+'0');	 //显示小时
 send_a_byte(RealTime.Time.Hour%10+'0');
 send_a_byte(':');
 send_a_byte(RealTime.Time.Minute/10+'0');	  //显示分
 send_a_byte(RealTime.Time.Minute%10+'0');
 send_a_byte(':');
 send_a_byte(RealTime.Time.Second/10+'0');	  //显示秒
 send_a_byte(RealTime.Time.Second%10+'0');
// send_a_byte(':');
// send_a_byte(RealTime.Time.Hundredths/10+'0');
// send_a_byte(RealTime.Time.Hundredths%10+'0');
 prints("",1);
}
///////////////////////////////////////////////////////////////////////////////////////////////

/*********************************************************************************************/
void main(void)
{
 SysClkInit();
 UART_init();
 cls();

 EN_LED4();
 EN_LED5();
 EN_LED6();
 EN_LED7();
 OFF_LED4();
 OFF_LED5();
 OFF_LED6();
 OFF_LED7();
 
 Timer0Init();
 Timer1Init();
 Timer2Init();
 Timer3Init();


 prints("System Start......",1);

 while(1)
  {
   RealTime.TimeData=T1VAL;	 //读回定时器1的值
   DisplayTime();			 //显示时间
  }
}
///////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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