/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include"config.h"
#define LEDA 1<<1
#define LEDB 1<<3
#define LEDC 1<<5
#define LEDD 1<<7
#define LEDE 1<<9
#define LEDF 1<<11
#define LEDG 1<<13
#define LEDDP 1<<15
#define BIT0 1<<17
#define BIT1 1<<19
#define BIT2 1<<21
#define BIT3 1<<23
#define BIT4 1<<25
#define BIT5 1<<27
#define BIT6 1<<29
#define BIT7 1<<31
int sec=0,min=0,hou=0;
/**************************************************************************
** 中断服务程序
**
**
**
**************************************************************************/
void __irq Timer0ISR(void)
{
sec++;
if(sec==60){sec=0;min++;}
if(min==60){min=0;hou++;}
T0IR=0x01; //清除MR0中断标志
VICVectAddr=0x00; //中断向量结束
}
/**************************************************************************
**延时函数
**
**
**
**************************************************************************/
void DelayNS (uint32 uiDly)
{
uint32 i;
for (; uiDly > 0; uiDly--){
for(i = 0; i < 8929; i++);
}
}
/**************************************************************************
*数码管显示函数 共阴数码管
**
**************************************************************************/
void seg(int data)
{
if(data==0)
{
FIO0SET=LEDA | LEDB | LEDC | LEDD | LEDE | LEDF;
FIO0CLR=LEDG | LEDDP;
}
if(data==1)
{
FIO0SET=LEDB | LEDC;
FIO0CLR=LEDA | LEDD | LEDE | LEDF | LEDG | LEDDP;
}
if(data==2)
{
FIO0SET=LEDA | LEDB | LEDD| LEDE | LEDG;
FIO0CLR=LEDC | LEDF | LEDDP;
}
if(data==3)
{
FIO0SET=LEDA | LEDB | LEDC | LEDD | LEDG;
FIO0CLR=LEDE | LEDF | LEDDP;
}
if(data==4)
{
FIO0SET=LEDB | LEDC | LEDF | LEDG;
FIO0CLR=LEDA | LEDD | LEDE | LEDDP;
}
if(data==5)
{
FIO0SET=LEDA | LEDC | LEDD | LEDF | LEDG;
FIO0CLR=LEDB | LEDE | LEDDP;
}
if(data==6)
{
FIO0SET=LEDC | LEDD | LEDE | LEDF | LEDG;
FIO0CLR=LEDA | LEDB | LEDDP ;
}
if(data==7)
{
FIO0SET=LEDA | LEDB | LEDC;
FIO0CLR=LEDD | LEDE | LEDF | LEDG | LEDDP;
}
if(data==8)
{
FIO0SET=LEDA | LEDB | LEDC | LEDD | LEDE | LEDF | LEDG;
FIO0CLR=LEDDP;
}
if(data==9)
{
FIO0SET=LEDA | LEDB | LEDC | LEDF | LEDG;
FIO0CLR=LEDD | LEDE | LEDDP;
}
if(data==10)
{
FIO0SET=LEDG;
FIO0CLR=LEDA | LEDB | LEDC | LEDD | LEDE | LEDF | LEDDP;
}
}
/**************************************************************************
**
**显示函数
**
**
**************************************************************************/
void display()
{int i;
for(i=0;i<8;i++)
{
FIO0SET = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;
if(i==0)
{
FIO0CLR = BIT0;
seg(sec%10);
DelayNS(2);
}
if(i==1)
{
FIO0CLR = BIT1;
seg(sec/10);
DelayNS(2);
}
if(i==2)
{
FIO0CLR = BIT2;
seg(10);
DelayNS(2);
}
if(i==3)
{
FIO0CLR = BIT3;
seg(min%10);
DelayNS(2);
}
if(i==4)
{
FIO0CLR = BIT4;
seg(min/10);
DelayNS(2);
}
if(i==5)
{
FIO0CLR = BIT5;
seg(10);
DelayNS(2);
}
if(i==6)
{
FIO0CLR = BIT6;
seg(hou%10);
DelayNS(2);
}
if(i==7)
{
FIO0CLR = BIT7;
seg(hou/10);
DelayNS(2);
}
}
}
/**************************************************************************
**定时器初始化
**
**
**
**************************************************************************/
void Timer0Init()
{
T0TCR=0x02; //定时器0复位
T0PR = 0; //关闭分频
T0MCR=0x03; //匹配后复位TO,并产生中断
T0MR0=Fpclk/1; //设置周期为1s
T0IR=0x01; //清除中断标志
T0TCR=0x01; //启动定时器0
}
/************************************************************************
** 主函数
** 定义输出引脚,总共十二个,P0.1P0.3P0.5P0.7P0.9P0.11P0.13P0.15P0.17P0.19P0.21P0.23
** 定时器的初始化
** 定时器中断服务程序里应该包括,时间相加,数码管的显示
**
**************************************************************************/
int main()
{
PINSEL0=0x00000000; //设置GPIO口
PINSEL1=0x00000000;
SCS = 0x01; /* 设定为高速GPIO模式 */
FIO0DIR =LEDA|LEDB|LEDC|LEDD|LEDE|LEDF|LEDG|LEDDP|BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7; /* 设置控制口为输出 */
FIO0SET = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;
Timer0Init();
IRQEnable(); //中断使能
VICIntSelect=VICIntSelect&(~(1<<4)); //选择定时器0为IRQ中断
VICVectCntl0= 0x20|4; //定时器0分配向量IRQ中断0
VICVectAddr0=(uint32)Timer0ISR; //分配中断服务地址
VICIntEnable=1<<4; //定时器0中断使能
while(1)
{
display();
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/