/*头文件声明区*/
#include <STC15F2K60S2.H>
#include "SystemInit.h"
#include "Key.h"
#include "Seg.h"
#include "ds1302.h"
#include "onewire.h"
#include "iic.h"
/*变量声明区*/
//延时
unsigned char Key_Slow_Down; //按键减速专用变量
unsigned char Seg_Slow_Down; //按键减速专用变量
unsigned char Led_Slow_Down; //按键减速专用变量
//Key
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
//Seg
unsigned char Seg_Buf[] = {10,10,10,10,10,10,10,10}; //数码管显示专用数组
unsigned char Seg_Point[] = {0,0,0,0,0,0,0,0}; //数码管小数点显示专用数组
//Led
//Timer
unsigned char Seg_Pos;
/*按键处理区域*/
void Key_Proc()
{
if(Key_Slow_Down) return;
Key_Slow_Down = 1;
Key_Val = Key_Read();
Key_Down = Key_Val & (Key_Val ^ Key_Old);
Key_Up = ~Key_Val & (Key_Val ^ Key_Old);
Key_Old = Key_Val;
}
/*显示处理区域*/
void Seg_Proc()
{
if(Seg_Slow_Down) return;
Seg_Slow_Down = 1;
}
/*其他处理区域*/
void Led_Proc()
{
if(Led_Slow_Down) return;
Led_Slow_Down = 1;
}
/*定时器初始化*/
void Timer0_Init(void) //1微秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x05;
TL0 = 0; //设置定时初始值
TH0 = 0; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void Timer1_Init(void) //1毫秒@12.000MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x18; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
EA = 1;
ET1 = 1;
}
/*中断服务区域*/
void Timer1_Serve() interrupt 3
{
if(++Key_Slow_Down == 10) Key_Slow_Down = 0; //按键延时专用
if(++Seg_Slow_Down == 500) Key_Slow_Down = 0; //数码管延时专用
if(++Led_Slow_Down == 20) Key_Slow_Down = 0; //Led延时专用
if(++Seg_Pos == 8) Seg_Pos = 0;
Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);
}
/*main主函数*/
void main()
{
System_Init();
Timer1_Init();
while(1)
{
Key_Proc();
Seg_Proc();
Led_Proc();
}
}