?? 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 + -