📄 main.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 + -