输入时间+定时器
计数模式
(向上计数,向下计数,中央对齐计数)
捕获比较模式:
(捕获)
1、输入捕获模式
2、PWM输入模式
(比较)
1、强制输出模式
2、比较输出模式
3、PWM模式
4、单脉冲模式
编码器模式
从模式
1、复位模式
2、门控模式
3、触发模式
4、外部时钟模式+触发模式
主模式
时钟:
1、内部时钟
2、外部时钟1
3、外部时钟2
#include "Systerm.h"
/*****************秒表变量*********************/
u32 Stopwatch_counting = 0;
u8 Stopwatch_Start = 0;
u8 Stopwatch_RST = 0;
/*****************录音变量*********************/
u16 Luyin_counting = 0;
u8 Luyin_start = 0;
/*****************放音变量*********************/
u16 Fangyin_counting = 0;
u8 Fangyin_start = 0;
/*****************时间调整*********************/
int clock_gengxin[7] = {
0,1,1};
int main(void)
{
static uint8 key=0;
static uint8 key1=0;
static uint8 key2=0;
static uint8 key3=0;
// static uint8 key4=0;
uint8 Add1=0,Add2=0,Add3=0,Add4=0,Add5=0,Add6 = 0;
uint8 ADd1=0;
/*****************录放音变量*********************/
u32 Stopwatch_count[2];
u16 Luyin_count[2] = {
0,0};
u16 Fangyin_count[2] = {
0,0};
uint8 i;
/*****************闹钟变量*********************/
uint16 Shi = 0,Shi1 = 0,Shi2 = 0,Fen = 0,Fen1 = 0,Fen2 = 0,Miao = 0,Miao1 = 0,Miao2 = 0;
uint16 Alarm_clock_S1 = 0,Alarm_clock_F1 = 0,Alarm_clock_M1 = 0;
uint16 Alarm_clock_S2 = 0,Alarm_clock_F2 = 0,Alarm_clock_M2 = 0;
uint16 Alarm_clock_S3 = 0,Alarm_clock_F3 = 0,Alarm_clock_M3 = 0;
/*****************时间调整变量*********************/
u32 t = 2000;
Systerm_Init();
while(1)
{
BLED_ON; //蓝色指示灯
DHT12_READ(); //读取温湿度
Ds1302_Readtime(); //读取时间
key = KEY_Scan(); //读取按键值
/*************************************************一界面------------------秒表*********************************************/
if(key == 1) //一界面------------------秒表
{
if(!Add1)
{
OLED_Clear(); //先清屏
Add1 = 1;
}
Add2 = 0;
Add3 = 0;
Add4 = 0;
Add5 = 0;
Add6 = 0;
for(i=10;i<12;i++)
{
OLED_P16x16Ch(46+(i-10)*16,0,i);//一界面显示“秒表”
}
for(i=14;i<16;i++)
{
OLED_P16x8Ch(1+(i-14)*16,3,i);//一界面显示“计时”
}
if(KEY2==1)
{
Stopwatch_Start = 1;
}
else if(KEY3==1)
{
Stopwatch_Start = 0;
}
else if(WK_UP==1)
{
Stopwatch_counting = 0;
Stopwatch_Start = 0;
}
Stopwatch_count[1] = Stopwatch_counting/10;
Stopwatch_count[0] = Stopwatch_counting%10;
OLED_F6x8Str1(84,6,Stopwatch_count[1],4);
OLED_P6x8Str(108,6,".");
OLED_F6x8Str1(114,6,Stopwatch_count[0],1);
}
/*************************************************二界面------------------录放音*********************************************/
else if(key == 2) //二界面------------------录放音
{
if(!Add2)
{
OLED_Clear(); //先清屏
Add2 = 1;
}
Add1 = 0;
Add3 = 0;
Add4 = 0;
Add5 = 0;
Add6 = 0;
for(i=12;i<15;i++)
{
OLED_P16x16Ch(38+(i-12)*16,0,i);//二界面显示“录放音”
}
OLED_P16x16Ch(5,3,12);//二界面显示“录”
OLED_P16x16Ch(5+16,3,14);//二界面显示“音”
OLED_P16x16Ch(5+32,3,23);//二界面显示“:”
OLED_P16x16Ch(5,6,13);//二界面显示“放”
OLED_P16x16Ch(5+16,6,14);//二界面显示“音”
OLED_P16x16Ch(5+32,6,23);//二界面显示“:”
if(Luyin_counting<100)
{
OLED_F6x8Str1(104,4,Luyin_count[1],2);
OLED_P6x8Str(116,4,".");
OLED_F6x8Str1(122,4,Luyin_count[0],1);
OLED_F6x8Str1(104,7,Fangyin_count[1],2);
OLED_P6x8Str(116,7,".");
OLED_F6x8Str1(122,7,Fangyin_count[0],1);
}
/*************************************************录音*********************************************/
if(KEY4 == 1)
{
if(Luyin_counting>100)
{
Luyin_start = 0;
for(i=24;i<29;i++)
{
OLED_P16x16Ch(55+(i-24)*16,3,i);//二界面显示“录音超时”
ADd1 = 1;
}
}
else
{
LY_start;
Luyin_start = 1;
for(i=16;i<18;i++)
{
OLED_P16x8Ch(55+(i-16)*16,4,i);//二界面显示“开始”
}
Luyin_count[1] = Luyin_counting/10;
Luyin_count[0] = Luyin_counting%10;
}
}
else
{
Luyin_counting = 0;
LY_stop;
Luyin_start = 0;
if(ADd1 == 1)
{
ADd1 = 0;
for(i=55;i<128;i++)
{
OLED_P6x8Str(i,3," ");
OLED_P6x8Str(i,4," ");
}
}
for(i=18;i<20;i++)
{
OLED_P16x8Ch(55+(i-18)*16,4,i);//二界面显示“结束”
}
}
/*************************************************放音*********************************************/
if(WK_UP == 1)
{
BF_start;
Fangyin_start = 1;
for(i=16;i<18;i++)
{
OLED_P16x8Ch(55+(i-16)*16,7,i);//二界面显示“开始”
}
}
Fangyin_count[1] = Fangyin_counting/10;
Fangyin_count[0] = Fangyin_counting%10;
if(Fangyin_counting>Luyin_count[1]*10+Luyin_count[0])
{
TBF_stop;
Fangyin_start = 0;
Fangyin_counting =0;
for(i=18;i<20;i++)
{
OLED_P16x8Ch(55+(i-18)*16,7,i);//二界面显示“结束”
}
}
}
/*************************************************三界面------------------闹钟*********************************************/
else if(key == 3)
{
if(!Add3)
{
OLED_Clear(); //先清屏
Add3 = 1;
}
Add1 = 0;
Add2 = 0;
Add4 = 0;
Add5 = 0;
Add6 = 0;
for(i=29;i<31;i++)
{
OLED_P16x16Ch(46+(i-29)*16,0,i);//三界面显示“闹钟”
}
key1 = KEY_Scan2(); //读取按键值
if(key1 == 1)
{
for(i=23;i<26;i++)
{
OLED_P16x8Ch(5+(i-23)*16,5,i);//三界面显示“定时二”
}
OLED_P16x8Ch(5+3*16,5,29);//三界面显示“:”
for(i=26;i<29;i++)
{
OLED_P16x8Ch(5+(i-26)*16,7,i);//三界面显示“定时三”
}
OLED_P16x8Ch(5+3*16,5,29);//三界面显示“:”
OLED_F6x8Str1(67,5,Shi1,2); //shi
OLED_P6x8Str(82,5,":");
OLED_F6x8Str1(91,5,Fen1,2); //shi
OLED_P6x8Str(106,5,":");
OLED_F6x8Str1(115,5,Miao1,2); //shi
OLED_P16x8Ch(5+3*16,7,29);//三界面显示“:”
OLED_F6x8Str1(67,7,Shi2,2); //shi
OLED_P6x8Str(82,7,":");
OLED_F6x8Str1(91,7,Fen2,2); //shi
OLED_P6x8Str(106,7,":");
OLED_F6x8Str1(115,7,Miao2,2); //shi
/***************************上面是把上一界面消掉*********************************/
for(i=20;i<23;i++)
{
OLED_P16x8Ch1(5+