|
#include "STC15F2K60S2.h"
#include <intrins.H>
#include "DS18B20.h"
unsigned char dspcom=0;
unsigned char flag=0;
unsigned char Scanpoint=1;
unsigned char Choosetime,count;
unsigned char tem;
int b;
unsigned char i,a,Clock_Hour=0,Clock_Minute_tens=0,Clock_Minute_ones=0,Clock_Second_ones=0,Clock_Second_tens=0;
unsigned char Clock_1Ms=0,Clock_10Ms=0,Clock_100Ms=0;
unsigned char number=0;
unsigned char Tempnumber[10]=
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
};
unsigned char Temp[10];
unsigned char code Led_Display_Segment_Code[16]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0,1,2,3,4,5,6,7
0x7f,0x6f,0x40,0x00, //8,9,-,不亮,
};
unsigned char dspbuf[10];
unsigned char Display_Clock_Buffer[8]=
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
};
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit S4=P3^2;
sbit S5=P3^3;
sbit S6=P3^4;
sbit S7=P3^5;
bit S5_flag=0;
bit S6_flag=0;
bit S7_flag=0;
/**********************************************************
函数名称: Delay() 延时函数
***********************************************************/
void Delay(void)
{
unsigned char i,j;
for (i=0;i<2;i++)
for (j=0;j<100;j++)
_nop_();
}
/**********************************************************
函数名称: Delay1000ms() 延时函数
***********************************************************/
void Delay1000ms() [url=]//@11.0592MHz[/url]
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/**********************************************************
函数名称: Display() 数码管显示
***********************************************************/
void Display(void)
{
P0=0x00;
P0=Led_Display_Segment_Code[dspbuf[dspcom]];
P2=_cror_(P2,1);
Delay();
if(++dspcom==8)
dspcom=0;
}
/**********************************************************
函数名称: Firstshow() 采样温度数据的时间间隔的默认显示
***********************************************************/
void Firstshow(void)
{
dspbuf[0]=11;
dspbuf[1]=11;
dspbuf[2]=11;
dspbuf[3]=11;
dspbuf[4]=11;
dspbuf[5]=10;
dspbuf[6]=0;
dspbuf[7]=1;
}
/**********************************************************
函数名称:Secondshow() 采样温度数据的时间间隔的显示
***********************************************************/
void Secondshow(void)
{
dspbuf[7]=Choosetime%10;
dspbuf[6]=Choosetime/10;
dspbuf[5]=10;
dspbuf[4]=11;
dspbuf[3]=11;
dspbuf[2]=11;
dspbuf[1]=11;
dspbuf[0]=11;
}
/**********************************************************
函数名称:Clockshow() 显示时钟界面
***********************************************************/
void Clockshow(void)
{
dspbuf[7]=Clock_Second_ones;
dspbuf[6]=Clock_Second_tens;
dspbuf[5]=10;
dspbuf[4]=Clock_Minute_ones;
dspbuf[3]=Clock_Minute_tens;
dspbuf[2]=10;
dspbuf[1]=Clock_Hour%10;
dspbuf[0]=Clock_Hour/10;
}
/**********************************************************
函数名称:Tempshow() 显示记录的温度
***********************************************************/
void Tempshow(void)
{
dspbuf[7]=Temp[number]%10;
dspbuf[6]=Temp[number]/10;
dspbuf[5]=10;
dspbuf[4]=11;
dspbuf[3]=11;
dspbuf[2]=Tempnumber[number]%10;
dspbuf[1]=Tempnumber[number]/10;
dspbuf[0]=10;
}
/**********************************************************
函数名称:Timer0Init() 定时器中断函数o
***********************************************************/
void Timer0Init(void) //1毫秒@12.000MHz 初始化
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //打开定时器0
EA=1; // 开启总中断
}
void Timer0_Int(void) interrupt 1 //定时器0中断服务程序 isr_Time......
{
TL0 = 0xA0; //设置定时初值
TH0 = 0x15; //设置定时初值
if(a==0)
{
Display();
}
if(a==1)
{
Clock_1Ms++;
if(Clock_1Ms==10)
{
Clock_10Ms++;
if(Clock_10Ms==10)
{
Clock_100Ms++;
if(Clock_100Ms==10)
{
Clock_Second_ones++;
if(Clock_Second_ones==10)
{
Clock_Second_tens++;
if(Clock_Second_tens==6)
{
Clock_Minute_ones++;
if(Clock_Minute_ones==10)
{
Clock_Minute_tens++;
if(Clock_Minute_tens==6)
{
Clock_Hour++;
if(Clock_Hour==24)
{
Clock_1Ms=0;
}
}
}
}
}
}
}
}
Clockshow();
}
//dspbuf[0] = tem/10;
//dspbuf[1] = tem%10;
Display();
}
/*
void Timer1Init(void) //5000微秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xA0; //设置定时初值
TH1 = 0x15; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
void timer0() interrupt 1
{
TH1=0x4c;
TL1=0x00;
count++;
if(count==200)
{
count=0; //中断累计次数清0
}
}
*/
/**********************************************************
函数名称:Key_scan()
***********************************************************/
void Key_scan(void)
{
if(S4==0)
{
Scanpoint++;
switch(Scanpoint)
{
case 1: Choosetime=1;
break;
case 2: Choosetime=5;
break;
case 3: Choosetime=30;
break;
case 4: Choosetime=60;
break;
default:Scanpoint=1;
Choosetime=1;
break;
}
Secondshow();
while(!S4);
}
if(S5==0)
{
S5_flag=1;
while(!S5);
}
if(S6==0)
{
S6_flag=1;
while(!S6);
}
if(S7==0)
{
S7_flag=1;
while(!S7);
}
}
/**********************************************************
函数名称:Key_read()
***********************************************************/
void Key_read(void)
{
Key_scan();
while(S5_flag==1)
{ // P1_1=0;
while(flag!=3)
{
a=1;
Timer0Init();
Clockshow(); //时钟显示
// P1_1=0;
Temp[flag]=Ds18b20_ReadData(); //存入读取的温度
// P1_1=1;
flag++;
Delay1000ms();
}
S5_flag = 0;
b = 1;
}
if(b == 1)
{
P1_1=0;
Timer1Init();
P1_1=1;
Timer1Init();
}
while(S6_flag==1)
{
b = 0;
//dengmei
for(i=0;i<10;i++)
{
a=0;
Tempshow(); //显示记录的温度
// Timer0Init();
Delay1000ms();
number++;
}
}
while(S7_flag==1)
{
Firstshow();
// Choosetime=1;
Temp[10]=0;
}
}
*/
void main()
{
P2=0xfe;
Timer0Init();
// Timer1Init();
while(1)
{
Key_read();
// tem = Ds18b20_ReadData();
}
}
|
|