#include <STC15F2K60S2.H>
#include "intrins.H"
#include "main.h"
#include "onewire.h"
#include "iic.h"
unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0xc6,0x8c,0x88};//0~9,关闭,C,P A
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char jie=1;
unsigned int wendu=1900;
unsigned char k=0;
unsigned char wendu_self=25;//温度参数
unsigned char moshi=1;
unsigned char LED_selg=0xff;
unsigned d;
float DAC;
void moshi_x();
void key();
void display();
void jiemian();
void Timer0_Init(void);
void LED_dis();
void Delay100us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 23;
while (--i);
}
void Delayms(unsigned char k) //@11.0592MHz
{
unsigned char i, j;
while(k--)
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
void main()
{
P0=0x00;
Y5C;Y0C;
P0=0xff;
Y4C;
Y0C;
yi=er=wu=san=si=wu=liu=qi=ba=11;
Timer0_Init();
wendu=read_temp();
while(1)
{
jiemian();
key();
moshi_x();
LED_dis();
}
}
void LED_dis()
{
P0=LED_selg;
Y4C;
if(moshi==1)
{
LED_selg&=0xfe;
}
else
LED_selg|=~0xfe;
if(jie==1)
{
LED_selg&=0xfd;
}
else
LED_selg|=~0xfd;
if(jie==2)
{
LED_selg&=0xfb;
}
else
LED_selg|=~0xfb;
if(jie==3)
{
LED_selg&=0xf7;
}
else
LED_selg|=~0xf7;
Y0C;
}
void moshi_x()
{
float t;
unsigned char a;
if(k>=250)
{
wendu=read_temp();
k=0;
}
t=(float)wendu/100;
if(moshi==1)
{
if(t<wendu_self)
DAC=0;
else DAC=5;
}else if(moshi==2)
{
if(t<=20)
DAC=1;
else if(t>=40)
DAC=4;
else
DAC=1+(t-20)*0.15;
}
a=DAC*51;
d=DAC*100;
write_DAC(a);
jiemian();
}
void time1() interrupt 1
{
k++;
}
void Timer0_Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;
ET0=1;
}
void jiemian()
{
if(jie==1)
{
if(k>=250)
{
wendu=read_temp();
k=0;
}
yi=12;
wu=wendu/1000;
liu=(wendu/100)%10;
qi=(wendu/10)%10;
ba=wendu%10;
}else if(jie==2)
{
yi=13;
wu=11;
liu=11;
qi=wendu_self/10;//十位
ba=wendu_self%10;
}else if(jie==3)
{
yi=14;
wu=11;
liu=d/100;
qi=(d/10)%10;
ba=d%10;
}
display();
}
void display()
{
P0=0x01;Y6C;Y0C;
P0=tab[yi];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x02;Y6C;Y0C;
P0=tab[er];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x04;Y6C;Y0C;
P0=tab[san];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x08;Y6C;Y0C;
P0=tab[si];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x10;Y6C;Y0C;
P0=tab[wu];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x20;Y6C;Y0C;
if(jie==1||jie==3)
P0=tab[liu]&0x7f;
else P0=tab[liu];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x40;Y6C;Y0C;
P0=tab[qi];Y7C;Delay100us();P0=0xff;Y0C;
P0=0x80;Y6C;Y0C;
P0=tab[ba];Y7C;Delay100us();P0=0xff;Y0C;
}
void key()
{
P3=0xff;
P44=1;
P42=1;
P44=0;
if(P32==0||P33==0)
{
Delayms(7);
if(P32==0)//S5
{
if(moshi==1) moshi=2;else if(moshi==2) moshi=1;
}
if(P33==0)//S4
{
if(jie==1) jie=2;
else if(jie==2) jie=3;
else if(jie==3) jie=1;
}
}while(P32==0||P33==0) display();
P3=0xff;
P44=1;
P42=1;
P42=0;
if(P32==0||P33==0)
{
Delayms(7);
if(P32==0)//S9
{
if(jie==2)
wendu_self+=1;
}
if(P33==0)//S8
{
if(jie==2)
wendu_self-=1;
}
}while(P32==0||P33==0) display();
}