#include <STC15F2K60S2.H>
#include <Seg.H>
#include <Buzzer.H>
#include <Timer0.H>
#include <Key.H>
#include <Led.H>
#include <DS1302.H>
#include <ONEWIRE.H>
#include <IIC.H>
unsigned char Key_Val,Key_Old,Key_Down,Key_Up;
unsigned char Key_Slow_Down;
unsigned char Seg_Slow_Down;
unsigned char Seg_Buf[]={10,10,10,10,10,10,10,10};
unsigned char Seg_Pos;
unsigned char Dot_Table[]={0,0,0,0,0,0,0,0};
unsigned char ucLed[]={0,0,0,0,0,0,0,0};
unsigned char ucRtc[]={0x23,0x59,0x50};
unsigned char Seg_Mode; //0-温度显示 1-时间显示 2-参数设置
float T;
float T_Set=23;
bit Control_Mode; //0-温度控制 1-时间控制
unsigned int Timer_5000ms;
bit Time_Control_Flag;
bit Led_Flag;
unsigned int Timer_50ms;
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;
if(Seg_Mode==1)
{
if(Key_Old==17)
{
Seg_Buf[3]=ucRtc[1]/16;
Seg_Buf[4]=ucRtc[1]%16;
Seg_Buf[6]=ucRtc[2]/16;
Seg_Buf[7]=ucRtc[2]%16;
}
if(Key_Up==17)
{
Seg_Buf[3]=ucRtc[0]/16;
Seg_Buf[4]=ucRtc[0]%16;
Seg_Buf[6]=ucRtc[1]/16;
Seg_Buf[7]=ucRtc[1]%16;
}
}
switch (Key_Down)
{
case 12: //模式切换
if(++Seg_Mode==3)
Seg_Mode=0;
break;
case 13:
Control_Mode^=1;
break;
case 16: //+
if(Seg_Mode==2)
{
T_Set++;
if(T_Set==100)
T_Set=99;
}
break;
case 17: //-
if(Seg_Mode==2)
{
T_Set--;
if(T_Set==9)
T_Set=10;
}
break;
}
}
void Seg_Proc()
{
if(Seg_Slow_Down) return;
Seg_Slow_Down=1;
T=T_Read();
Read_Rtc(ucRtc);
switch (Seg_Mode)
{
case 0:
Seg_Buf[0]=11;
Seg_Buf[1]=1;
Seg_Buf[2]=10;
Seg_Buf[3]=10;
Seg_Buf[4]=10;
Seg_Buf[5]=(int)(T*10)/100%10;
Seg_Buf[6]=(int)(T*10)/10%10;
Seg_Buf[7]=(int)(T*10)%10;
Dot_Table[6]=1;
break;
case 1:
Seg_Buf[0]=11;
Seg_Buf[1]=2;
Seg_Buf[2]=10;
Seg_Buf[3]=ucRtc[0]/16;
Seg_Buf[4]=ucRtc[0]%16;
Seg_Buf[5]=12;
Seg_Buf[6]=ucRtc[1]/16;
Seg_Buf[7]=ucRtc[1]%16;
Dot_Table[6]=0;
break;
case 2:
Seg_Buf[0]=11;
Seg_Buf[1]=3;
Seg_Buf[2]=10;
Seg_Buf[3]=10;
Seg_Buf[4]=10;
Seg_Buf[5]=10;
Seg_Buf[6]=T_Set/10;
Seg_Buf[7]=(int)T_Set%10;
break;
}
}
void Led_Proc()
{
if(Control_Mode==0) //温度控制
{
ucLed[1]=1;
if(T_Set<T)
{
Relay(1);
ucLed[2]=Led_Flag?1:0;
}
else
{
Relay(0);
ucLed[2]=0;
}
}
if(Control_Mode==1) //时间控制
{
ucLed[1]=0;
if(ucRtc[1]==0x00&&ucRtc[2]==0x00)
Time_Control_Flag=1;
if(Time_Control_Flag==1)
{
Relay(1);
ucLed[0]=1;
ucLed[2]=Led_Flag?1:0;
}
if(Time_Control_Flag==0)
{
Relay(0);
ucLed[0]=0;
ucLed[2]=0;
}
}
}
void Delay750ms(void) //@12.000MHz
{
unsigned char data i, j, k;
i = 35;
j = 51;
k = 182;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
T_Read();
Delay750ms();
Timer0_Init();
Buzzer_Init();
Set_Rtc(ucRtc);
while(1)
{
Key_Proc();
Seg_Proc();
Led_Proc();
}
}
void Timer0_Routine() interrupt 1
{
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
if(++Key_Slow_Down==20) Key_Slow_Down=0;
if(++Seg_Slow_Down==200) Seg_Slow_Down=0;
if(++Seg_Pos==8) Seg_Pos=0;
Seg_Disp(Seg_Pos+1,Seg_Buf[Seg_Pos],Dot_Table[Seg_Pos]);
Led_Disp(Seg_Pos+1,ucLed[Seg_Pos]);
if(Time_Control_Flag==1)
{
if(++Timer_5000ms==5000)
{
Timer_5000ms=0;
Time_Control_Flag=0;
}
}
if(++Timer_50ms==50)
{
Timer_50ms=0;
Led_Flag^=1;
}
}
这是main.c里的内容,我按照b站西风写的,底层代码西风视频里有,都说挺难的,我感觉也没啥
-_-

1592

被折叠的 条评论
为什么被折叠?



